diff --git a/helper/boost-graph-ndn-global-routing-helper.hpp b/helper/boost-graph-ndn-global-routing-helper.hpp
index fe160f3..49b724e 100644
--- a/helper/boost-graph-ndn-global-routing-helper.hpp
+++ b/helper/boost-graph-ndn-global-routing-helper.hpp
@@ -28,7 +28,6 @@
 #include <boost/graph/properties.hpp>
 #include <boost/ref.hpp>
 
-#include "ns3/ndnSIM/model/ndn-face.hpp"
 #include "ns3/ndnSIM/model/ndn-global-router.hpp"
 
 #include "ns3/node-list.h"
diff --git a/helper/ndn-fib-helper.cpp b/helper/ndn-fib-helper.cpp
index 95c0309..a74ddb2 100644
--- a/helper/ndn-fib-helper.cpp
+++ b/helper/ndn-fib-helper.cpp
@@ -42,7 +42,6 @@
 #include "ns3/ndnSIM/model/ndn-l3-protocol.hpp"
 #include "ns3/ndnSIM/helper/ndn-stack-helper.hpp"
 
-
 namespace ns3 {
 namespace ndn {
 
@@ -62,8 +61,7 @@
   StackHelper::getKeyChain().sign(*command);
 
   Ptr<L3Protocol> l3protocol = node->GetObject<L3Protocol>();
-  shared_ptr<nfd::FibManager> fibManager = l3protocol->getFibManager();
-  fibManager->onFibRequest(*command);
+  l3protocol->injectInterest(*command);
 }
 
 void
@@ -79,9 +77,8 @@
   shared_ptr<Interest> command(make_shared<Interest>(commandName));
   StackHelper::getKeyChain().sign(*command);
 
-  Ptr<L3Protocol> L3protocol = node->GetObject<L3Protocol>();
-  shared_ptr<nfd::FibManager> fibManager = L3protocol->getFibManager();
-  fibManager->onFibRequest(*command);
+  Ptr<L3Protocol> l3protocol = node->GetObject<L3Protocol>();
+  l3protocol->injectInterest(*command);
 }
 
 void
diff --git a/helper/ndn-global-routing-helper.cpp b/helper/ndn-global-routing-helper.cpp
index 8d42633..aca25d5 100644
--- a/helper/ndn-global-routing-helper.cpp
+++ b/helper/ndn-global-routing-helper.cpp
@@ -27,7 +27,7 @@
 
 #include "model/ndn-l3-protocol.hpp"
 #include "helper/ndn-fib-helper.hpp"
-#include "model/ndn-net-device-face.hpp"
+#include "model/ndn-net-device-link-service.hpp"
 #include "model/ndn-global-router.hpp"
 
 #include "daemon/table/fib.hpp"
@@ -80,14 +80,14 @@
   gr = CreateObject<GlobalRouter>();
   node->AggregateObject(gr);
 
-  for (auto& i : ndn->getForwarder()->getFaceTable()) {
-    shared_ptr<NetDeviceFace> face = std::dynamic_pointer_cast<NetDeviceFace>(i);
-    if (face == 0) {
+  for (auto& face : ndn->getForwarder()->getFaceTable()) {
+    auto linkService = dynamic_cast<NetDeviceLinkService*>(face->getLinkService());
+    if (linkService == nullptr) {
       NS_LOG_DEBUG("Skipping non-netdevice face");
       continue;
     }
 
-    Ptr<NetDevice> nd = face->GetNetDevice();
+    Ptr<NetDevice> nd = linkService->GetNetDevice();
     if (nd == 0) {
       NS_LOG_DEBUG("Not a NetDevice associated with NetDeviceFace");
       continue;
@@ -325,9 +325,9 @@
     }
 
     for (auto& faceId : faceIds) {
-      shared_ptr<Face> k = l3->getForwarder()->getFaceTable().get(faceId);
-      shared_ptr<NetDeviceFace> face = std::dynamic_pointer_cast<NetDeviceFace>(k);
-      if (face == 0) {
+      shared_ptr<Face> face = l3->getForwarder()->getFaceTable().get(faceId);
+      auto linkService = dynamic_cast<NetDeviceLinkService*>(face->getLinkService());
+      if (linkService == nullptr) {
         NS_LOG_DEBUG("Skipping non-netdevice face");
         continue;
       }
diff --git a/helper/ndn-link-control-helper.cpp b/helper/ndn-link-control-helper.cpp
index 09137bf..70a3171 100644
--- a/helper/ndn-link-control-helper.cpp
+++ b/helper/ndn-link-control-helper.cpp
@@ -32,7 +32,8 @@
 #include "ns3/pointer.h"
 
 #include "model/ndn-l3-protocol.hpp"
-#include "model/ndn-net-device-face.hpp"
+#include "model/ndn-net-device-link-service.hpp"
+#include "NFD/daemon/face/face.hpp"
 
 #include "fw/forwarder.hpp"
 
@@ -56,11 +57,11 @@
 
   // iterate over all faces to find the right one
   for (const auto& face : ndn1->getForwarder()->getFaceTable()) {
-    shared_ptr<ndn::NetDeviceFace> ndFace = std::dynamic_pointer_cast<NetDeviceFace>(face);
-    if (ndFace == nullptr)
+    auto linkService = dynamic_cast<NetDeviceLinkService*>(face->getLinkService());
+    if (linkService == nullptr)
       continue;
 
-    Ptr<PointToPointNetDevice> nd1 = ndFace->GetNetDevice()->GetObject<PointToPointNetDevice>();
+    Ptr<PointToPointNetDevice> nd1 = linkService->GetNetDevice()->GetObject<PointToPointNetDevice>();
     if (nd1 == nullptr)
       continue;
 
diff --git a/helper/ndn-scenario-helper.cpp b/helper/ndn-scenario-helper.cpp
index 1be86e6..2539af1 100644
--- a/helper/ndn-scenario-helper.cpp
+++ b/helper/ndn-scenario-helper.cpp
@@ -67,11 +67,11 @@
   ndnHelper.disableRibManager();
 }
 
-void
-ScenarioHelper::disableFaceManager()
-{
-  ndnHelper.disableFaceManager();
-}
+// void
+// ScenarioHelper::disableFaceManager()
+// {
+//   ndnHelper.disableFaceManager();
+// }
 
 void
 ScenarioHelper::disableStrategyChoiceManager()
@@ -80,9 +80,9 @@
 }
 
 void
-ScenarioHelper::disableStatusServer()
+ScenarioHelper::disableForwarderStatusManager()
 {
-  ndnHelper.disableStatusServer();
+  ndnHelper.disableForwarderStatusManager();
 }
 
 void
diff --git a/helper/ndn-scenario-helper.hpp b/helper/ndn-scenario-helper.hpp
index 52d19b7..b939095 100644
--- a/helper/ndn-scenario-helper.hpp
+++ b/helper/ndn-scenario-helper.hpp
@@ -163,11 +163,12 @@
   void
   disableRibManager();
 
-  /**
-   * \brief Disable Face Manager
-   */
-  void
-  disableFaceManager();
+  // Cannot be disabled for now
+  // /**
+  //  * \brief Disable Face Manager
+  //  */
+  // void
+  // disableFaceManager();
 
   /**
    * \brief Disable Strategy Choice Manager
@@ -176,10 +177,10 @@
   disableStrategyChoiceManager();
 
   /**
-   * \brief Disable Status Server
+   * \brief Disable Forwarder Status Manager
    */
   void
-  disableStatusServer();
+  disableForwarderStatusManager();
 
   /**
    * \brief Get NDN stack helper, e.g., to adjust its parameters
diff --git a/helper/ndn-stack-helper.cpp b/helper/ndn-stack-helper.cpp
index 06dd368..4037cf8 100644
--- a/helper/ndn-stack-helper.cpp
+++ b/helper/ndn-stack-helper.cpp
@@ -330,9 +330,7 @@
 
   if (m_needSetDefaultRoutes) {
     // default route with lowest priority possible
-
-    // TODO: Restore when FibHelper is available
-    // FibHelper::AddRoute(node, "/", face, std::numeric_limits<int32_t>::max());
+    FibHelper::AddRoute(node, "/", face, std::numeric_limits<int32_t>::max());
   }
   return face;
 }
diff --git a/helper/ndn-strategy-choice-helper.cpp b/helper/ndn-strategy-choice-helper.cpp
index 53ba544..6958fce 100644
--- a/helper/ndn-strategy-choice-helper.cpp
+++ b/helper/ndn-strategy-choice-helper.cpp
@@ -40,10 +40,9 @@
 
   shared_ptr<Interest> command(make_shared<Interest>(commandName));
   StackHelper::getKeyChain().sign(*command);
-  Ptr<L3Protocol> L3protocol = node->GetObject<L3Protocol>();
-  auto strategyChoiceManager = L3protocol->getStrategyChoiceManager();
-  strategyChoiceManager->onStrategyChoiceRequest(*command);
-  NS_LOG_DEBUG("Forwarding strategy installed in node " << node->GetId());
+
+  Ptr<L3Protocol> l3protocol = node->GetObject<L3Protocol>();
+  l3protocol->injectInterest(*command);
 }
 
 void
diff --git a/model/ndn-l3-protocol.cpp b/model/ndn-l3-protocol.cpp
index a3263f4..8556db7 100644
--- a/model/ndn-l3-protocol.cpp
+++ b/model/ndn-l3-protocol.cpp
@@ -233,6 +233,12 @@
 };
 
 void
+L3Protocol::injectInterest(const Interest& interest)
+{
+  m_impl->m_internalFace->sendInterest(interest);
+}
+
+void
 L3Protocol::initializeManagement()
 {
   auto& forwarder = m_impl->m_forwarder;
diff --git a/model/ndn-l3-protocol.hpp b/model/ndn-l3-protocol.hpp
index 0145d72..a34d36f 100644
--- a/model/ndn-l3-protocol.hpp
+++ b/model/ndn-l3-protocol.hpp
@@ -147,6 +147,12 @@
   nfd::ConfigSection&
   getConfig();
 
+  /**
+   * \brief Inject interest through internal Face
+   */
+  void
+  injectInterest(const Interest& interest);
+
 public: // Workaround for python bindings
   static Ptr<L3Protocol>
   getL3Protocol(Ptr<Object> node);
diff --git a/tests/unit-tests/helper/ndn-face-container.t.cpp b/tests/unit-tests/helper/ndn-face-container.t.cpp
index 5d0800d..4129cbc 100644
--- a/tests/unit-tests/helper/ndn-face-container.t.cpp
+++ b/tests/unit-tests/helper/ndn-face-container.t.cpp
@@ -41,10 +41,10 @@
   FaceContainer c1;
   BOOST_CHECK_EQUAL(c1.GetN(), 0);
 
-  c1.Add(std::make_shared<nfd::NullFace>(FaceUri("null://1")));
+  c1.Add(nfd::face::makeNullFace(FaceUri("null://1")));
   BOOST_CHECK_EQUAL(c1.GetN(), 1);
 
-  c1.Add(std::make_shared<nfd::NullFace>(FaceUri("null://2")));
+  c1.Add(nfd::face::makeNullFace(FaceUri("null://2")));
   BOOST_CHECK_EQUAL(c1.GetN(), 2);
 
   FaceContainer c2(c1);
@@ -71,8 +71,8 @@
 BOOST_AUTO_TEST_CASE(AddAll)
 {
   FaceContainer c1;
-  c1.Add(std::make_shared<nfd::NullFace>(FaceUri("null://1")));
-  c1.Add(std::make_shared<nfd::NullFace>(FaceUri("null://2")));
+  c1.Add(nfd::face::makeNullFace(FaceUri("null://1")));
+  c1.Add(nfd::face::makeNullFace(FaceUri("null://2")));
 
   FaceContainer c2(c1);
   c2.AddAll(c1);
diff --git a/tests/unit-tests/helper/ndn-fib-helper.t.cpp b/tests/unit-tests/helper/ndn-fib-helper.t.cpp
index 59f4876..60a5967 100644
--- a/tests/unit-tests/helper/ndn-fib-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-fib-helper.t.cpp
@@ -50,11 +50,11 @@
     Simulator::Stop(Seconds(20.001));
     Simulator::Run();
 
-    BOOST_CHECK_EQUAL(getFace("1", "2")->getFaceStatus().getNOutInterests(), 10);
-    BOOST_CHECK_EQUAL(getFace("1", "2")->getFaceStatus().getNInDatas(), 10);
+    BOOST_CHECK_EQUAL(getFace("1", "2")->getCounters().nOutInterests, 10);
+    BOOST_CHECK_EQUAL(getFace("1", "2")->getCounters().nInData, 10);
 
-    BOOST_CHECK_EQUAL(getFace("2", "1")->getFaceStatus().getNInInterests(), 10);
-    BOOST_CHECK_EQUAL(getFace("2", "1")->getFaceStatus().getNOutDatas(), 10);
+    BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 10);
+    BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nOutData, 10);
   }
 };
 
diff --git a/tests/unit-tests/helper/ndn-global-routing-helper.t.cpp b/tests/unit-tests/helper/ndn-global-routing-helper.t.cpp
index d37c747..4cd6a04 100644
--- a/tests/unit-tests/helper/ndn-global-routing-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-global-routing-helper.t.cpp
@@ -21,8 +21,7 @@
 
 #include "model/ndn-global-router.hpp"
 #include "model/ndn-l3-protocol.hpp"
-#include "model/ndn-face.hpp"
-#include "model/ndn-net-device-face.hpp"
+#include "model/ndn-net-device-link-service.hpp"
 
 #include "ns3/channel.h"
 #include "ns3/net-device.h"
@@ -93,10 +92,11 @@
   for (const auto& entry : ndn->getForwarder()->getFib()) {
     bool isFirst = true;
     for (auto& nextHop : entry.getNextHops()) {
-      auto face = dynamic_pointer_cast<ndn::NetDeviceFace>(nextHop.getFace());
-      if (face == nullptr)
+      auto face = nextHop.getFace();
+      auto linkService = dynamic_cast<NetDeviceLinkService*>(face->getLinkService());
+      if (linkService == nullptr)
         continue;
-      BOOST_CHECK_EQUAL(Names::FindName(face->GetNetDevice()->GetChannel()->GetDevice(1)->GetNode()), "C1");
+      BOOST_CHECK_EQUAL(Names::FindName(linkService->GetNetDevice()->GetChannel()->GetDevice(1)->GetNode()), "C1");
       isFirst = false;
     }
   }
@@ -137,10 +137,11 @@
   for (const auto& entry : ndn->getForwarder()->getFib()) {
     bool isFirst = true;
     for (auto& nextHop : entry.getNextHops()) {
-      auto face = dynamic_pointer_cast<ndn::NetDeviceFace>(nextHop.getFace());
-      if (face == nullptr)
+      auto face = nextHop.getFace();
+      auto linkService = dynamic_cast<NetDeviceLinkService*>(face->getLinkService());
+      if (linkService == nullptr)
         continue;
-      BOOST_CHECK_EQUAL(Names::FindName(face->GetNetDevice()->GetChannel()->GetDevice(1)->GetNode()), "B2");
+      BOOST_CHECK_EQUAL(Names::FindName(linkService->GetNetDevice()->GetChannel()->GetDevice(1)->GetNode()), "B2");
       isFirst = false;
     }
   }
diff --git a/tests/unit-tests/helper/ndn-link-control-helper.t.cpp b/tests/unit-tests/helper/ndn-link-control-helper.t.cpp
index 92ceefb..a88b9e3 100644
--- a/tests/unit-tests/helper/ndn-link-control-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-link-control-helper.t.cpp
@@ -55,17 +55,17 @@
   Simulator::Schedule(Seconds(10.1), ndn::LinkControlHelper::UpLink, getNode("1"), getNode("2"));
 
   nfd::scheduler::schedule(time::milliseconds(5200), [&] {
-      BOOST_CHECK_EQUAL(getFace("2", "1")->getFaceStatus().getNInInterests(), 6);
-      BOOST_CHECK_EQUAL(getFace("1", "2")->getFaceStatus().getNInDatas(), 6);
+      BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 6);
+      BOOST_CHECK_EQUAL(getFace("1", "2")->getCounters().nInData, 6);
     });
 
   nfd::scheduler::schedule(time::milliseconds(10200), [&] {
-      BOOST_CHECK_EQUAL(getFace("2", "1")->getFaceStatus().getNInInterests(), 6);
-      BOOST_CHECK_EQUAL(getFace("1", "2")->getFaceStatus().getNInDatas(), 6);
+      BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 6);
+      BOOST_CHECK_EQUAL(getFace("1", "2")->getCounters().nInData, 6);
     });
   nfd::scheduler::schedule(time::milliseconds(15100), [&] {
-      BOOST_CHECK_EQUAL(getFace("2", "1")->getFaceStatus().getNInInterests(), 11);
-      BOOST_CHECK_EQUAL(getFace("1", "2")->getFaceStatus().getNInDatas(), 11);
+      BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 11);
+      BOOST_CHECK_EQUAL(getFace("1", "2")->getCounters().nInData, 11);
     });
 
   Simulator::Stop(Seconds(15.2));
