diff --git a/src/hello-protocol.cpp b/src/hello-protocol.cpp
index 764c7d3..cefaa29 100644
--- a/src/hello-protocol.cpp
+++ b/src/hello-protocol.cpp
@@ -74,9 +74,8 @@
 void
 HelloProtocol::scheduleInterest(uint32_t seconds)
 {
-  m_nlsr.getScheduler().scheduleEvent(ndn::time::seconds(seconds),
-                                      ndn::bind(&HelloProtocol::sendScheduledInterest,
-                                                this, seconds));
+  m_scheduler.scheduleEvent(ndn::time::seconds(seconds),
+                            ndn::bind(&HelloProtocol::sendScheduledInterest, this, seconds));
 }
 
 void
@@ -156,9 +155,8 @@
       _LOG_DEBUG("Scheduling scheduledAdjLsaBuild");
       m_nlsr.setIsBuildAdjLsaSheduled(true);
       // event here
-      m_nlsr.getScheduler().scheduleEvent(ndn::time::seconds(5),
-                                          ndn::bind(&Lsdb::scheduledAdjLsaBuild,
-                                                    &m_nlsr.getLsdb()));
+      m_scheduler.scheduleEvent(ndn::time::seconds(5),
+                                ndn::bind(&Lsdb::scheduledAdjLsaBuild, &m_nlsr.getLsdb()));
     }
   }
 }
@@ -202,9 +200,8 @@
         _LOG_DEBUG("Scheduling scheduledAdjLsaBuild");
         m_nlsr.setIsBuildAdjLsaSheduled(true);
         // event here
-        m_nlsr.getScheduler().scheduleEvent(ndn::time::seconds(5),
-                                            ndn::bind(&Lsdb::scheduledAdjLsaBuild,
-                                                      ndn::ref(m_nlsr.getLsdb())));
+        m_scheduler.scheduleEvent(ndn::time::seconds(5),
+                                  ndn::bind(&Lsdb::scheduledAdjLsaBuild, &m_nlsr.getLsdb()));
       }
     }
   }
@@ -288,9 +285,8 @@
         _LOG_DEBUG("Scheduling scheduledAdjLsaBuild");
         m_nlsr.setIsBuildAdjLsaSheduled(true);
         // event here
-        m_nlsr.getScheduler().scheduleEvent(ndn::time::seconds(5),
-                                            ndn::bind(&Lsdb::scheduledAdjLsaBuild,
-                                                      &m_nlsr.getLsdb()));
+        m_scheduler.scheduleEvent(ndn::time::seconds(5),
+                                  ndn::bind(&Lsdb::scheduledAdjLsaBuild, &m_nlsr.getLsdb()));
       }
     }
   }
diff --git a/src/hello-protocol.hpp b/src/hello-protocol.hpp
index fa2528c..30385d9 100644
--- a/src/hello-protocol.hpp
+++ b/src/hello-protocol.hpp
@@ -35,8 +35,9 @@
 {
 
 public:
-  HelloProtocol(Nlsr& nlsr)
+  HelloProtocol(Nlsr& nlsr, ndn::Scheduler& scheduler)
     : m_nlsr(nlsr)
+    , m_scheduler(scheduler)
   {
   }
 
@@ -80,6 +81,8 @@
                    double linkCost, const ndn::time::milliseconds& timeout);
 private:
   Nlsr& m_nlsr;
+  ndn::Scheduler& m_scheduler;
+
   static const std::string INFO_COMPONENT;
   static const std::string NLSR_COMPONENT;
 };
diff --git a/src/lsdb.cpp b/src/lsdb.cpp
index 74daed4..0490276 100644
--- a/src/lsdb.cpp
+++ b/src/lsdb.cpp
@@ -40,7 +40,7 @@
 void
 Lsdb::cancelScheduleLsaExpiringEvent(ndn::EventId eid)
 {
-  m_nlsr.getScheduler().cancelEvent(eid);
+  m_scheduler.cancelEvent(eid);
 }
 
 static bool
