diff --git a/src/db/db-mgr.cpp b/src/db/db-mgr.cpp
index 5ab9db1..baabad8 100644
--- a/src/db/db-mgr.cpp
+++ b/src/db/db-mgr.cpp
@@ -26,25 +26,22 @@
 namespace ndns {
 
 DBMgr::DBMgr()
-: m_dbfile("src/db/ndns-local.db")
-, m_conn(0)
-, m_reCode(-1)
-, m_status(DBClosed)
-, m_resultNum(0)
+  : m_dbfile("src/db/ndns-local.db")
+  , m_conn(0)
+  , m_reCode(-1)
+  , m_status(DBClosed)
+  , m_resultNum(0)
 {
   std::fstream file;
-  file.open(m_dbfile,std::ios::in);
-  if (file)
-  {
-    std::cout<<"database file "<<m_dbfile<<" does exist"<<std::endl;
-  } else
-  {
-    std::cout<<"database file "<<m_dbfile<<" does not exist"<<std::endl;
+  file.open(m_dbfile, std::ios::in);
+  if (file) {
+    std::cout << "database file " << m_dbfile << " does exist" << std::endl;
+  } else {
+    std::cout << "database file " << m_dbfile << " does not exist" << std::endl;
   }
 
 }
 
-
 DBMgr::~DBMgr()
 {
 }
@@ -55,14 +52,12 @@
     return;
 
   m_reCode = sqlite3_open(this->m_dbfile.c_str(), &(this->m_conn));
-  if (m_reCode != SQLITE_OK)
-  {
-    m_err = "Cannot connect to the db: "+this->m_dbfile;
+  if (m_reCode != SQLITE_OK) {
+    m_err = "Cannot connect to the db: " + this->m_dbfile;
     m_status = DBError;
     //exit(1);
-  }else
-  {
-    std::cout<<"connect to the db: "<<m_dbfile<<std::endl;
+  } else {
+    std::cout << "connect to the db: " << m_dbfile << std::endl;
   }
   m_status = DBConnected;
 }
@@ -73,15 +68,15 @@
     return;
 
   m_reCode = sqlite3_close(this->m_conn);
-  if (m_reCode != SQLITE_OK)
-  {
-        m_err = "Cannot close the db: "+this->m_dbfile;
-        m_status = DBError;
+  if (m_reCode != SQLITE_OK) {
+    m_err = "Cannot close the db: " + this->m_dbfile;
+    m_status = DBError;
   }
   m_status = DBClosed;
 }
 
-void DBMgr::execute(std::string sql, int (*callback)(void*,int,char**,char**), void * paras)
+void DBMgr::execute(std::string sql,
+    int (*callback)(void*, int, char**, char**), void * paras)
 {
   if (m_status == DBClosed)
     this->open();
@@ -89,15 +84,14 @@
   clearResultNum();
   char *err_msg;
   m_reCode = sqlite3_exec(m_conn, sql.c_str(), callback, paras, &err_msg);
-  if (m_reCode != SQLITE_OK)
-  {
+  if (m_reCode != SQLITE_OK) {
     m_status = DBError;
     this->m_err.append(err_msg);
-    std::cout<<this->m_err<<std::endl;
+    std::cout << this->m_err << std::endl;
   }
   this->close();
 }
 
-}//namespace ndns
-}//namespace ndn
+} //namespace ndns
+} //namespace ndn
 
diff --git a/src/db/db-mgr.hpp b/src/db/db-mgr.hpp
index c6445af..ab016e1 100644
--- a/src/db/db-mgr.hpp
+++ b/src/db/db-mgr.hpp
@@ -23,19 +23,15 @@
 #include <sqlite3.h>
 #include <iostream>
 
