diff --git a/helper/ndn-stack-helper.cpp b/helper/ndn-stack-helper.cpp
index a9dbfe7..b0f138c 100644
--- a/helper/ndn-stack-helper.cpp
+++ b/helper/ndn-stack-helper.cpp
@@ -149,12 +149,8 @@
   }
 
   Ptr<L3Protocol> ndn = m_ndnFactory.Create<L3Protocol>();
-
   ndn->getConfig().put("tables.cs_max_packets", (m_maxCsSize == 0) ? 1 : m_maxCsSize);
 
-  // NFD initialization
-  ndn->initialize();
-
   // Create and aggregate content store if NFD's contest store has been disabled
   if (m_maxCsSize == 0) {
     ndn->AggregateObject(m_contentStoreFactory.Create<ContentStore>());
diff --git a/model/ndn-l3-protocol.cpp b/model/ndn-l3-protocol.cpp
index 3cbda38..f8c037a 100644
--- a/model/ndn-l3-protocol.cpp
+++ b/model/ndn-l3-protocol.cpp
@@ -43,6 +43,7 @@
 #include "ns3/ndnSIM/NFD/daemon/mgmt/face-manager.hpp"
 #include "ns3/ndnSIM/NFD/daemon/mgmt/strategy-choice-manager.hpp"
 #include "ns3/ndnSIM/NFD/daemon/mgmt/status-server.hpp"
+#include "ns3/ndnSIM/NFD/rib/rib-manager.hpp"
 
 #include "ns3/ndnSIM/NFD/daemon/face/null-face.hpp"
 #include "ns3/ndnSIM/NFD/core/config-file.hpp"
@@ -160,6 +161,8 @@
   shared_ptr<nfd::FaceManager> m_faceManager;
   shared_ptr<nfd::StrategyChoiceManager> m_strategyChoiceManager;
   shared_ptr<nfd::StatusServer> m_statusServer;
+  shared_ptr<nfd::rib::RibManager> m_ribManager;
+  shared_ptr< ::ndn::Face> m_face;
 
   nfd::ConfigSection m_config;
 
@@ -183,6 +186,7 @@
   m_impl->m_forwarder = make_shared<nfd::Forwarder>();
 
   initializeManagement();
+  Simulator::ScheduleWithContext(m_node->GetId(), Seconds(0), &L3Protocol::initializeRibManager, this);
 
   m_impl->m_forwarder->getFaceTable().addReserved(make_shared<nfd::NullFace>(), nfd::FACEID_NULL);
 
@@ -262,6 +266,38 @@
   entry->addNextHop(m_impl->m_internalFace, 0);
 }
 