@@ -93,9 +93,8 @@
 Lsdb::scheduleNameLsaExpiration(const ndn::Name& key, int seqNo,
                                 const ndn::time::seconds& expTime)
 {
-  return m_nlsr.getScheduler().scheduleEvent(expTime + GRACE_PERIOD,
-                                             ndn::bind(&Lsdb::exprireOrRefreshNameLsa,
-                                                       this, key, seqNo));
+  return m_scheduler.scheduleEvent(expTime + GRACE_PERIOD,
+                                   ndn::bind(&Lsdb::exprireOrRefreshNameLsa, this, key, seqNo));
 }
 
 bool
@@ -299,9 +298,9 @@
 Lsdb::scheduleCoordinateLsaExpiration(const ndn::Name& key, int seqNo,
                                       const ndn::time::seconds& expTime)
 {
-  return m_nlsr.getScheduler().scheduleEvent(expTime + GRACE_PERIOD,
-                                             ndn::bind(&Lsdb::exprireOrRefreshCoordinateLsa,
-                                                       this, key, seqNo));
+  return m_scheduler.scheduleEvent(expTime + GRACE_PERIOD,
+                                   ndn::bind(&Lsdb::exprireOrRefreshCoordinateLsa,
+                                             this, key, seqNo));
 }
 
 bool
@@ -451,9 +450,8 @@
     m_nlsr.setIsBuildAdjLsaSheduled(true);
     int schedulingTime = m_nlsr.getConfParameter().getInterestRetryNumber() *
                          m_nlsr.getConfParameter().getInterestResendTime();
-    m_nlsr.getScheduler().scheduleEvent(ndn::time::seconds(schedulingTime),
-                                        ndn::bind(&Lsdb::scheduledAdjLsaBuild,
-                                                  this));
+    m_scheduler.scheduleEvent(ndn::time::seconds(schedulingTime),
+                              ndn::bind(&Lsdb::scheduledAdjLsaBuild, this));
   }
 }
 
@@ -505,9 +503,8 @@
 Lsdb::scheduleAdjLsaExpiration(const ndn::Name& key, int seqNo,
                                const ndn::time::seconds& expTime)
 {
-  return m_nlsr.getScheduler().scheduleEvent(expTime + GRACE_PERIOD,
-                                             ndn::bind(&Lsdb::exprireOrRefreshAdjLsa,
-                                                       this, key, seqNo));
+  return m_scheduler.scheduleEvent(expTime + GRACE_PERIOD,
+                                   ndn::bind(&Lsdb::exprireOrRefreshAdjLsa, this, key, seqNo));
 }
 
 bool
@@ -952,9 +949,8 @@
   // Stop retrying if delayed re-validation will be scheduled pass the deadline
   if (steady_clock::now() + m_nlsr.getConfParameter().getLsaInterestLifetime() < deadline) {
     _LOG_DEBUG("Scheduling revalidation");
-    m_nlsr.getScheduler().scheduleEvent(m_nlsr.getConfParameter().getLsaInterestLifetime(),
-                                        ndn::bind(&Lsdb::retryContentValidation,
-                                                  this, data, deadline));
+    m_scheduler.scheduleEvent(m_nlsr.getConfParameter().getLsaInterestLifetime(),
+                              ndn::bind(&Lsdb::retryContentValidation, this, data, deadline));
   }
 }
 
