diff --git a/src/communication/sync-logic-handler.cpp b/src/communication/sync-logic-handler.cpp
index 5e20795..5f87436 100644
--- a/src/communication/sync-logic-handler.cpp
+++ b/src/communication/sync-logic-handler.cpp
@@ -132,6 +132,20 @@
   }
 };
 
+SyncLogicHandler::SyncLogicHandler(ndn::Face& face,
+                                   Lsdb& lsdb, ConfParameter& conf,
+                                   SequencingManager& seqManager)
+  : m_validator(new ndn::ValidatorNull())
+  , m_syncFace(face)
+  , m_lsdb(lsdb)
+  , m_confParam(conf)
+  , m_sequencingManager(seqManager)
+{
+  m_updatePrefix = m_confParam.getLsaPrefix();
+  m_updatePrefix.append(m_confParam.getSiteName());
+  m_updatePrefix.append(m_confParam.getRouterName());
+}
+
 void
 SyncLogicHandler::createSyncSocket()
 {
@@ -247,10 +261,11 @@
 }
 
 void
-SyncLogicHandler::publishRoutingUpdate(SequencingManager& manager, const ndn::Name& updatePrefix)
+SyncLogicHandler::publishRoutingUpdate()
 {
-  manager.writeSeqNoToFile();
-  publishSyncUpdate(updatePrefix, manager.getCombinedSeqNo());
+  m_sequencingManager.writeSeqNoToFile();
+
+  publishSyncUpdate(m_updatePrefix, m_sequencingManager.getCombinedSeqNo());
 }
 
 void
diff --git a/src/communication/sync-logic-handler.hpp b/src/communication/sync-logic-handler.hpp
index 70fd07e..e602037 100644
--- a/src/communication/sync-logic-handler.hpp
+++ b/src/communication/sync-logic-handler.hpp
@@ -41,13 +41,7 @@
 class SyncLogicHandler
 {
 public:
-  SyncLogicHandler(ndn::Face& face, Lsdb& lsdb, ConfParameter& conf)
-    : m_validator(new ndn::ValidatorNull())
-    , m_syncFace(face)
-    , m_lsdb(lsdb)
-    , m_confParam(conf)
-  {
-  }
+  SyncLogicHandler(ndn::Face& face, Lsdb& lsdb, ConfParameter& conf, SequencingManager& seqManager);
 
   void
   createSyncSocket();
@@ -59,7 +53,7 @@
   onNsyncRemoval(const std::string& prefix);
 
   void
-  publishRoutingUpdate(SequencingManager& manager, const ndn::Name& updatePrefix);
+  publishRoutingUpdate();
 
   void
   setSyncPrefix(const std::string& sp)
@@ -89,6 +83,9 @@
 
   Lsdb& m_lsdb;
   ConfParameter& m_confParam;
+  const SequencingManager& m_sequencingManager;
+
+  ndn::Name m_updatePrefix;
 
   static const std::string NLSR_COMPONENT;
   static const std::string LSA_COMPONENT;
diff --git a/src/lsdb.cpp b/src/lsdb.cpp
index 212ae42..ce7c706 100644
--- a/src/lsdb.cpp
+++ b/src/lsdb.cpp
@@ -579,11 +579,7 @@
     m_hasSyncPrefixBeenRegistered = true;
   }
 
-  ndn::Name lsaPrefix = m_nlsr.getConfParameter().getLsaPrefix();
-  lsaPrefix.append(m_nlsr.getConfParameter().getSiteName());
-  lsaPrefix.append(m_nlsr.getConfParameter().getRouterName());
-
-  m_nlsr.getSyncLogicHandler().publishRoutingUpdate(m_nlsr.getSequencingManager(), lsaPrefix);
+  m_sync.publishRoutingUpdate();
 
   return isInstalled;
 }
@@ -656,14 +652,7 @@
         chkNameLsa->setExpiringEventId(scheduleNameLsaExpiration(chkNameLsa->getKey(),
                                                                  chkNameLsa->getLsSeqNo(),
                                                                  m_lsaRefreshTime));
-        // publish routing update
-        //ndn::Name lsaPrefix = m_nlsr.getConfParameter().getLsaPrefix();
-        //lsaPrefix.append(m_nlsr.getConfParameter().getRouterPrefix());
-        ndn::Name lsaPrefix = m_nlsr.getConfParameter().getLsaPrefix();
-        lsaPrefix.append(m_nlsr.getConfParameter().getSiteName());
-        lsaPrefix.append(m_nlsr.getConfParameter().getRouterName());
-        m_nlsr.getSyncLogicHandler().publishRoutingUpdate(m_nlsr.getSequencingManager(),
-                                                          lsaPrefix);
+        m_sync.publishRoutingUpdate();
       }
       else {
         _LOG_DEBUG("Other's Name LSA, so removing form LSDB");
@@ -695,14 +684,7 @@
         chkAdjLsa->setExpiringEventId(scheduleAdjLsaExpiration(chkAdjLsa->getKey(),
                                                                chkAdjLsa->getLsSeqNo(),
                                                                m_lsaRefreshTime));
-        // publish routing update
-        //ndn::Name lsaPrefix = m_nlsr.getConfParameter().getLsaPrefix();
-        //lsaPrefix.append(m_nlsr.getConfParameter().getRouterPrefix());
-        ndn::Name lsaPrefix = m_nlsr.getConfParameter().getLsaPrefix();
-        lsaPrefix.append(m_nlsr.getConfParameter().getSiteName());
-        lsaPrefix.append(m_nlsr.getConfParameter().getRouterName());
-        m_nlsr.getSyncLogicHandler().publishRoutingUpdate(m_nlsr.getSequencingManager(),
-                                                          lsaPrefix);
+        m_sync.publishRoutingUpdate();
       }
       else {
         _LOG_DEBUG("Other's Adj LSA, so removing form LSDB");
@@ -738,14 +720,7 @@
                                         chkCorLsa->getKey(),
                                         chkCorLsa->getLsSeqNo(),
                                         m_lsaRefreshTime));
