diff --git a/src/communication/sync-logic-handler.cpp b/src/communication/sync-logic-handler.cpp
index 705a721..1434aa4 100644
--- a/src/communication/sync-logic-handler.cpp
+++ b/src/communication/sync-logic-handler.cpp
@@ -138,8 +138,18 @@
 }
 
 void
-SyncLogicHandler::createSyncSocket()
+SyncLogicHandler::createSyncSocket(const ndn::Name& syncPrefix)
 {
+  if (m_syncSocket != nullptr) {
+    _LOG_WARN("Trying to create Sync socket, but Sync socket already exists");
+    return;
+  }
+
+  m_syncPrefix = syncPrefix;
+
+  // Build LSA sync update prefix
+  buildUpdatePrefix();
+
   _LOG_DEBUG("Creating Sync socket. Sync Prefix: " << m_syncPrefix);
 
   // The face's lifetime is managed in main.cpp; SyncSocket should not manage the memory
@@ -254,6 +264,12 @@
 void
 SyncLogicHandler::publishRoutingUpdate()
 {
+  if (m_syncSocket == nullptr) {
+    _LOG_FATAL("Cannot publish routing update; SyncSocket does not exist");
+
+    throw SyncLogicHandler::Error("Cannot publish routing update; SyncSocket does not exist");
+  }
+
   m_sequencingManager.writeSeqNoToFile();
 
   publishSyncUpdate(m_updatePrefix, m_sequencingManager.getCombinedSeqNo());
diff --git a/src/communication/sync-logic-handler.hpp b/src/communication/sync-logic-handler.hpp
index 36caae7..7df3671 100644
--- a/src/communication/sync-logic-handler.hpp
+++ b/src/communication/sync-logic-handler.hpp
@@ -44,10 +44,17 @@
 class SyncLogicHandler
 {
 public:
-  SyncLogicHandler(ndn::Face& face, Lsdb& lsdb, ConfParameter& conf, SequencingManager& seqManager);
+  class Error : public std::runtime_error
+  {
+  public:
+    explicit
+    Error(const std::string& what)
+      : std::runtime_error(what)
+    {
+    }
+  };
 
-  void
-  createSyncSocket();
+  SyncLogicHandler(ndn::Face& face, Lsdb& lsdb, ConfParameter& conf, SequencingManager& seqManager);
 
   void
   onNsyncUpdate(const std::vector<Sync::MissingDataInfo>& v, Sync::SyncSocket* socket);
@@ -59,15 +66,12 @@
   publishRoutingUpdate();
 
   void
-  setSyncPrefix(const std::string& sp)
-  {
-    m_syncPrefix = sp;
-  }
+  createSyncSocket(const ndn::Name& syncPrefix);
 
+private:
   void
   buildUpdatePrefix();
 
-private:
   void
   processUpdateFromSync(const SyncUpdate& updateName);
 
diff --git a/src/lsdb.cpp b/src/lsdb.cpp
index 1374906..c0fb765 100644
--- a/src/lsdb.cpp
+++ b/src/lsdb.cpp
@@ -597,17 +597,9 @@
 
   m_nlsr.getSequencingManager().increaseAdjLsaSeq();
 
-  bool isInstalled = installAdjLsa(adjLsa);
-
-  // Delay Sync prefix registration until the first Adjacency LSA is built
-  if (isInstalled && !m_hasSyncPrefixBeenRegistered) {
-    m_nlsr.getSyncLogicHandler().createSyncSocket();
-    m_hasSyncPrefixBeenRegistered = true;
-  }
-
   m_sync.publishRoutingUpdate();
 
-  return isInstalled;
+  return installAdjLsa(adjLsa);
 }
 
 bool
diff --git a/src/lsdb.hpp b/src/lsdb.hpp
index 3cf74c6..417c978 100644
--- a/src/lsdb.hpp
+++ b/src/lsdb.hpp
@@ -45,7 +45,6 @@
     : m_nlsr(nlsr)
     , m_scheduler(scheduler)
     , m_sync(sync)
-    , m_hasSyncPrefixBeenRegistered(false)
     , m_lsaRefreshTime(0)
     , m_adjLsaBuildInterval(static_cast<uint32_t>(ADJ_LSA_BUILD_INTERVAL_DEFAULT))
   {
@@ -278,8 +277,6 @@
   std::list<AdjLsa> m_adjLsdb;
   std::list<CoordinateLsa> m_corLsdb;
 
-  bool m_hasSyncPrefixBeenRegistered;
-
   seconds m_lsaRefreshTime;
   std::string m_thisRouterPrefix;
 
diff --git a/src/nlsr.cpp b/src/nlsr.cpp
index 2d58b19..1176b69 100644
--- a/src/nlsr.cpp
+++ b/src/nlsr.cpp
@@ -134,8 +134,7 @@
   m_sequencingManager.setSeqFileName(m_confParam.getSeqFileDir());
   m_sequencingManager.initiateSeqNoFromFile();
 
-  m_syncLogicHandler.setSyncPrefix(m_confParam.getChronosyncPrefix().toUri());
-  m_syncLogicHandler.buildUpdatePrefix();
+  m_syncLogicHandler.createSyncSocket(m_confParam.getChronosyncPrefix());
 
   /* Logging start */
   m_confParam.writeLog();
diff --git a/tests/test-lsdb.cpp b/tests/test-lsdb.cpp
index 1585a4d..2991967 100644
--- a/tests/test-lsdb.cpp
+++ b/tests/test-lsdb.cpp
@@ -185,31 +185,6 @@
   BOOST_CHECK_EQUAL(lsdb1.doesLsaExist(ndn::Name("/router1/1"), NameLsa::TYPE_STRING), false);
 }
 
-BOOST_AUTO_TEST_CASE(RegisterSyncPrefixOnFirstAdjLsaBuild)
-{
-  // Should register Sync prefix
-  lsdb.buildAndInstallOwnAdjLsa();
-  face->processEvents(ndn::time::milliseconds(1));
-
-  std::vector<ndn::Interest>& interests = face->m_sentInterests;
-
-  BOOST_REQUIRE(interests.size() > 0);
-
-  ndn::nfd::ControlParameters extractedParameters;
-  ndn::Name::Component verb;
-  extractParameters(interests[0], verb, extractedParameters);
-
-  BOOST_CHECK_EQUAL(verb, REGISTER_VERB);
-  BOOST_CHECK_EQUAL(extractedParameters.getName(), conf.getChronosyncPrefix());
-
-  // Should not register Sync prefix
-  face->m_sentInterests.clear();
-  lsdb.buildAndInstallOwnAdjLsa();
-  face->processEvents(ndn::time::milliseconds(1));
-
-  BOOST_CHECK_EQUAL(interests.size(), 0);
-}
-
 BOOST_AUTO_TEST_CASE(InstallNameLsa)
 {
   // Install lsa with name1 and name2
diff --git a/tests/test-sync-logic-handler.cpp b/tests/test-sync-logic-handler.cpp
index 2057ed3..2595e41 100644
--- a/tests/test-sync-logic-handler.cpp
+++ b/tests/test-sync-logic-handler.cpp
@@ -177,6 +177,19 @@
   BOOST_CHECK_EQUAL(sync.m_updatePrefix, expectedPrefix);
 }
 
+BOOST_AUTO_TEST_CASE(CreateSyncSocketOnInitialization) // Bug #2649
+{
+  nlsr.initialize();
+
+  // Make sure an adjacency LSA has not been built yet
+  ndn::Name key = ndn::Name(nlsr.getConfParameter().getRouterPrefix()).append(AdjLsa::TYPE_STRING);
+  AdjLsa* lsa = nlsr.getLsdb().findAdjLsa(key);
+  BOOST_REQUIRE(lsa == nullptr);
+
+  // Publish a routing update before an Adjacency LSA is built
+  BOOST_CHECK_NO_THROW(sync.publishRoutingUpdate());
+}
+
 BOOST_AUTO_TEST_SUITE_END()
 
 } // namespace test