@@ -125,14 +125,14 @@
 
   // just before link failure
   nfd::scheduler::schedule(time::milliseconds(10050), [&] {
-      BOOST_CHECK_EQUAL(getFace("2", "1")->getFaceStatus().getNInInterests(), 11);
-      BOOST_CHECK_EQUAL(getFace("3", "1")->getFaceStatus().getNInInterests(), 11);
+      BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 11);
+      BOOST_CHECK_EQUAL(getFace("3", "1")->getCounters().nInInterests, 11);
     });
 
   // just before link recovery
   nfd::scheduler::schedule(time::milliseconds(20050), [&] {
-      BOOST_CHECK_EQUAL(getFace("2", "1")->getFaceStatus().getNInInterests(), 11);
-      BOOST_CHECK_EQUAL(getFace("3", "1")->getFaceStatus().getNInInterests(), 21);
+      BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 11);
+      BOOST_CHECK_EQUAL(getFace("3", "1")->getCounters().nInInterests, 21);
     });
 
   nfd::scheduler::schedule(time::milliseconds(20100), [&] {
@@ -140,8 +140,8 @@
     });
 
   nfd::scheduler::schedule(time::milliseconds(30050), [&] {
-      BOOST_CHECK_EQUAL(getFace("2", "1")->getFaceStatus().getNInInterests(), 21);
-      BOOST_CHECK_EQUAL(getFace("3", "1")->getFaceStatus().getNInInterests(), 31);
+      BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 21);
+      BOOST_CHECK_EQUAL(getFace("3", "1")->getCounters().nInInterests, 31);
     });
 
   Simulator::Stop(Seconds(30.1));
