diff --git a/daemon/fw/self-learning-strategy.cpp b/daemon/fw/self-learning-strategy.cpp
index 42f0f22..92f9ae3 100644
--- a/daemon/fw/self-learning-strategy.cpp
+++ b/daemon/fw/self-learning-strategy.cpp
@@ -227,7 +227,7 @@
 {
   runOnRibIoService([pitEntryWeak = weak_ptr<pit::Entry>{pitEntry}, inFaceId = inFace.getId(), data, pa] {
     rib::Service::get().getRibManager().slAnnounce(pa, inFaceId, ROUTE_RENEW_LIFETIME,
-      [] (rib::RibManager::SlAnnounceResult res) {
+      [] (RibManager::SlAnnounceResult res) {
         NFD_LOG_DEBUG("Add route via PrefixAnnouncement with result=" << res);
       });
   });
@@ -239,7 +239,7 @@
   // renew route with PA or ignore PA (if route has no PA)
   runOnRibIoService([name, inFaceId, maxLifetime] {
     rib::Service::get().getRibManager().slRenew(name, inFaceId, maxLifetime,
-      [] (rib::RibManager::SlAnnounceResult res) {
+      [] (RibManager::SlAnnounceResult res) {
         NFD_LOG_DEBUG("Renew route with result=" << res);
       });
   });
diff --git a/daemon/rib/rib-manager.cpp b/daemon/mgmt/rib-manager.cpp
similarity index 98%
rename from daemon/rib/rib-manager.cpp
rename to daemon/mgmt/rib-manager.cpp
index 4477ebc..0a73db2 100644
--- a/daemon/rib/rib-manager.cpp
+++ b/daemon/mgmt/rib-manager.cpp
@@ -36,7 +36,9 @@
 #include <ndn-cxx/mgmt/nfd/rib-entry.hpp>
 
 namespace nfd {
-namespace rib {
+
+using rib::RibUpdate;
+using rib::Route;
 
 NFD_LOG_INIT(RibManager);
 
@@ -46,7 +48,7 @@
 
 const Name RibManager::LOCALHOP_TOP_PREFIX = "/localhop/nfd";
 
-RibManager::RibManager(Rib& rib, ndn::Face& face, ndn::KeyChain& keyChain,
+RibManager::RibManager(rib::Rib& rib, ndn::Face& face, ndn::KeyChain& keyChain,
                        ndn::nfd::Controller& nfdController, Dispatcher& dispatcher,
                        ndn::util::Scheduler& scheduler)
   : ManagerBase(dispatcher, MGMT_MODULE_NAME)
@@ -267,7 +269,7 @@
 {
   auto now = time::steady_clock::now();
   for (const auto& kv : m_rib) {
-    const RibEntry& entry = *kv.second;
+    const rib::RibEntry& entry = *kv.second;
     ndn::nfd::RibEntry item;
     item.setName(entry.getName());
     for (const Route& route : entry.getRoutes()) {
@@ -414,7 +416,7 @@
 void
 RibManager::slFindAnn(const Name& name, const SlFindAnnCallback& cb) const
 {
-  shared_ptr<RibEntry> entry;
+  shared_ptr<rib::RibEntry> entry;
   auto exactMatch = m_rib.find(name);
   if (exactMatch != m_rib.end()) {
     entry = exactMatch->second;
@@ -496,5 +498,4 @@
   }
 }
 
-} // namespace rib
 } // namespace nfd
diff --git a/daemon/rib/rib-manager.hpp b/daemon/mgmt/rib-manager.hpp
similarity index 91%
rename from daemon/rib/rib-manager.hpp
rename to daemon/mgmt/rib-manager.hpp
index 503dc2f..876ed75 100644
--- a/daemon/rib/rib-manager.hpp
+++ b/daemon/mgmt/rib-manager.hpp
@@ -23,28 +23,26 @@
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef NFD_DAEMON_RIB_RIB_MANAGER_HPP
-#define NFD_DAEMON_RIB_RIB_MANAGER_HPP
-
-#include "fib-updater.hpp"
-#include "rib.hpp"
+#ifndef NFD_DAEMON_MGMT_RIB_MANAGER_HPP
+#define NFD_DAEMON_MGMT_RIB_MANAGER_HPP
 
 #include "core/config-file.hpp"
 #include "core/manager-base.hpp"
+#include "rib/rib.hpp"
 
-#include <ndn-cxx/security/validator-config.hpp>
 #include <ndn-cxx/mgmt/nfd/controller.hpp>
 #include <ndn-cxx/mgmt/nfd/face-event-notification.hpp>
 #include <ndn-cxx/mgmt/nfd/face-monitor.hpp>
+#include <ndn-cxx/security/validator-config.hpp>
 #include <ndn-cxx/util/scheduler.hpp>
 
 namespace nfd {
-namespace rib {
 
 /**
- * @brief Serve commands and datasets in NFD RIB management protocol.
+ * @brief Serve commands and datasets of NFD RIB management protocol.
+ * @sa https://redmine.named-data.net/projects/nfd/wiki/RibMgmt
  */
-class RibManager : public nfd::ManagerBase
+class RibManager : public ManagerBase
 {
 public:
   class Error : public std::runtime_error
@@ -53,8 +51,9 @@
     using std::runtime_error::runtime_error;
   };
 
-  RibManager(Rib& rib, ndn::Face& face, ndn::KeyChain& keyChain, ndn::nfd::Controller& nfdController,
-             Dispatcher& dispatcher, ndn::util::Scheduler& scheduler);
+  RibManager(rib::Rib& rib, ndn::Face& face, ndn::KeyChain& keyChain,
+             ndn::nfd::Controller& nfdController, Dispatcher& dispatcher,
+             ndn::util::Scheduler& scheduler);
 
   /**
    * @brief Apply localhost_security configuration.
@@ -174,7 +173,7 @@
    *  \param done completion callback
    */
   void
-  beginAddRoute(const Name& name, Route route, optional<time::nanoseconds> expires,
+  beginAddRoute(const Name& name, rib::Route route, optional<time::nanoseconds> expires,
                 const std::function<void(RibUpdateResult)>& done);
 
   /** \brief Start removing a route from RIB and FIB.
@@ -183,11 +182,12 @@
    *  \param done completion callback
    */
   void
-  beginRemoveRoute(const Name& name, const Route& route,
+  beginRemoveRoute(const Name& name, const rib::Route& route,
                    const std::function<void(RibUpdateResult)>& done);
 
   void
-  beginRibUpdate(const RibUpdate& update, const std::function<void(RibUpdateResult)>& done);
+  beginRibUpdate(const rib::RibUpdate& update,
+                 const std::function<void(RibUpdateResult)>& done);
 
 private: // management Dispatcher related
   void
@@ -243,7 +243,7 @@
   static const Name LOCALHOP_TOP_PREFIX;
 
 private:
-  Rib& m_rib;
+  rib::Rib& m_rib;
   ndn::KeyChain& m_keyChain;
   ndn::nfd::Controller& m_nfdController;
   Dispatcher& m_dispatcher;
@@ -262,7 +262,6 @@
 std::ostream&
 operator<<(std::ostream& os, RibManager::SlAnnounceResult res);
 
-} // namespace rib
 } // namespace nfd
 
-#endif // NFD_DAEMON_RIB_RIB_MANAGER_HPP
+#endif // NFD_DAEMON_MGMT_RIB_MANAGER_HPP
diff --git a/daemon/rib/readvertise/host-to-gateway-readvertise-policy.cpp b/daemon/rib/readvertise/host-to-gateway-readvertise-policy.cpp
index 2d508f8..7810619 100644
--- a/daemon/rib/readvertise/host-to-gateway-readvertise-policy.cpp
+++ b/daemon/rib/readvertise/host-to-gateway-readvertise-policy.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2018,  Regents of the University of California,
+ * Copyright (c) 2014-2019,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -25,7 +25,7 @@
 
 #include "host-to-gateway-readvertise-policy.hpp"
 #include "core/scope-prefix.hpp"
-#include "rib/rib-manager.hpp"
+#include "mgmt/rib-manager.hpp"
 
 #include <ndn-cxx/security/pib/identity.hpp>
 #include <ndn-cxx/security/signing-helpers.hpp>
diff --git a/daemon/rib/service.hpp b/daemon/rib/service.hpp
index 0d6a71a..fe9b110 100644
--- a/daemon/rib/service.hpp
+++ b/daemon/rib/service.hpp
@@ -26,9 +26,10 @@
 #ifndef NFD_DAEMON_RIB_SERVICE_HPP
 #define NFD_DAEMON_RIB_SERVICE_HPP
 
-#include "rib-manager.hpp"
-
 #include "core/config-file.hpp"
+#include "mgmt/rib-manager.hpp"
+#include "rib/fib-updater.hpp"
+#include "rib/rib.hpp"
 
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/mgmt/dispatcher.hpp>