-        // publish routing update
-        //ndn::Name lsaPrefix = m_nlsr.getConfParameter().getLsaPrefix();
-        //lsaPrefix.append(m_nlsr.getConfParameter().getRouterPrefix());
-        ndn::Name lsaPrefix = m_nlsr.getConfParameter().getLsaPrefix();
-        lsaPrefix.append(m_nlsr.getConfParameter().getSiteName());
-        lsaPrefix.append(m_nlsr.getConfParameter().getRouterName());
-        m_nlsr.getSyncLogicHandler().publishRoutingUpdate(m_nlsr.getSequencingManager(),
-                                                          lsaPrefix);
+        m_sync.publishRoutingUpdate();
       }
       else {
         _LOG_DEBUG("Other's Cor LSA, so removing form LSDB");
diff --git a/src/lsdb.hpp b/src/lsdb.hpp
index 5d66f01..efef94c 100644
--- a/src/lsdb.hpp
+++ b/src/lsdb.hpp
@@ -37,13 +37,15 @@
 using namespace ndn::time;
 
 class Nlsr;
+class SyncLogicHandler;
 
 class Lsdb
 {
 public:
-  Lsdb(Nlsr& nlsr, ndn::Scheduler& scheduler)
+  Lsdb(Nlsr& nlsr, ndn::Scheduler& scheduler, SyncLogicHandler& sync)
     : m_nlsr(nlsr)
     , m_scheduler(scheduler)
+    , m_sync(sync)
     , m_hasSyncPrefixBeenRegistered(false)
     , m_lsaRefreshTime(0)
   {
@@ -242,6 +244,7 @@
 private:
   Nlsr& m_nlsr;
   ndn::Scheduler& m_scheduler;
+  SyncLogicHandler& m_sync;
 
   std::list<NameLsa> m_nameLsdb;
   std::list<AdjLsa> m_adjLsdb;
diff --git a/src/nlsr.hpp b/src/nlsr.hpp
index 60728fd..e332808 100644
--- a/src/nlsr.hpp
+++ b/src/nlsr.hpp
@@ -75,7 +75,7 @@
     , m_sequencingManager()
     , m_isDaemonProcess(false)
     , m_configFileName("nlsr.conf")
-    , m_nlsrLsdb(*this, scheduler)
+    , m_nlsrLsdb(*this, scheduler, m_syncLogicHandler)
     , m_adjBuildCount(0)
     , m_isBuildAdjLsaSheduled(false)
     , m_isRouteCalculationScheduled(false)
@@ -83,7 +83,7 @@
     , m_routingTable(scheduler)
     , m_fib(m_nlsrFace, scheduler, m_adjacencyList, m_confParam, m_keyChain)
     , m_namePrefixTable(*this)
-    , m_syncLogicHandler(m_nlsrFace, m_nlsrLsdb, m_confParam)
+    , m_syncLogicHandler(m_nlsrFace, m_nlsrLsdb, m_confParam, m_sequencingManager)
     , m_helloProtocol(*this, scheduler)
     , m_certificateCache(new ndn::CertificateCacheTtl(ioService))
     , m_validator(m_nlsrFace, DEFAULT_BROADCAST_PREFIX, m_certificateCache)
diff --git a/src/sequencing-manager.cpp b/src/sequencing-manager.cpp
index 01a22fa..b988d9c 100644
--- a/src/sequencing-manager.cpp
+++ b/src/sequencing-manager.cpp
@@ -55,7 +55,7 @@
 }
 
 void
-SequencingManager::writeSeqNoToFile()
+SequencingManager::writeSeqNoToFile() const
 {
   std::ofstream outputFile(m_seqFileNameWithPath.c_str(), ios::binary);
   outputFile << m_combinedSeqNo;
diff --git a/src/sequencing-manager.hpp b/src/sequencing-manager.hpp
index c91cec4..209f0e5 100644
--- a/src/sequencing-manager.hpp
+++ b/src/sequencing-manager.hpp
@@ -122,7 +122,7 @@
   }
 
   void
-  writeSeqNoToFile();
+  writeSeqNoToFile() const;
 
   void
   initiateSeqNoFromFile();