diff --git a/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp b/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp
index ed60016..0b92fa7 100644
--- a/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp
@@ -81,11 +81,11 @@
   Simulator::Stop(Seconds(5.0));
   Simulator::Run();
 
-  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getFaceStatus().getNOutInterests(), 0);
-  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getFaceStatus().getNOutInterests(), 5);
+  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getCounters().nOutInterests, 0);
+  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getCounters().nOutInterests, 5);
 
-  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getFaceStatus().getNOutInterests(), 5);
-  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getFaceStatus().getNOutInterests(), 0);
+  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getCounters().nOutInterests, 5);
+  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getCounters().nOutInterests, 0);
 }
 
 // static void
@@ -97,11 +97,11 @@
   Simulator::Stop(Seconds(5.0));
   Simulator::Run();
 
-  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getFaceStatus().getNOutInterests(), 0);
-  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getFaceStatus().getNOutInterests(), 5);
+  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getCounters().nOutInterests, 0);
+  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getCounters().nOutInterests, 5);
 
-  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getFaceStatus().getNOutInterests(), 5);
-  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getFaceStatus().getNOutInterests(), 5);
+  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getCounters().nOutInterests, 5);
+  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getCounters().nOutInterests, 5);
 }
 
 // static void
@@ -117,11 +117,11 @@
   Simulator::Stop(Seconds(5.0));
   Simulator::Run();
 
