diff --git a/tests/daemon/fw/topology-tester.cpp b/tests/daemon/fw/topology-tester.cpp
index 6a70ead..92495d4 100644
--- a/tests/daemon/fw/topology-tester.cpp
+++ b/tests/daemon/fw/topology-tester.cpp
@@ -197,9 +197,7 @@
 TopologyTester::addForwarder(const std::string& label)
 {
   size_t i = m_forwarders.size();
-  m_forwarders.push_back(make_unique<Forwarder>());
-  m_forwarderLabels.push_back(label);
-  BOOST_ASSERT(m_forwarders.size() == m_forwarderLabels.size());
+  m_forwarders.push_back(make_unique<TopologyForwarder>(label));
   return i;
 }
 
@@ -207,12 +205,11 @@
 TopologyTester::makeFace(TopologyNode i, const FaceUri& localUri, const FaceUri& remoteUri,
                          ndn::nfd::FaceScope scope, ndn::nfd::LinkType linkType)
 {
-  Forwarder& forwarder = this->getForwarder(i);
   unique_ptr<GenericLinkService> service = m_wantPcap ? make_unique<TopologyPcapLinkService>() :
                                                         make_unique<GenericLinkService>();
   auto transport = make_unique<InternalForwarderTransport>(localUri, remoteUri, scope, linkType);
   auto face = make_shared<Face>(std::move(service), std::move(transport));
-  forwarder.addFace(face);
+  m_forwarders.at(i)->faceTable.add(face);
   return face;
 }
 
@@ -230,7 +227,7 @@
   BOOST_ASSERT(forwarders.size() <= 2 || linkType != ndn::nfd::LINK_TYPE_POINT_TO_POINT);
 
   for (TopologyNode i : forwarders) {
-    FaceUri localUri("topology://" + m_forwarderLabels.at(i) + "/" + label);
+    FaceUri localUri("topology://" + m_forwarders.at(i)->label + "/" + label);
     auto face = makeFace(i, localUri, remoteUri, ndn::nfd::FACE_SCOPE_NON_LOCAL, linkType);
     link->addFace(i, std::move(face));
   }
@@ -242,8 +239,8 @@
 shared_ptr<TopologyAppLink>
 TopologyTester::addAppFace(const std::string& label, TopologyNode i)
 {
-  FaceUri localUri("topology://" + m_forwarderLabels.at(i) + "/local/" + label);
-  FaceUri remoteUri("topology://" + m_forwarderLabels.at(i) + "/app/" + label);
+  FaceUri localUri("topology://" + m_forwarders.at(i)->label + "/local/" + label);
+  FaceUri remoteUri("topology://" + m_forwarders.at(i)->label + "/app/" + label);
   auto face = makeFace(i, localUri, remoteUri, ndn::nfd::FACE_SCOPE_LOCAL, ndn::nfd::LINK_TYPE_POINT_TO_POINT);
 
   auto al = make_shared<TopologyAppLink>(std::move(face));
@@ -263,8 +260,8 @@
 TopologyTester::addBareLink(const std::string& label, TopologyNode i, ndn::nfd::FaceScope scope,
                             ndn::nfd::LinkType linkType)
 {
-  FaceUri localUri("topology://" + m_forwarderLabels.at(i) + "/local/" + label);
-  FaceUri remoteUri("topology://" + m_forwarderLabels.at(i) + "/bare/" + label);
+  FaceUri localUri("topology://" + m_forwarders.at(i)->label + "/local/" + label);
+  FaceUri remoteUri("topology://" + m_forwarders.at(i)->label + "/bare/" + label);
   auto face = makeFace(i, localUri, remoteUri, scope, linkType);
 
   auto bl = make_shared<TopologyBareLink>(std::move(face));
@@ -272,12 +269,6 @@
   return bl;
 }
 
-void
-TopologyTester::enablePcap(bool isEnabled)
-{
-  m_wantPcap = isEnabled;
-}
-
 TopologyPcap&
 TopologyTester::getPcap(const Face& face)
 {
