diff --git a/daemon/fw/face-table.cpp b/daemon/fw/face-table.cpp
index ef5b916..ed082bf 100644
--- a/daemon/fw/face-table.cpp
+++ b/daemon/fw/face-table.cpp
@@ -33,17 +33,11 @@
 
 NFD_LOG_INIT("FaceTable");
 
-FaceTable::FaceTable(Forwarder& forwarder)
-  : m_forwarder(forwarder)
-  , m_lastFaceId(face::FACEID_RESERVED_MAX)
+FaceTable::FaceTable()
+  : m_lastFaceId(face::FACEID_RESERVED_MAX)
 {
 }
 
-FaceTable::~FaceTable()
-{
-
-}
-
 Face*
 FaceTable::get(FaceId id) const
 {
@@ -90,9 +84,6 @@
   NFD_LOG_INFO("Added face id=" << faceId << " remote=" << face->getRemoteUri()
                                           << " local=" << face->getLocalUri());
 
-  face->afterReceiveInterest.connect(bind(&Forwarder::startProcessInterest, &m_forwarder, ref(*face), _1));
-  face->afterReceiveData.connect(bind(&Forwarder::startProcessData, &m_forwarder, ref(*face), _1));
-  face->afterReceiveNack.connect(bind(&Forwarder::startProcessNack, &m_forwarder, ref(*face), _1));
   connectFaceClosedSignal(*face, bind(&FaceTable::remove, this, faceId));
 
   this->afterAdd(*face);
@@ -107,8 +98,6 @@
 
   this->beforeRemove(*face);
 
-  m_forwarder.getFib().removeNextHopFromAllEntries(*face);
-
   m_faces.erase(i);
   face->setId(face::INVALID_FACEID);
 
diff --git a/daemon/fw/face-table.hpp b/daemon/fw/face-table.hpp
index 7da4aff..508db4a 100644
--- a/daemon/fw/face-table.hpp
+++ b/daemon/fw/face-table.hpp
@@ -32,37 +32,31 @@
 
 namespace nfd {
 
-class Forwarder;
-
 /** \brief container of all faces
  */
 class FaceTable : noncopyable
 {
 public:
-  explicit
-  FaceTable(Forwarder& forwarder);
-
-  VIRTUAL_WITH_TESTS
-  ~FaceTable();
+  FaceTable();
 
   /** \brief add a face
    *
    *  FaceTable obtains shared ownership of the face.
    *  The channel or protocol factory that creates the face may retain ownership.
    */
-  VIRTUAL_WITH_TESTS void
+  void
   add(shared_ptr<Face> face);
 
   /** \brief add a special face with a reserved FaceId
    */
-  VIRTUAL_WITH_TESTS void
+  void
   addReserved(shared_ptr<Face> face, FaceId faceId);
 
   /** \brief get face by FaceId
    *  \return a face if found, nullptr if not found;
    *          face->shared_from_this() can be used if shared_ptr<Face> is desired
    */
-  VIRTUAL_WITH_TESTS Face*
+  Face*
   get(FaceId id) const;
 
   /** \return count of faces
@@ -107,7 +101,6 @@
   getForwardRange() const;
 
 private:
-  Forwarder& m_forwarder;
   FaceId m_lastFaceId;
   FaceMap m_faces;
 };
diff --git a/daemon/fw/forwarder.cpp b/daemon/fw/forwarder.cpp
index 0b4c653..1bb2ebe 100644
--- a/daemon/fw/forwarder.cpp
+++ b/daemon/fw/forwarder.cpp
@@ -37,18 +37,34 @@
 using fw::Strategy;
 
 Forwarder::Forwarder()
-  : m_faceTable(*this)
-  , m_fib(m_nameTree)
+  : m_fib(m_nameTree)
   , m_pit(m_nameTree)
   , m_measurements(m_nameTree)
   , m_strategyChoice(m_nameTree, fw::makeDefaultStrategy(*this))
 {
   fw::installStrategies(*this);
+
+  m_faceTable.afterAdd.connect([this] (Face& face) {
+    face.afterReceiveInterest.connect(
+      [this, &face] (const Interest& interest) {
+        this->startProcessInterest(face, interest);
+      });
+    face.afterReceiveData.connect(
+      [this, &face] (const Data& data) {
+        this->startProcessData(face, data);
+      });
+    face.afterReceiveNack.connect(
+      [this, &face] (const lp::Nack& nack) {
+        this->startProcessNack(face, nack);
+      });
+  });
+
+  m_faceTable.beforeRemove.connect([this] (Face& face) {
+    m_fib.removeNextHopFromAllEntries(face);
+  });
 }
 
-Forwarder::~Forwarder()
-{
-}
+Forwarder::~Forwarder() = default;
 
 void
 Forwarder::startProcessInterest(Face& face, const Interest& interest)
diff --git a/tests/daemon/fw/face-table.t.cpp b/tests/daemon/fw/face-table.t.cpp
index 5fcce80..839018a 100644
--- a/tests/daemon/fw/face-table.t.cpp
+++ b/tests/daemon/fw/face-table.t.cpp
@@ -24,7 +24,6 @@
  */
 
 #include "fw/face-table.hpp"
-#include "fw/forwarder.hpp"
 
 #include "tests/test-common.hpp"
 #include "tests/daemon/face/dummy-face.hpp"
@@ -37,8 +36,7 @@
 
 BOOST_AUTO_TEST_CASE(AddRemove)
 {
-  Forwarder forwarder;
-  FaceTable& faceTable = forwarder.getFaceTable();
+  FaceTable faceTable;
 
   std::vector<FaceId> addHistory;
   std::vector<FaceId> removeHistory;
@@ -86,8 +84,7 @@
 
 BOOST_AUTO_TEST_CASE(AddReserved)
 {
-  Forwarder forwarder;
-  FaceTable& faceTable = forwarder.getFaceTable();
+  FaceTable faceTable;
 
   shared_ptr<Face> face1 = make_shared<DummyFace>();
   BOOST_CHECK_EQUAL(face1->getId(), face::INVALID_FACEID);
@@ -98,8 +95,7 @@
 
 BOOST_AUTO_TEST_CASE(Enumerate)
 {
-  Forwarder forwarder;
-  FaceTable& faceTable = forwarder.getFaceTable();
+  FaceTable faceTable;
 
   shared_ptr<Face> face1 = make_shared<DummyFace>();
   shared_ptr<Face> face2 = make_shared<DummyFace>();
