diff --git a/src/communication/sync-logic-handler.cpp b/src/communication/sync-logic-handler.cpp
index 0e40809..09d5c27 100644
--- a/src/communication/sync-logic-handler.cpp
+++ b/src/communication/sync-logic-handler.cpp
@@ -156,22 +156,19 @@
   // of the object
   std::shared_ptr<ndn::Face> facePtr(&m_syncFace, NullDeleter<ndn::Face>());
 
-  m_syncSocket = std::make_shared<Sync::SyncSocket>(m_syncPrefix, m_validator, facePtr,
-                                                    std::bind(&SyncLogicHandler::onNsyncUpdate,
-                                                              this, _1, _2),
-                                                    std::bind(&SyncLogicHandler::onNsyncRemoval,
-                                                              this, _1));
+  m_syncSocket = std::make_shared<chronosync::Socket>(m_syncPrefix, m_updatePrefix, *facePtr,
+                                                      bind(&SyncLogicHandler::onNsyncUpdate, this, _1));
 }
 
 void
-SyncLogicHandler::onNsyncUpdate(const vector<Sync::MissingDataInfo>& v, Sync::SyncSocket* socket)
+SyncLogicHandler::onNsyncUpdate(const vector<chronosync::MissingDataInfo>& v)
 {
   _LOG_DEBUG("Received Nsync update event");
 
   for (size_t i = 0; i < v.size(); i++){
-    _LOG_DEBUG("Update Name: " << v[i].prefix << " Seq no: " << v[i].high.getSeq());
+    _LOG_DEBUG("Update Name: " << v[i].session.getPrefix(-1).toUri() << " Seq no: " << v[i].high);
 
-    SyncUpdate update(v[i].prefix, v[i].high.getSeq());
+    SyncUpdate update(v[i].session.getPrefix(-1), v[i].high);
 
     processUpdateFromSync(update);
   }
@@ -299,7 +296,8 @@
   ndn::Name updateName(updatePrefix);
   string data("NoData");
 
-  m_syncSocket->publishData(updateName.toUri(), 0, data.c_str(), data.size(), 1000, seqNo);
+  m_syncSocket->publishData(reinterpret_cast<const uint8_t*>(data.c_str()), data.size(),
+                            ndn::time::milliseconds(1000), seqNo, updateName);
 }
 
 } // namespace nlsr
diff --git a/src/communication/sync-logic-handler.hpp b/src/communication/sync-logic-handler.hpp
index 5e0e6a8..c8e143e 100644
--- a/src/communication/sync-logic-handler.hpp
+++ b/src/communication/sync-logic-handler.hpp
@@ -24,7 +24,7 @@
 
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/security/validator-null.hpp>
-#include <nsync/sync-socket.h>
+#include <ChronoSync/socket.hpp>
 
 #include <iostream>
 #include <unistd.h>
@@ -60,10 +60,9 @@
   /*! \brief Simple wrapper function to handle updates from Sync.
 
     \param v The information that Sync has acquired.
-    \param socket The socket that Sync is using to synchronize updates.
    */
   void
-  onNsyncUpdate(const std::vector<Sync::MissingDataInfo>& v, Sync::SyncSocket* socket);
+  onNsyncUpdate(const std::vector<chronosync::MissingDataInfo>& v);
 
   void
   onNsyncRemoval(const std::string& prefix);
@@ -93,7 +92,7 @@
 private:
   std::shared_ptr<ndn::ValidatorNull> m_validator;
   ndn::Face& m_syncFace;
-  std::shared_ptr<Sync::SyncSocket> m_syncSocket;
+  std::shared_ptr<chronosync::Socket> m_syncSocket;
   ndn::Name m_syncPrefix;
 
 private:
