diff --git a/tests/rib/auto-prefix-propagator.t.cpp b/tests/rib/auto-prefix-propagator.t.cpp
index f8f12bc..f33c7ae 100644
--- a/tests/rib/auto-prefix-propagator.t.cpp
+++ b/tests/rib/auto-prefix-propagator.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2017,  Regents of the University of California,
+/*
+ * Copyright (c) 2014-2018,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -25,11 +25,11 @@
 
 #include "rib/auto-prefix-propagator.hpp"
 
+#include "tests/identity-management-fixture.hpp"
+
 #include <ndn-cxx/security/pib/pib.hpp>
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
-#include "tests/identity-management-fixture.hpp"
-
 namespace nfd {
 namespace rib {
 namespace tests {
@@ -43,9 +43,10 @@
 {
 public:
   AutoPrefixPropagatorFixture()
-    : m_face(getGlobalIoService(), m_keyChain, {true, true})
+    : m_face(g_io, m_keyChain, {true, true})
+    , m_scheduler(g_io)
     , m_controller(m_face, m_keyChain)
-    , m_propagator(m_controller, m_keyChain, m_rib)
+    , m_propagator(m_controller, m_keyChain, m_scheduler, m_rib)
     , m_requests(m_face.sentInterests)
     , m_entries(m_propagator.m_propagatedEntries)
   {
@@ -174,6 +175,7 @@
 
 protected:
   ndn::util::DummyClientFace m_face;
+  ndn::util::Scheduler m_scheduler;
   ndn::nfd::Controller m_controller;
   Rib m_rib;
   AutoPrefixPropagator m_propagator;
@@ -226,7 +228,7 @@
     if (!insertEntryToRib("/test/A/app")) {
       return false;
     }
-    m_entries["/test/A"].succeed(nullptr);
+    m_entries["/test/A"].succeed(m_scheduler, nullptr);
     if (!eraseEntryFromRib("/test/A/app")) {
       return false;
     }
@@ -347,7 +349,7 @@
   BOOST_CHECK(m_requests.empty());
   BOOST_CHECK(m_entries.find("/test/B") == m_entries.end());
 
-  m_entries["/test/B/C"].succeed(nullptr);
+  m_entries["/test/B/C"].succeed(m_scheduler, nullptr);
   testRedoPropagation("/test/B"); // alternative identity has been propagated
   BOOST_CHECK(m_requests.empty());
   BOOST_CHECK(m_entries.find("/test/B") == m_entries.end());
@@ -367,7 +369,7 @@
   BOOST_REQUIRE(addIdentity("/test/A"));
 
   BOOST_REQUIRE(insertEntryToRib("/test/A/app")); // ensure afterInsertEntry signal emitted
-  m_entries["/test/A"].succeed(nullptr); // ensure there is a valid entry inserted
+  m_entries["/test/A"].succeed(m_scheduler, nullptr); // ensure there is a valid entry inserted
   BOOST_REQUIRE(eraseEntryFromRib("/test/A/app")); // ensure afterEraseEntry signal emitted
 
   BOOST_REQUIRE_EQUAL(m_requests.size(), 2);
@@ -383,7 +385,7 @@
   BOOST_REQUIRE(insertEntryToRib("/localhost/A/app"));
   BOOST_CHECK(m_requests.empty());
 
-  m_propagator.m_propagatedEntries["/localhost/A"].succeed(nullptr);
+  m_propagator.m_propagatedEntries["/localhost/A"].succeed(m_scheduler, nullptr);
   BOOST_REQUIRE(eraseEntryFromRib("/localhost/A/app"));
   BOOST_CHECK(m_requests.empty());
 }
@@ -398,7 +400,7 @@
   BOOST_REQUIRE(insertEntryToRib("/test/A/app"));
   BOOST_CHECK(m_requests.empty());
 
-  m_entries["/test/A"].succeed(nullptr);
+  m_entries["/test/A"].succeed(m_scheduler, nullptr);
   BOOST_REQUIRE(eraseEntryFromRib("/test/A/app"));
   BOOST_CHECK(m_requests.empty());
 }
@@ -410,7 +412,7 @@
   BOOST_REQUIRE(insertEntryToRib("/test/A/app"));
   BOOST_CHECK(m_requests.empty());
 
-  m_entries["/test/A"].succeed(nullptr);
+  m_entries["/test/A"].succeed(m_scheduler, nullptr);
   BOOST_REQUIRE(eraseEntryFromRib("/test/A/app"));
   BOOST_CHECK(m_requests.empty());
 }
@@ -522,18 +524,18 @@
     advanceClocks(time::milliseconds(1));
   };
 
-  m_entries["/test/A"].succeed(nullptr);
+  m_entries["/test/A"].succeed(m_scheduler, nullptr);
   testAfterRibInsert("/test/A/app");
   BOOST_CHECK(m_requests.empty()); // no connectivity
   BOOST_CHECK(m_entries.find("/test/A") == m_entries.end()); // has been erased
 
   connectToHub();
-  m_entries["/test/A"].fail(nullptr);
+  m_entries["/test/A"].fail(m_scheduler, nullptr);
   testAfterRibInsert("/test/A/app");
   BOOST_CHECK(m_requests.empty()); // previous propagation has not succeeded
   BOOST_CHECK(m_entries.find("/test/A") == m_entries.end()); // has been erased
 
-  m_entries["/test/A"].succeed(nullptr);
+  m_entries["/test/A"].succeed(m_scheduler, nullptr);
   testAfterRibInsert("/test/A/app");
   BOOST_REQUIRE_EQUAL(m_requests.size(), 1);
   BOOST_CHECK_EQUAL(checkRequest(0, "unregister", "/test/A"), CheckRequestResult::OK);
@@ -658,11 +660,11 @@
   testAfterRevokeSucceed("/test/A/app"); // in RELEASED state
   BOOST_CHECK(m_requests.empty());
 
-  m_entries["/test/A"].fail(nullptr); // in PROPAGATE_FAIL state
+  m_entries["/test/A"].fail(m_scheduler, nullptr); // in PROPAGATE_FAIL state
   testAfterRevokeSucceed("/test/A/app");
   BOOST_CHECK(m_requests.empty());
 
-  m_entries["/test/A"].succeed(nullptr); // in PROPAGATED state
+  m_entries["/test/A"].succeed(m_scheduler, nullptr); // in PROPAGATED state
   testAfterRevokeSucceed("/test/A/app");
   BOOST_REQUIRE_EQUAL(m_requests.size(), 1);
   BOOST_CHECK_EQUAL(checkRequest(0, "register", "/test/A"), CheckRequestResult::OK);
diff --git a/tests/rib/fib-updates-common.hpp b/tests/rib/fib-updates-common.hpp
index f063f5d..66b1c8e 100644
--- a/tests/rib/fib-updates-common.hpp
+++ b/tests/rib/fib-updates-common.hpp
@@ -27,6 +27,7 @@
 #define NFD_TESTS_RIB_FIB_UPDATES_COMMON_HPP
 
 #include "rib/fib-updater.hpp"
+
 #include "rib-test-common.hpp"
 #include "tests/identity-management-fixture.hpp"
 
@@ -63,7 +64,7 @@
 {
 public:
   FibUpdatesFixture()
-    : face(getGlobalIoService(), m_keyChain)
+    : face(g_io, m_keyChain)
     , controller(face, m_keyChain)
     , fibUpdater(rib, controller)
   {
diff --git a/tests/rib/propagated-entry.t.cpp b/tests/rib/propagated-entry.t.cpp
index fe43677..b03f153 100644
--- a/tests/rib/propagated-entry.t.cpp
+++ b/tests/rib/propagated-entry.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2016,  Regents of the University of California,
+/*
+ * Copyright (c) 2014-2018,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -55,16 +55,18 @@
 
 BOOST_AUTO_TEST_CASE(Succeed)
 {
+  ndn::util::Scheduler scheduler(g_io);
   PropagatedEntry entry;
-  entry.succeed(nullptr);
+  entry.succeed(scheduler, nullptr);
   BOOST_CHECK_EQUAL(PropagationStatus::PROPAGATED, entry.m_propagationStatus);
   BOOST_CHECK(entry.isPropagated());
 }
 
 BOOST_AUTO_TEST_CASE(Fail)
 {
+  ndn::util::Scheduler scheduler(g_io);
   PropagatedEntry entry;
-  entry.fail(nullptr);
+  entry.fail(scheduler, nullptr);
   BOOST_CHECK_EQUAL(PropagationStatus::PROPAGATE_FAIL, entry.m_propagationStatus);
   BOOST_CHECK(entry.isPropagateFail());
 }
diff --git a/tests/rib/readvertise/nfd-rib-readvertise-destination.t.cpp b/tests/rib/readvertise/nfd-rib-readvertise-destination.t.cpp
index 75e8cfa..483f94a 100644
--- a/tests/rib/readvertise/nfd-rib-readvertise-destination.t.cpp
+++ b/tests/rib/readvertise/nfd-rib-readvertise-destination.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2017,  Regents of the University of California,
+/*
+ * Copyright (c) 2014-2018,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -25,10 +25,11 @@
 
 #include "rib/readvertise/nfd-rib-readvertise-destination.hpp"
 
-#include "tests/test-common.hpp"
 #include "tests/identity-management-fixture.hpp"
-#include <ndn-cxx/util/dummy-client-face.hpp>
+#include "tests/test-common.hpp"
+
 #include <ndn-cxx/security/signing-info.hpp>
+#include <ndn-cxx/util/dummy-client-face.hpp>
 
 namespace nfd {
 namespace rib {
@@ -42,15 +43,12 @@
   NfdRibReadvertiseDestinationFixture()
     : nSuccessCallbacks(0)
     , nFailureCallbacks(0)
-    , face(getGlobalIoService(), m_keyChain, {true, false})
+    , face(g_io, m_keyChain, {true, false})
+    , scheduler(g_io)
     , controller(face, m_keyChain)
     , dest(controller, Name("/localhost/nlsr"), rib)
-    , successCallback([this] {
-        nSuccessCallbacks++;
-      })
-    , failureCallback([this] (const std::string& str) {
-        nFailureCallbacks++;
-      })
+    , successCallback([this] { nSuccessCallbacks++; })
+    , failureCallback([this] (const std::string&) { nFailureCallbacks++; })
   {
   }
 
@@ -60,6 +58,7 @@
 
 protected:
   ndn::util::DummyClientFace face;
+  ndn::util::Scheduler scheduler;
   ndn::nfd::Controller controller;
   Rib rib;
   NfdRibReadvertiseDestination dest;
@@ -123,7 +122,7 @@
 {
   Scenario scenario;
   Name prefix("/ndn/memphis/test");
-  ReadvertisedRoute rr(prefix);
+  ReadvertisedRoute rr(prefix, scheduler);
   const Name RIB_REGISTER_COMMAND_PREFIX("/localhost/nlsr/rib/register");
 
   dest.advertise(rr, successCallback, failureCallback);
@@ -201,7 +200,7 @@
 {
   Scenario scenario;
   Name prefix("/ndn/memphis/test");
-  ReadvertisedRoute rr(prefix);
+  ReadvertisedRoute rr(prefix, scheduler);
   const Name RIB_UNREGISTER_COMMAND_PREFIX("/localhost/nlsr/rib/unregister");
 
   dest.withdraw(rr, successCallback, failureCallback);
diff --git a/tests/rib/readvertise/readvertise.t.cpp b/tests/rib/readvertise/readvertise.t.cpp
index 5de7208..1ff0f85 100644
--- a/tests/rib/readvertise/readvertise.t.cpp
+++ b/tests/rib/readvertise/readvertise.t.cpp
@@ -27,7 +27,6 @@
 
 #include "tests/identity-management-fixture.hpp"
 
-#include <ndn-cxx/mgmt/nfd/controller.hpp>
 #include <ndn-cxx/util/dummy-client-face.hpp>
 #include <boost/range/adaptor/transformed.hpp>
 #include <boost/range/algorithm/copy.hpp>
@@ -115,14 +114,15 @@
 {
 public:
   ReadvertiseFixture()
-    : face(getGlobalIoService(), m_keyChain, {false, false})
-    , controller(face, m_keyChain)
+    : m_face(g_io, m_keyChain, {false, false})
+    , m_scheduler(g_io)
   {
     auto policyUnique = make_unique<DummyReadvertisePolicy>();
     policy = policyUnique.get();
     auto destinationUnique = make_unique<DummyReadvertiseDestination>();
     destination = destinationUnique.get();
-    readvertise.reset(new Readvertise(rib, std::move(policyUnique), std::move(destinationUnique)));
+    readvertise = make_unique<Readvertise>(m_rib, m_scheduler,
+                                           std::move(policyUnique), std::move(destinationUnique));
   }
 
   void
@@ -131,7 +131,7 @@
     Route route;
     route.faceId = faceId;
     route.origin = origin;
-    rib.insert(prefix, route);
+    m_rib.insert(prefix, route);
     this->advanceClocks(time::milliseconds(6));
   }
 
@@ -141,7 +141,7 @@
     Route route;
     route.faceId = faceId;
     route.origin = origin;
-    rib.erase(prefix, route);
+    m_rib.erase(prefix, route);
     this->advanceClocks(time::milliseconds(6));
   }
 
@@ -152,14 +152,15 @@
     this->advanceClocks(time::milliseconds(6));
   }
 
-public:
-  ndn::KeyChain m_keyChain;
-  ndn::util::DummyClientFace face;
-  ndn::nfd::Controller controller;
+protected:
   DummyReadvertisePolicy* policy;
   DummyReadvertiseDestination* destination;
-  Rib rib;
   unique_ptr<Readvertise> readvertise;
+
+private:
+  ndn::util::DummyClientFace m_face;
+  ndn::util::Scheduler m_scheduler;
+  Rib m_rib;
 };
 
 BOOST_AUTO_TEST_SUITE(Readvertise)
diff --git a/tests/rib/rib-manager.t.cpp b/tests/rib/rib-manager.t.cpp
index 8ccde7d..be59ca5 100644
--- a/tests/rib/rib-manager.t.cpp
+++ b/tests/rib/rib-manager.t.cpp
@@ -57,13 +57,13 @@
 {
 public:
   explicit
-  RibManagerFixture(const ConfigurationStatus& status,
-                    bool shouldClearRib)
+  RibManagerFixture(const ConfigurationStatus& status, bool shouldClearRib)
     : m_commands(m_face.sentInterests)
     , m_status(status)
+    , m_scheduler(g_io)
     , m_nfdController(m_face, m_keyChain)
     , m_fibUpdater(m_rib, m_nfdController)
-    , m_manager(m_rib, m_face, m_keyChain, m_nfdController, m_dispatcher)
+    , m_manager(m_rib, m_face, m_keyChain, m_nfdController, m_dispatcher, m_scheduler)
   {
     m_rib.mockFibResponse = [] (const RibUpdateBatch& batch) {
       BOOST_CHECK(batch.begin() != batch.end());
@@ -208,6 +208,7 @@
   std::vector<Interest>& m_commands;
   ConfigurationStatus m_status;
 
+  ndn::util::Scheduler m_scheduler;
   ndn::nfd::Controller m_nfdController;
   Rib m_rib;
   FibUpdater m_fibUpdater;
diff --git a/tests/rib/sl-announce.t.cpp b/tests/rib/sl-announce.t.cpp
index c77b91a..c7808d3 100644
--- a/tests/rib/sl-announce.t.cpp
+++ b/tests/rib/sl-announce.t.cpp
@@ -26,6 +26,7 @@
 #include "rib/rib-manager.hpp"
 
 #include "tests/identity-management-fixture.hpp"
+
 #include <ndn-cxx/util/dummy-client-face.hpp>
 
 namespace nfd {
@@ -40,20 +41,21 @@
   using SlAnnounceResult = RibManager::SlAnnounceResult;
 
   RibManagerSlAnnounceFixture()
-    : m_face(getGlobalIoService(), m_keyChain)
+    : m_face(g_io, m_keyChain)
+    , m_scheduler(g_io)
     , m_nfdController(m_face, m_keyChain)
     , m_dispatcher(m_face, m_keyChain)
     , m_fibUpdater(rib, m_nfdController)
     , m_trustedSigner(m_keyChain.createIdentity("/trusted", ndn::RsaKeyParams()))
     , m_untrustedSigner(m_keyChain.createIdentity("/untrusted", ndn::RsaKeyParams()))
   {
-    rib.mockFibResponse = [] (const RibUpdateBatch& batch) { return true; };
+    rib.mockFibResponse = [] (const RibUpdateBatch&) { return true; };
     rib.wantMockFibResponseOnce = false;
 
     // Face, Controller, Dispatcher are irrelevant to SlAnnounce functions but required by
     // RibManager construction, so they are private. RibManager is a pointer to avoid code style
     // rule 1.4 violation.
-    manager = make_unique<RibManager>(rib, m_face, m_keyChain, m_nfdController, m_dispatcher);
+    manager = make_unique<RibManager>(rib, m_face, m_keyChain, m_nfdController, m_dispatcher, m_scheduler);
 
     loadTrustSchema();
   }
@@ -84,7 +86,7 @@
         result = res;
       });
 
-    getGlobalIoService().poll();
+    g_io.poll();
     BOOST_CHECK(result);
     return result.value_or(SlAnnounceResult::ERROR);
   }
@@ -101,7 +103,7 @@
         result = res;
       });
 
-    getGlobalIoService().poll();
+    g_io.poll();
     BOOST_CHECK(result);
     return result.value_or(SlAnnounceResult::ERROR);
   }
@@ -118,7 +120,7 @@
         result = found;
       });
 
-    getGlobalIoService().poll();
+    g_io.poll();
     BOOST_CHECK(result);
     return result.value_or(nullopt);
   }
@@ -161,6 +163,7 @@
 
 private:
   ndn::util::DummyClientFace m_face;
+  ndn::util::Scheduler m_scheduler;
   ndn::nfd::Controller m_nfdController;
   ndn::mgmt::Dispatcher m_dispatcher;
   FibUpdater m_fibUpdater;