diff --git a/src/lsdb.hpp b/src/lsdb.hpp
index c5dcbed..8f1e779 100644
--- a/src/lsdb.hpp
+++ b/src/lsdb.hpp
@@ -39,8 +39,9 @@
 class Lsdb
 {
 public:
-  Lsdb(Nlsr& nlsr)
+  Lsdb(Nlsr& nlsr, ndn::Scheduler& scheduler)
     : m_nlsr(nlsr)
+    , m_scheduler(scheduler)
     , m_lsaRefreshTime(0)
   {
   }
@@ -232,6 +233,8 @@
   cancelScheduleLsaExpiringEvent(ndn::EventId eid);
 
   Nlsr& m_nlsr;
+  ndn::Scheduler& m_scheduler;
+
   std::list<NameLsa> m_nameLsdb;
   std::list<AdjLsa> m_adjLsdb;
   std::list<CoordinateLsa> m_corLsdb;
diff --git a/src/main.cpp b/src/main.cpp
index aafca1d..a06fcee 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -21,18 +21,26 @@
  * \author Yingdi Yu <yingdi@cs.ucla.edu>
  *
  **/
-#include <boost/cstdint.hpp>
-#include "nlsr.hpp"
 #include "conf-file-processor.hpp"
 #include "logger.hpp"
+#include "nlsr.hpp"
 #include "version.hpp"
 
+#include <boost/asio.hpp>
+#include <boost/cstdint.hpp>
+
+#include <ndn-cxx/util/scheduler.hpp>
+
 namespace nlsr {
 
 int
 main(int32_t argc, char** argv)
 {
-  Nlsr nlsr;
+  boost::asio::io_service ioService;
+  ndn::Scheduler scheduler(ioService);
+
+  Nlsr nlsr(ioService, scheduler);
+
   std::string programName(argv[0]);
   nlsr.setConfFileName("nlsr.conf");
   int32_t opt;
diff --git a/src/nlsr.hpp b/src/nlsr.hpp
index 6197588..e013930 100644
--- a/src/nlsr.hpp
+++ b/src/nlsr.hpp
@@ -64,28 +64,27 @@
   };
 
 public:
-  Nlsr()
-    : m_scheduler(m_nlsrFace.getIoService())
+  Nlsr(boost::asio::io_service& ioService, ndn::Scheduler& scheduler)
+    : m_nlsrFace(ioService)
+    , m_scheduler(scheduler)
     , m_confParam()
     , m_adjacencyList()
     , m_namePrefixList()
     , m_sequencingManager()
     , m_isDaemonProcess(false)
     , m_configFileName("nlsr.conf")
-    , m_nlsrLsdb(*this)
+    , m_nlsrLsdb(*this, scheduler)
     , m_adjBuildCount(0)
     , m_isBuildAdjLsaSheduled(false)
     , m_isRouteCalculationScheduled(false)
     , m_isRoutingTableCalculating(false)
-    , m_routingTable()
-    , m_fib(*this, m_nlsrFace)
+    , m_routingTable(scheduler)
+    , m_fib(*this, m_nlsrFace, scheduler)
     , m_namePrefixTable(*this)
-    , m_syncLogicHandler(m_nlsrFace.getIoService())
-    , m_helloProtocol(*this)
-
-    , m_certificateCache(new ndn::CertificateCacheTtl(m_nlsrFace.getIoService()))
+    , m_syncLogicHandler(ioService)
+    , m_helloProtocol(*this, scheduler)
+    , m_certificateCache(new ndn::CertificateCacheTtl(ioService))
     , m_validator(m_nlsrFace, DEFAULT_BROADCAST_PREFIX, m_certificateCache)
-
     , m_faceMonitor(m_nlsrFace)
   {
     m_faceMonitor.onNotification += ndn::bind(&Nlsr::onFaceEventNotification, this, _1);
@@ -152,12 +151,6 @@
     return m_namePrefixList;
   }
 
-  ndn::Scheduler&
-  getScheduler()
-  {
-    return m_scheduler;
-  }
-
   ndn::Face&
   getNlsrFace()
   {
@@ -343,7 +336,7 @@
   typedef std::map<ndn::Name, ndn::shared_ptr<ndn::IdentityCertificate> > CertMap;
 
   ndn::Face m_nlsrFace;
-  ndn::Scheduler m_scheduler;
+  ndn::Scheduler& m_scheduler;
   ConfParameter m_confParam;
   AdjacencyList m_adjacencyList;
   NamePrefixList m_namePrefixList;
diff --git a/src/route/fib.cpp b/src/route/fib.cpp
index 1e8b9ed..2010858 100644
--- a/src/route/fib.cpp
+++ b/src/route/fib.cpp
@@ -50,7 +50,7 @@
 void
 Fib::cancelScheduledExpiringEvent(EventId eid)
 {
-  m_nlsr.getScheduler().cancelEvent(eid);
+  m_scheduler.cancelEvent(eid);
 }
 
 
@@ -60,8 +60,8 @@
 {
   _LOG_DEBUG("Fib::scheduleEntryExpiration Called");
   _LOG_INFO("Name: " << name << " Seq Num: " << feSeqNum);
-  return m_nlsr.getScheduler().scheduleEvent(expTime,
-                                             ndn::bind(&Fib::remove, this, name));
+
+  return m_scheduler.scheduleEvent(expTime, ndn::bind(&Fib::remove, this, name));
 }
 
 void
@@ -206,7 +206,7 @@
     entry.setSeqNo(entry.getSeqNo() + 1);
 
     // Cancel previosuly scheduled event
-    m_nlsr.getScheduler().cancelEvent(entry.getExpiringEventId());
+    m_scheduler.cancelEvent(entry.getExpiringEventId());
 
     // Schedule entry to be refreshed
     entry.setExpiringEventId(scheduleEntryExpiration(name , entry.getSeqNo(),
diff --git a/src/route/fib.hpp b/src/route/fib.hpp
index 6b448fb..9893ff2 100644
--- a/src/route/fib.hpp
+++ b/src/route/fib.hpp
@@ -42,8 +42,9 @@
 class Fib
 {
 public:
-  Fib(Nlsr& nlsr, ndn::Face& face)
+  Fib(Nlsr& nlsr, ndn::Face& face, ndn::Scheduler& scheduler)
     : m_nlsr(nlsr)
+    , m_scheduler(scheduler)
     , m_table()
     , m_refreshTime(0)
     , m_controller(face)
@@ -178,6 +179,8 @@
 
 private:
   Nlsr& m_nlsr;
+  ndn::Scheduler& m_scheduler;
+
   std::list<FibEntry> m_table;
   int32_t m_refreshTime;
   ndn::nfd::Controller m_controller;
diff --git a/src/route/routing-table.cpp b/src/route/routing-table.cpp
index 7ab5b8e..e05db49 100644
--- a/src/route/routing-table.cpp
+++ b/src/route/routing-table.cpp
@@ -142,9 +142,9 @@
 RoutingTable::scheduleRoutingTableCalculation(Nlsr& pnlsr)
 {
   if (pnlsr.getIsRouteCalculationScheduled() != true) {
-    pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(15),
-                                       ndn::bind(&RoutingTable::calculate, this,
-                                                 ndn::ref(pnlsr)));
+    m_scheduler.scheduleEvent(ndn::time::seconds(15),
+                              ndn::bind(&RoutingTable::calculate, this, ndn::ref(pnlsr)));
+
     pnlsr.setIsRouteCalculationScheduled(true);
   }
 }
diff --git a/src/route/routing-table.hpp b/src/route/routing-table.hpp
index 3a3c96a..6dd3ef2 100644
--- a/src/route/routing-table.hpp
+++ b/src/route/routing-table.hpp
@@ -27,6 +27,7 @@
 #include <utility>
 #include <string>
 #include <boost/cstdint.hpp>
+#include <ndn-cxx/util/scheduler.hpp>
 
 #include "routing-table-entry.hpp"
 
@@ -38,8 +39,9 @@
 class RoutingTable
 {
 public:
-  RoutingTable()
-    : m_NO_NEXT_HOP(-12345)
+  RoutingTable(ndn::Scheduler& scheduler)
+    : m_scheduler(scheduler)
+    , m_NO_NEXT_HOP(-12345)
   {
   }
   void
@@ -82,6 +84,9 @@
   void
   writeLog(int hyperbolicState);
 
+private:
+  ndn::Scheduler& m_scheduler;
+
   const int m_NO_NEXT_HOP;
 
   std::list<RoutingTableEntry> m_rTable;