-  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getFaceStatus().getNOutInterests(), 5);
-  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getFaceStatus().getNOutInterests(), 5);
+  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getCounters().nOutInterests, 5);
+  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getCounters().nOutInterests, 5);
 
-  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getFaceStatus().getNOutInterests(), 5);
-  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getFaceStatus().getNOutInterests(), 5);
+  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getCounters().nOutInterests, 5);
+  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getCounters().nOutInterests, 5);
 }
 
 // static void
@@ -133,11 +133,11 @@
   Simulator::Stop(Seconds(5.0));
   Simulator::Run();
 
-  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getFaceStatus().getNOutInterests(), 5);
-  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getFaceStatus().getNOutInterests(), 5);
+  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getCounters().nOutInterests, 5);
+  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getCounters().nOutInterests, 5);
 
-  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getFaceStatus().getNOutInterests(), 5);
-  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getFaceStatus().getNOutInterests(), 5);
+  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getCounters().nOutInterests, 5);
+  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getCounters().nOutInterests, 5);
 }
 
 
@@ -171,11 +171,11 @@
   Simulator::Stop(Seconds(5.0));
   Simulator::Run();
 
-  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getFaceStatus().getNOutInterests(), 0);
-  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getFaceStatus().getNOutInterests(), 5);
+  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getCounters().nOutInterests, 0);
+  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getCounters().nOutInterests, 5);
 
