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)
