diff --git a/daemon/face/face-system.cpp b/daemon/face/face-system.cpp
index cbe02ed..6288ac0 100644
--- a/daemon/face/face-system.cpp
+++ b/daemon/face/face-system.cpp
@@ -51,11 +51,6 @@
   return {addFace, m_netmon};
 }
 
-FaceSystem::FaceSystem(FaceTable& faceTable)
-  : FaceSystem(faceTable, make_shared<ndn::net::NetworkMonitor>(getGlobalIoService()))
-{
-}
-
 FaceSystem::~FaceSystem() = default;
 
 std::set<const ProtocolFactory*>
diff --git a/daemon/face/face-system.hpp b/daemon/face/face-system.hpp
index b61e7a8..5ea428f 100644
--- a/daemon/face/face-system.hpp
+++ b/daemon/face/face-system.hpp
@@ -52,10 +52,6 @@
 public:
   FaceSystem(FaceTable& faceTable, shared_ptr<ndn::net::NetworkMonitor> netmon);
 
-  DEPRECATED(
-  explicit
-  FaceSystem(FaceTable& faceTable));
-
   ~FaceSystem();
 
   /** \return ProtocolFactory objects owned by the FaceSystem
diff --git a/daemon/mgmt/face-manager.hpp b/daemon/mgmt/face-manager.hpp
index bee95a3..e50b858 100644
--- a/daemon/mgmt/face-manager.hpp
+++ b/daemon/mgmt/face-manager.hpp
@@ -120,9 +120,11 @@
   void
   connectFaceStateChangeSignal(const Face& face);
 
-PUBLIC_WITH_TESTS_ELSE_PRIVATE:
+private:
   FaceSystem& m_faceSystem;
   FaceTable& m_faceTable;
+
+PUBLIC_WITH_TESTS_ELSE_PRIVATE:
   std::map<FaceId, signal::ScopedConnection> m_faceStateChangeConn;
 
 private:
diff --git a/docs/doxygen.conf.in b/docs/doxygen.conf.in
index b213a59..2087935 100644
--- a/docs/doxygen.conf.in
+++ b/docs/doxygen.conf.in
@@ -2060,8 +2060,7 @@
                          PUBLIC_WITH_TESTS_ELSE_PROTECTED=protected \
                          PUBLIC_WITH_TESTS_ELSE_PRIVATE=private \
                          PROTECTED_WITH_TESTS_ELSE_PRIVATE=private \
-                         FINAL_UNLESS_WITH_TESTS=final \
-                         DEPRECATED(x)=x
+                         FINAL_UNLESS_WITH_TESTS=final
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
 # tag can be used to specify a list of macro names that should be expanded. The
diff --git a/tests/daemon/mgmt/face-manager-command-fixture.cpp b/tests/daemon/mgmt/face-manager-command-fixture.cpp
index 8eecf9e..4053682 100644
--- a/tests/daemon/mgmt/face-manager-command-fixture.cpp
+++ b/tests/daemon/mgmt/face-manager-command-fixture.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2014-2017,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
@@ -25,6 +25,8 @@
 
 #include "face-manager-command-fixture.hpp"
 
+#include <ndn-cxx/net/network-monitor-stub.hpp>
+
 namespace nfd {
 namespace tests {
 
@@ -32,7 +34,7 @@
   : face(getGlobalIoService(), keyChain, {true, true})
   , dispatcher(face, keyChain, ndn::security::SigningInfo())
   , authenticator(CommandAuthenticator::create())
-  , faceSystem(faceTable)
+  , faceSystem(faceTable, make_shared<ndn::net::NetworkMonitorStub>(0))
   , manager(faceSystem, dispatcher, *authenticator)
 {
   dispatcher.addTopPrefix("/localhost/nfd");
diff --git a/tests/daemon/mgmt/face-manager-create-face.t.cpp b/tests/daemon/mgmt/face-manager-create-face.t.cpp
index 4431256..4274efa 100644
--- a/tests/daemon/mgmt/face-manager-create-face.t.cpp
+++ b/tests/daemon/mgmt/face-manager-create-face.t.cpp
@@ -313,7 +313,7 @@
       FaceUri uri;
       if (uri.parse(FaceType::getParameters().getUri())) {
         // ensure face not created
-        auto& faceTable = this->node1.manager.m_faceTable;
+        const auto& faceTable = this->node1.faceTable;
         BOOST_CHECK(std::none_of(faceTable.begin(), faceTable.end(), [uri] (Face& face) {
           return face.getRemoteUri() == uri;
         }));
diff --git a/tests/daemon/mgmt/face-manager.t.cpp b/tests/daemon/mgmt/face-manager.t.cpp
index 03bdd78..7e294d4 100644
--- a/tests/daemon/mgmt/face-manager.t.cpp
+++ b/tests/daemon/mgmt/face-manager.t.cpp
@@ -44,7 +44,7 @@
 public:
   FaceManagerFixture()
     : m_faceTable(m_forwarder.getFaceTable())
-    , m_faceSystem(m_faceTable)
+    , m_faceSystem(m_faceTable, make_shared<ndn::net::NetworkMonitorStub>(0))
     , m_manager(m_faceSystem, m_dispatcher, *m_authenticator)
   {
     setTopPrefix();
@@ -295,9 +295,9 @@
 
 BOOST_AUTO_TEST_CASE(ChannelDataset)
 {
-  m_manager.m_faceSystem.m_factories["test"] =
+  m_faceSystem.m_factories["test"] =
     make_unique<TestProtocolFactory>(m_faceSystem.makePFCtorParams());
-  auto factory = static_cast<TestProtocolFactory*>(m_manager.m_faceSystem.getFactoryById("test"));
+  auto factory = static_cast<TestProtocolFactory*>(m_faceSystem.getFactoryById("test"));
 
   const size_t nEntries = 404;
   std::map<std::string, shared_ptr<TestChannel>> addedChannels;
