diff --git a/src/sync-log.cc b/src/sync-log.cc
index 5881bd9..23df286 100644
--- a/src/sync-log.cc
+++ b/src/sync-log.cc
@@ -30,7 +30,7 @@
 
 using namespace boost;
 using namespace std;
-using namespace Ccnx;
+using namespace Ndnx;
 
 // static  void xTrace (void*, const char* q)
 // {
@@ -97,7 +97,7 @@
 ";
 
 
-SyncLog::SyncLog (const boost::filesystem::path &path, const Ccnx::Name &localName)
+SyncLog::SyncLog (const boost::filesystem::path &path, const Ndnx::Name &localName)
   : DbHelper (path / ".chronoshare", "sync-log.db")
   , m_localName (localName)
 {
@@ -109,7 +109,7 @@
   sqlite3_stmt *stmt;
   int res = sqlite3_prepare_v2 (m_db, "SELECT device_id, seq_no FROM SyncNodes WHERE device_name=?", -1, &stmt, 0);
 
-  Ccnx::CcnxCharbufPtr name = m_localName;
+  Ndnx::NdnxCharbufPtr name = m_localName;
   sqlite3_bind_blob (stmt, 1, name->buf (), name->length (), SQLITE_STATIC);
 
   if (sqlite3_step (stmt) == SQLITE_ROW)
@@ -267,14 +267,14 @@
 }
 
 void
-SyncLog::UpdateDeviceSeqNo (const Ccnx::Name &name, sqlite3_int64 seqNo)
+SyncLog::UpdateDeviceSeqNo (const Ndnx::Name &name, sqlite3_int64 seqNo)
 {
   sqlite3_stmt *stmt;
   // update is performed using trigger
   int res = sqlite3_prepare (m_db, "INSERT INTO SyncNodes (device_name, seq_no) VALUES (?,?);",
                              -1, &stmt, 0);
 
-  Ccnx::CcnxCharbufPtr nameBuf = name;
+  Ndnx::NdnxCharbufPtr nameBuf = name;
   res += sqlite3_bind_blob  (stmt, 1, nameBuf->buf (), nameBuf->length (), SQLITE_STATIC);
   res += sqlite3_bind_int64 (stmt, 2, seqNo);
   sqlite3_step (stmt);
@@ -321,7 +321,7 @@
 {
   sqlite3_stmt *stmt;
   sqlite3_prepare_v2 (m_db, "SELECT last_known_locator FROM SyncNodes WHERE device_name=?;", -1, &stmt, 0);
-  Ccnx::CcnxCharbufPtr nameBuf = deviceName;
+  Ndnx::NdnxCharbufPtr nameBuf = deviceName;
   sqlite3_bind_blob (stmt, 1, nameBuf->buf(), nameBuf->length(), SQLITE_STATIC);
   int res = sqlite3_step (stmt);
   Name locator;
@@ -341,7 +341,7 @@
   return locator;
 }
 
-Ccnx::Name
+Ndnx::Name
 SyncLog::LookupLocalLocator ()
 {
   return LookupLocator (m_localName);
@@ -352,8 +352,8 @@
 {
   sqlite3_stmt *stmt;
   sqlite3_prepare_v2 (m_db, "UPDATE SyncNodes SET last_known_locator=?,last_update=datetime('now') WHERE device_name=?;", -1, &stmt, 0);
-  Ccnx::CcnxCharbufPtr nameBuf = deviceName;
-  Ccnx::CcnxCharbufPtr locatorBuf = locator;
+  Ndnx::NdnxCharbufPtr nameBuf = deviceName;
+  Ndnx::NdnxCharbufPtr locatorBuf = locator;
   sqlite3_bind_blob (stmt, 1, locatorBuf->buf(), locatorBuf->length(), SQLITE_STATIC);
   sqlite3_bind_blob (stmt, 2, nameBuf->buf(), nameBuf->length(),       SQLITE_STATIC);
   int res = sqlite3_step (stmt);
@@ -367,7 +367,7 @@
 }
 
 void
-SyncLog::UpdateLocalLocator (const Ccnx::Name &forwardingHint)
+SyncLog::UpdateLocalLocator (const Ndnx::Name &forwardingHint)
 {
   return UpdateLocator (m_localName, forwardingHint);
 }
@@ -494,7 +494,7 @@
   sqlite3_stmt *stmt;
   sqlite3_int64 seq = -1;
   sqlite3_prepare_v2 (m_db, "SELECT seq_no FROM SyncNodes WHERE device_name=?;", -1, &stmt, 0);
-  Ccnx::CcnxCharbufPtr nameBuf = name;
+  Ndnx::NdnxCharbufPtr nameBuf = name;
   sqlite3_bind_blob (stmt, 1, nameBuf->buf (), nameBuf->length (), SQLITE_STATIC);
   if (sqlite3_step (stmt) == SQLITE_ROW)
   {