-  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getFaceStatus().getNOutInterests(), 0);
-  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getFaceStatus().getNOutInterests(), 0);
+  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getCounters().nOutInterests, 0);
+  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getCounters().nOutInterests, 0);
 }
 
 // template<class Strategy>
@@ -192,11 +192,11 @@
   Simulator::Stop(Seconds(5.0));
   Simulator::Run();
 
-  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getFaceStatus().getNOutInterests(), 0);
-  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getFaceStatus().getNOutInterests(), 0);
+  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getCounters().nOutInterests, 0);
+  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getCounters().nOutInterests, 0);
 
-  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getFaceStatus().getNOutInterests(), 0);
-  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getFaceStatus().getNOutInterests(), 0);
+  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getCounters().nOutInterests, 0);
+  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getCounters().nOutInterests, 0);
 }
 
 // template<class Strategy>
@@ -209,11 +209,11 @@
   Simulator::Stop(Seconds(5.0));
   Simulator::Run();
 
-  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getFaceStatus().getNOutInterests(), 0);
-  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getFaceStatus().getNOutInterests(), 0);
+  BOOST_CHECK_EQUAL(getFace("A1", "B1")->getCounters().nOutInterests, 0);
+  BOOST_CHECK_EQUAL(getFace("A1", "C1")->getCounters().nOutInterests, 0);
 
-  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getFaceStatus().getNOutInterests(), 0);
-  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getFaceStatus().getNOutInterests(), 0);
+  BOOST_CHECK_EQUAL(getFace("A2", "B2")->getCounters().nOutInterests, 0);
+  BOOST_CHECK_EQUAL(getFace("A2", "C2")->getCounters().nOutInterests, 0);
 }
 
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/wscript b/wscript
index 734d0f5..30ba249 100644
--- a/wscript
+++ b/wscript
@@ -142,11 +142,7 @@
                                           'model/ndn-app-face.cpp',
                                           'model/ndn-app-link-service.cpp',
                                           'helper/ndn-app-helper.cpp',
-                                          'helper/ndn-fib-helper.cpp',
-                                          'helper/ndn-global-routing-helper.cpp',
-                                          'helper/ndn-link-control-helper.cpp',
                                           'helper/ndn-scenario-helper.cpp',
-                                          'helper/ndn-strategy-choice-helper.cpp',
                                           'utils/topology/*',
                                           'utils/tracers/*',
                                           'model/ip-faces/*']) + ndnCxxSrc + nfdSrc