-
 namespace ndn {
 namespace ndns {
 
-
 class DBMgr
 {
 public:
   enum m_status
   {
-    DBConnected,
-    DBClosed,
-    DBError
+    DBConnected, DBClosed, DBError
   };
 
 public:
@@ -44,57 +40,68 @@
 
   void open();
   void close();
-  void execute(std::string sql,
-        int (*callback)(void*,int,char**,char**), void * paras);
+  void execute(std::string sql, int (*callback)(void*, int, char**, char**),
+      void * paras);
 
-  inline void addResultNum(){
+  inline void addResultNum()
+  {
     m_resultNum += 1;
   }
-  inline void clearResultNum() {
+  inline void clearResultNum()
+  {
     m_resultNum = 0;
   }
 
-  const std::string& getDbfile() const {
+  const std::string& getDbfile() const
+  {
     return m_dbfile;
   }
 
-  void setDbfile(const std::string& dbfile) {
+  void setDbfile(const std::string& dbfile)
+  {
     this->m_dbfile = dbfile;
   }
 
-  const std::string& getErr() const {
+  const std::string& getErr() const
+  {
     return m_err;
   }
 
-  void setErr(const std::string& err) {
+  void setErr(const std::string& err)
+  {
     this->m_err = err;
   }
 
-  int getReCode() const {
+  int getReCode() const
+  {
     return m_reCode;
   }
 
-  void setReCode(int reCode) {
+  void setReCode(int reCode)
+  {
     this->m_reCode = reCode;
   }
 
-  m_status getStatus() const {
+  m_status getStatus() const
+  {
     return m_status;
   }
 
-  void setStatus(m_status status) {
+  void setStatus(m_status status)
+  {
     this->m_status = status;
   }
 
-  int getResultNum() const {
+  int getResultNum() const
+  {
     return m_resultNum;
   }
 
-  void setResultNum(int resultNum) {
+  void setResultNum(int resultNum)
+  {
     m_resultNum = resultNum;
   }
 
-
 private:
   std::string m_dbfile;
   sqlite3 *m_conn;
@@ -102,8 +109,9 @@
   int m_reCode;
   m_status m_status;
   int m_resultNum;
-}; //class DBMgr
+};
+//class DBMgr
 }//namespace ndns
-}//namespace ndn
+} //namespace ndn
 
 #endif
diff --git a/src/db/ndns-db-data-demo.sql b/src/db/ndns-db-data-demo.sql
index 8564207..6567c5b 100644
--- a/src/db/ndns-db-data-demo.sql
+++ b/src/db/ndns-db-data-demo.sql
@@ -1,4 +1,7 @@
-
+/*
+sqlite3 src/db/ndns-local.db
+.read ndns-db-data-demo.sql
+*/
 delete from rrs;
 delete from rrsets;
 delete from zones;
@@ -8,33 +11,102 @@
                   (2, "/net"),
                   (3, "/net/ndnsim"),
                   (4, "/dns/google/com"),
-                  (5, "/net/ndnsim/git/doc")
+                  (5, "/net/ndnsim/git/doc"),
+                  
+                  (6, "/com"),
+                  (7, "/com/skype")
                   ;
 
 insert into rrsets (id, zone_id, label, class, type, ndndata) values
+                  /* NS of sub-domain */
+                   (4,   1,     "/net",  NULL,   "NS", NULL),
+                   (3,   2,     "/ndnsim", NULL, "NS", NULL),
+                   (7,   3,     "/git/doc", NULL, "NS", NULL),
+                   
+                    /* FH of NS (name servers) */
+                   (21,  1,     "/net/ns1", NULL, "FH", NULL),
+                   (18,  2,     "/net/ndnsim/ns1", NULL, "FH", NULL),   
+                   (19,  3,     "/net/ndnsim/git/doc/ns1", NULL, "FH", NULL),
+              
+                   /* TXT of service/app*/
                    (1,   3,     "/www", NULL, "TXT", NULL),
                    (2,   3,     "/doc", NULL, "TXT", NULL),
-                   (3,   2,     "/ndnsim", NULL, "NS", NULL),
-                   (4,   1,     "/net",  NULL,   "NS", NULL),
-                   (5,   4,     "/net",  NULL,   "NS", NULL),
                    (6,   3,     "/git/www", NULL, "TXT", NULL),
-                   (7,   3,     "/git/doc", NULL, "NS", NULL),
-                   (8,   5,     "/www", NULL, "TXT", NULL),
                    (9,   3,     "/repo/www", NULL, "TXT", NULL),
-                   (10,  3,     "/norrdata", NULL, "TXT", NULL)
+                   (8,   5,     "/www", NULL, "TXT", NULL),
+                   (10,  3,     "/norrdata", NULL, "TXT", NULL),
+           
+                   /* FH of physical hosts, which is not named by hierarchical */
+                   (25,  3,     "/net/ndnsim/www/h1",   NULL, "FH", NULL),
+                   (26,  3,     "/net/ndnsim/h1",   NULL, "FH", NULL),
+                   (27,  3,     "/net/ndnsim/h2",   NULL, "FH", NULL),
+                   (28,  5,     "/net/ndnsim/git/doc/h1", NULL, "FH", NULL),
+                   
+                   /* NDNCERT of domain */
+                   (11,  3,     "/www/dsk-1", NULL, "NDNCERT", NULL),
+                   (12,  3,     "/www/ksk-1", NULL, "NDNCERT", NULL),
+                   (13,  3,     "/dsk-1",     NULL, "NDNCERT", NULL),
+                   (14,  2,     "/ndnsim/ksk-1", NULL, "NDNCERT", NULL),
+                   (15,  2,     "/dsk-1", NULL, "NDNCERT", NULL),
+                   (16,  1,     "/net/ksk-1", NULL, "NDNCERT", NULL),
+                   (17,  1,     "/root",     NULL, "NDNCERT", NULL),
+                   
+                   /* Mobility Support for Skype (NDN rtc in the future) */
+                   (100,  1,    "/com",         NULL, "NS", NULL),
+                   (101,  6,    "/skype",   NULL, "NS", NULL),
+                   (102,  1,    "/com/ns1",     NULL, "FH", NULL),
+                   (103,  6,    "/com/skype/ns1", NULL, "FH", NULL),
+                   
+                   (105,  7,    "/shock",  NULL, "FH",   NULL),
+                   (106,  7,    "/alex",   NULL,  "FH",  NULL),
+                   (107,  7,    "/lixia",   NULL,  "FH",  NULL),
+                   (108,  7,    "/yiding",   NULL,  "FH",  NULL)
                    ;
                    
                    
 insert into rrs (id, rrset_id, ttl, rrdata) values
-                (1, 1, 3600, "/ucla"),
-                (2, 1, 8000, "/att"),
-                (3, 2, 3600, "/ucla"),
-                (4, 3, 4000, "/net/ndnsim2"),
-                (5, 4, 5000, "/net"),
-                (6, 5, 6000, "/net"),
-                (7, 3, 4000, "/net/ndnsim"),
-                (8, 6, 3000, "/net/ndnsim/git/www"),
-                (9, 7, 3000, "/net/ndnsim/git/doc"),
-                (10,8, 3000, "/net/ndnsim/git/doc/www"),
-                (11,9, 3000, "/net/ndnsim/repo/www")
+                /* NS */
+                (31, 4,  3600, "/net/ns1"),
+                (32, 3,  3600, "/net/ndnsim/ns1"),
+                (33, 7,  3600, "/net/ndnsim/git/doc/ns1"),
+                
+                /* FH of NS (name server) */
+                (20,  21, 3600, "/sprint"),
+                (21,  18, 3600, "/ucla"),
+                (22,  19, 3600, "/ucla"), 
+                
+                /* TXT of service/app */
+                (1, 1, 3600, "/net/ndnsim/www/h1"),
+                (2, 1, 8000, "/net/ndnsim/h1"),
+                (3, 2, 3600, "/net/ndnsim/www/h1"),
+                (8, 6, 3000, "/net/ndnsim/h1"),
+                (11,9, 3000, "/net/ndnsim/h2"),
+                (10,8, 3000, "/net/ndnsim/git/doc/h1"),
+                
+                /* rrdata of FH of physical hosts, rrdata is FH */
+                (25,  25,   3000, "/ucla"),
+                (26,  26,   3000, "/ucla"),
+                (27,  27,   3000, "/ucla"),
+                (28,  28,   3000, "/ucla"),
+                
+                 /* NDNCERT*/
+                (12,11,3000, "/net/ndnsim/DNS/www/dsk-1:010010101101010101"),
+                (13,12,3000, "/net/ndnsim/DNS/www/ksk-1:0101111010001111110"),
+                (14,13,3000, "/net/ndnsim/DNS/dsk-1:1010110101"),
+                (15,14,3000, "/net/DNS/ndnsim/ksk-1:0101010101010111100011010"),
+                (16,15,3000, "/net/DNS/dsk-1:01111010101036654646"),
+                (17,16,3000, "/DNS/net/ksk-1:43a13f1a3d13a"),
+                (18,17,3000, "/KEY/ROOT:44631346541aaaf"),
+                
+                /* Mobility Support for Skype */
+                (100, 100,  3000, "/com/ns1"), 
+                (101, 101,  3000, "/com/skype/ns1"),
+                (102, 102,  3000, "/bt"),
+                (103, 103,  3000, "/verizon"),
+                
+                (104, 105,  3000, "/ucla"),
+                (105, 105,  3000, "/att"),
+                (106, 106,  3000, "/ucla"),
+                (107, 107,  3000, "/ucla"),
+                (108, 108,  3000, "/ucla")
                 ;
diff --git a/src/db/ndns-local.db b/src/db/ndns-local.db
index a9177ca..b844390 100644
--- a/src/db/ndns-local.db
+++ b/src/db/ndns-local.db
Binary files differ
diff --git a/src/db/rr-mgr.cpp b/src/db/rr-mgr.cpp
index 51e0e3b..0d4588d 100644
--- a/src/db/rr-mgr.cpp
+++ b/src/db/rr-mgr.cpp
@@ -8,7 +8,7 @@
 #include "rr-mgr.hpp"
 
 namespace ndn {
-namespace ndns{
+namespace ndns {
 RRMgr::RRMgr(Zone& zone, Query& query, Response& response)
   : m_count(0U)
   , m_zone(zone)
@@ -18,18 +18,15 @@
 
 }
 
-
-RRMgr::~RRMgr() {
+RRMgr::~RRMgr()
+{
   // TODO Auto-generated destructor stub
 }
 
-
-
-int
-RRMgr::count()
+int RRMgr::count()
 {
   std::string sql;
-  sql =  "SELECT count(*) FROM rrs INNER JOIN rrsets ON rrs.rrset_id=rrsets.id";
+  sql = "SELECT count(*) FROM rrs INNER JOIN rrsets ON rrs.rrset_id=rrsets.id";
   sql += " WHERE rrsets.zone_id=";
   sql += std::to_string(m_zone.getId());
   sql += " AND ";
@@ -37,24 +34,23 @@
   sql += RR::toString(m_query.getRrType());
   sql += "\' AND ";
   sql += "rrsets.label LIKE\'";
-  sql += m_query.getRrLabel().toUri()+"/%\'";
+  sql += m_query.getRrLabel().toUri() + "/%\'";
 
-  std::cout<<"sql="<<sql<<std::endl;
+  std::cout << "sql=" << sql << std::endl;
   this->execute(sql, static_callback_countRr, this);
 
-  if (this->getStatus() == DBMgr::DBError)
-  {
+  if (this->getStatus() == DBMgr::DBError) {
     return -1;
   }
 
   return this->m_count;
 }
-int
-RRMgr::callback_countRr(int argc, char **argv, char **azColName)
+int RRMgr::callback_countRr(int argc, char **argv, char **azColName)
 {
   this->addResultNum();
 
-  std::cout<<this->getResultNum()<<"th result: "<<"count="<<argv[0]<<std::endl;
+  std::cout << this->getResultNum() << "th result: " << "count=" << argv[0]
+      << std::endl;
   m_count = std::atoi(argv[0]);
   return 0;
 }
@@ -63,7 +59,8 @@
 {
   std::string sql;
 
-  sql =  "SELECT rrs.ttl, rrs.rrdata, rrs.id FROM rrs INNER JOIN rrsets ON rrs.rrset_id=rrsets.id";
+  sql =
+      "SELECT rrs.ttl, rrs.rrdata, rrs.id FROM rrs INNER JOIN rrsets ON rrs.rrset_id=rrsets.id";
   sql += " WHERE rrsets.zone_id=";
   sql += std::to_string(m_zone.getId());
   sql += " AND ";
@@ -71,14 +68,13 @@
   sql += RR::toString(m_query.getRrType());
   sql += "\' AND ";
   sql += "rrsets.label=\'";
-  sql += m_query.getRrLabel().toUri()+"\'";
+  sql += m_query.getRrLabel().toUri() + "\'";
   sql += " ORDER BY rrs.id";
 
-  std::cout<<"sql="<<sql<<std::endl;
+  std::cout << "sql=" << sql << std::endl;
   this->execute(sql, static_callback_getRr, this);
 
-  if (this->getStatus() == DBMgr::DBError)
-  {
+  if (this->getStatus() == DBMgr::DBError) {
     return -1;
   }
 
@@ -89,16 +85,16 @@
 int RRMgr::callback_getRr(int argc, char **argv, char **azColName)
 {
   this->addResultNum();
-  if (argc < 1)
-  {
-    this->setErr("No RRType="+RR::toString(m_query.getRrType())+
-        " and label="+m_query.getRrLabel().toUri()+
-        " and zone="+m_zone.getAuthorizedName().toUri());
+  if (argc < 1) {
+    this->setErr(
+        "No RRType=" + RR::toString(m_query.getRrType()) + " and label="
+            + m_query.getRrLabel().toUri() + " and zone="
+            + m_zone.getAuthorizedName().toUri());
     return 0;
   }
 
-  std::cout<<this->getResultNum()<<"th result: "<<"id="<<argv[2]
-           <<" ttl="<<argv[0]<<" rrdata="<<argv[1]<<std::endl;
+  std::cout << this->getResultNum() << "th result: " << "id=" << argv[2]
+      << " ttl=" << argv[0] << " rrdata=" << argv[1] << std::endl;
 
   m_response.setFreshness(time::milliseconds(std::atoi(argv[0])));
 
@@ -108,5 +104,5 @@
   return 0;
 }
 
-}//namespace ndnsn
+}  //namespace ndnsn
 } /* namespace ndn */
diff --git a/src/db/rr-mgr.hpp b/src/db/rr-mgr.hpp
index e940d10..b1f33d0 100644
--- a/src/db/rr-mgr.hpp
+++ b/src/db/rr-mgr.hpp
@@ -25,12 +25,12 @@
 #include "response.hpp"
 #include "zone.hpp"
 
-
 namespace ndn {
-namespace ndns{
-class RRMgr : public DBMgr {
+namespace ndns {
+class RRMgr: public DBMgr
+{
 public:
-  RRMgr( Zone& zone, Query& query, Response& response);
+  RRMgr(Zone& zone, Query& query, Response& response);
   virtual ~RRMgr();
 
 public:
@@ -38,44 +38,50 @@
 
   int callback_getRr(int argc, char **argv, char **azColName);
 
-  static int
-  static_callback_getRr(void *param, int argc, char **argv, char **azColName)
+  static int static_callback_getRr(void *param, int argc, char **argv,
+      char **azColName)
   {
     RRMgr *mgr = reinterpret_cast<RRMgr*>(param);
     return mgr->callback_getRr(argc, argv, azColName);
-   }
+  }
 
   int count();
   int callback_countRr(int argc, char **argv, char **azColName);
 
-  static int
-  static_callback_countRr(void *param, int argc, char **argv, char **azColName)
+  static int static_callback_countRr(void *param, int argc, char **argv,
+      char **azColName)
   {
     RRMgr *mgr = reinterpret_cast<RRMgr*>(param);
     return mgr->callback_countRr(argc, argv, azColName);
-   }
+  }
 
-  const Query& getQuery() const {
+  const Query& getQuery() const
+  {
     return m_query;
   }
 
-  void setQuery(const Query& query) {
+  void setQuery(const Query& query)
+  {
     m_query = query;
   }
 
-  const Response& getResponse() const {
+  const Response& getResponse() const
+  {
     return m_response;
   }
 
-  void setResponse(const Response& response) {
+  void setResponse(const Response& response)
+  {
     m_response = response;
   }
 
-  const Zone& getZone() const {
+  const Zone& getZone() const
+  {
     return m_zone;
   }
 
-  void setZone(const Zone& zone) {
+  void setZone(const Zone& zone)
+  {
     m_zone = zone;
   }
 
@@ -86,8 +92,6 @@
   Response& m_response;
 };
 
-
-
 } //namespace ndns
 } /* namespace ndn */
 
diff --git a/src/db/zone-mgr.cpp b/src/db/zone-mgr.cpp
index cc0b613..4efc285 100644
--- a/src/db/zone-mgr.cpp
+++ b/src/db/zone-mgr.cpp
@@ -19,59 +19,50 @@
 
 #include "zone-mgr.hpp"
 
-
 namespace ndn {
 namespace ndns {
 
-ZoneMgr::ZoneMgr( Zone& zone)
-: m_zone(zone)
+ZoneMgr::ZoneMgr(Zone& zone)
+  : m_zone(zone)
 {
   this->lookupId();
 }
 
-void
-ZoneMgr::lookupId(const Name& name)
+void ZoneMgr::lookupId(const Name& name)
 {
   this->open();
-  std::string sql = "SELECT id FROM zones WHERE name=\'"+name.toUri()+"\'";
+  std::string sql = "SELECT id FROM zones WHERE name=\'" + name.toUri() + "\'";
   //sql = "SELECT * FROM ZONES";
-  std::cout<<"sql="<<sql<<std::endl;
+  std::cout << "sql=" << sql << std::endl;
   //std::cout<<"*this="<<this<<" m_zone.id="<<m_zone.getId()<<" zoneId="<<&m_zone<<std::endl;
   this->execute(sql, static_callback_setId, this);
   //std::cout<<"*this="<<this<<" m_zone.id="<<m_zone.getId()<<" zoneId="<<&m_zone<<std::endl;
   this->close();
 
 }
-int
-ZoneMgr::callback_setId(int argc, char **argv, char **azColName)
+int ZoneMgr::callback_setId(int argc, char **argv, char **azColName)
 {
   //Zone zone = this->getZone();
   this->addResultNum();
 
   Zone zone = this->m_zone;
 
-  if (argc < 1)
-  {
-    this->setErr("No Zone with Name "+zone.getAuthorizedName().toUri());
+  if (argc < 1) {
+    this->setErr("No Zone with Name " + zone.getAuthorizedName().toUri());
     return -1;
   }
   //std::cout<<"id="<<(uint32_t)std::atoi(argv[0])<<" "<<std::endl;
   int t1 = std::atoi(argv[0]);
 
-
   m_zone.setId(t1);
 
   return 0;
 }
-void
-ZoneMgr::lookupId()
+void ZoneMgr::lookupId()
 {
   lookupId(this->m_zone.getAuthorizedName());
 }
 
-
-}//namepsace ndns
-}//namespace ndn
-
-
+} //namepsace ndns
+} //namespace ndn
 
diff --git a/src/db/zone-mgr.hpp b/src/db/zone-mgr.hpp
index 8ced971..faf8f27 100644
--- a/src/db/zone-mgr.hpp
+++ b/src/db/zone-mgr.hpp
@@ -29,11 +29,11 @@
 namespace ndn {
 namespace ndns {
 
-class ZoneMgr : public DBMgr
+class ZoneMgr: public DBMgr
 {
 
 public:
-  ZoneMgr( Zone& zone);
+  ZoneMgr(Zone& zone);
 
 public:
   void
@@ -42,31 +42,32 @@
   void
   lookupId();
 
-   const Zone& getZone() const {
+  const Zone& getZone() const
+  {
     return m_zone;
   }
 
-  void setZone(const Zone& zone) {
+  void setZone(const Zone& zone)
+  {
     this->m_zone = zone;
   }
 
   int
   callback_setId(int argc, char **argv, char **azColName);
 
+  static int static_callback_setId(void *param, int argc, char **argv,
+      char **azColName)
+  {
 
-  static int
-  static_callback_setId(void *param, int argc, char **argv, char **azColName){
-
-     ZoneMgr *mgr = reinterpret_cast<ZoneMgr*>(param);
-     return mgr->callback_setId(argc, argv, azColName);
-   }
+    ZoneMgr *mgr = reinterpret_cast<ZoneMgr*>(param);
+    return mgr->callback_setId(argc, argv, azColName);
+  }
 
 private:
   Zone& m_zone;
-};//class ZoneMgr
-
-
+};
+//class ZoneMgr
 
 }//namespace ndns
-}//namespace ndn
+} //namespace ndn
 #endif