+void
+L3Protocol::initializeRibManager()
+{
+  using namespace nfd;
+
+  m_impl->m_face = make_shared< ::ndn::Face>();
+  m_impl->m_ribManager = make_shared<rib::RibManager>(*(m_impl->m_face),
+                                                      StackHelper::getKeyChain());
+
+  ConfigFile config([] (const std::string& filename, const std::string& sectionName,
+                        const ConfigSection& section, bool isDryRun) {
+      // Ignore "log" and sections belonging to NFD,
+      // but raise an error if we're missing a handler for a "rib" section.
+      if (sectionName != "rib" || sectionName == "log") {
+        // do nothing
+      }
+      else {
+        // missing NRD section
+        ConfigFile::throwErrorOnUnknownSection(filename, sectionName, section, isDryRun);
+      }
+    });
+
+  m_impl->m_ribManager->setConfigFile(config);
+
+  // apply config
+  config.parse(m_impl->m_config, false, "ndnSIM.conf");
+
+  m_impl->m_ribManager->registerWithNfd();
+
+  m_impl->m_ribManager->enableLocalControlHeader();
+}
+
 shared_ptr<nfd::Forwarder>
 L3Protocol::getForwarder()
 {
@@ -296,6 +332,8 @@
   if (m_node == nullptr) {
     m_node = GetObject<Node>();
     if (m_node != nullptr) {
+      initialize();
+
       NS_ASSERT(m_impl->m_forwarder != nullptr);
       m_impl->m_csFromNdnSim = GetObject<ContentStore>();
       if (m_impl->m_csFromNdnSim != nullptr) {
diff --git a/model/ndn-l3-protocol.hpp b/model/ndn-l3-protocol.hpp
index ea0052b..88b522e 100644
--- a/model/ndn-l3-protocol.hpp
+++ b/model/ndn-l3-protocol.hpp
@@ -90,13 +90,8 @@
    * \brief Default constructor. Creates an empty stack without forwarding strategy set
    */
   L3Protocol();
-  virtual ~L3Protocol();
 
-  /**
-   * \brief Initialize NFD instance
-   */
-  void
-  initialize();
+  virtual ~L3Protocol();
 
   /**
    * \brief Get smart pointer to nfd::Forwarder installed on the node
@@ -179,8 +174,14 @@
 
 private:
   void
+  initialize();
+
+  void
   initializeManagement();
 
+  void
+  initializeRibManager();
+
 private:
   class Impl;
   std::unique_ptr<Impl> m_impl;
diff --git a/tests/unit-tests/ndn-cxx/face.t.cpp b/tests/unit-tests/ndn-cxx/face.t.cpp
index d50f8a9..c78c8df 100644
--- a/tests/unit-tests/ndn-cxx/face.t.cpp
+++ b/tests/unit-tests/ndn-cxx/face.t.cpp
@@ -78,7 +78,6 @@
   }
 };
 
-BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(SetInterestFilter, 2);
 BOOST_AUTO_TEST_CASE(SetInterestFilter)
 {
   FactoryCallbackApp::Install(getNode("B"), [this] () -> shared_ptr<void> {
diff --git a/wscript b/wscript
index 494cd43..71f2c9a 100644
--- a/wscript
+++ b/wscript
@@ -109,7 +109,7 @@
                                   excl=['ndn-cxx/src/**/*-osx.cpp',
                                         'ndn-cxx/src/util/dummy-client-face.cpp'])
 
-    nfdSrc = bld.path.ant_glob(['%s/**/*.cpp' % dir for dir in ['NFD/core', 'NFD/daemon']],
+    nfdSrc = bld.path.ant_glob(['%s/**/*.cpp' % dir for dir in ['NFD/core', 'NFD/daemon', 'NFD/rib']],
                                excl=['NFD/core/network-interface.cpp',
                                      'NFD/daemon/main.cpp',
                                      'NFD/daemon/nfd.cpp',
@@ -118,14 +118,15 @@
                                      'NFD/daemon/face/tcp*',
                                      'NFD/daemon/face/udp*',
                                      'NFD/daemon/face/unix-stream*',
-                                     'NFD/daemon/face/websocket*'])
+                                     'NFD/daemon/face/websocket*',
+                                     'NFD/rib/nrd.cpp'])
 
     module = bld.create_ns3_module('ndnSIM', deps)
     module.module = 'ndnSIM'
     module.features += ' ns3fullmoduleheaders ndncxxheaders'
     module.use += ['version-ndn-cxx', 'version-NFD', 'BOOST', 'CRYPTOPP', 'SQLITE3', 'RT', 'PTHREAD']
-    module.includes = ['../..', '../../ns3/ndnSIM/NFD', './NFD/core', './NFD/daemon', '../../ns3/ndnSIM', '../../ns3/ndnSIM/ndn-cxx']
-    module.export_includes = ['../../ns3/ndnSIM/NFD', './NFD/core', './NFD/daemon', '../../ns3/ndnSIM']
+    module.includes = ['../..', '../../ns3/ndnSIM/NFD', './NFD/core', './NFD/daemon', './NFD/rib', '../../ns3/ndnSIM', '../../ns3/ndnSIM/ndn-cxx']
+    module.export_includes = ['../../ns3/ndnSIM/NFD', './NFD/core', './NFD/daemon', './NFD/rib', '../../ns3/ndnSIM']
 
     headers = bld(features='ns3header')
     headers.module = 'ndnSIM'
@@ -139,7 +140,7 @@
     module.source = bld.path.ant_glob(['%s/**/*.cpp' % dir for dir in module_dirs],
                                       excl=['model/ip-faces/*']) + ndnCxxSrc + nfdSrc
 
-    module_dirs = ['NFD/core', 'NFD/daemon', 'apps', 'helper', 'model', 'utils']
+    module_dirs = ['NFD/core', 'NFD/daemon', 'NFD/rib', 'apps', 'helper', 'model', 'utils']
     module.full_headers = bld.path.ant_glob(['%s/**/*.hpp' % dir for dir in module_dirs])
     module.full_headers += bld.path.ant_glob('NFD/common.hpp')
 
