diff --git a/daemon/main.cpp b/daemon/main.cpp
index 2dd09e8..0701ff8 100644
--- a/daemon/main.cpp
+++ b/daemon/main.cpp
@@ -24,7 +24,7 @@
  */
 
 #include "nfd.hpp"
-#include "rib/nrd.hpp"
+#include "rib/service.hpp"
 
 #include "version.hpp"
 #include "core/global-io.hpp"
@@ -120,30 +120,30 @@
     std::atomic_int retval(0);
 
     boost::asio::io_service* const mainIo = &getGlobalIoService();
-    boost::asio::io_service* nrdIo = nullptr;
+    boost::asio::io_service* ribIo = nullptr;
 
     // Mutex and conditional variable to implement synchronization between main and RIB manager
     // threads:
-    // - to block main thread until RIB manager thread starts and initializes nrdIo (to allow
+    // - to block main thread until RIB manager thread starts and initializes ribIo (to allow
     //   stopping it later)
     std::mutex m;
     std::condition_variable cv;
 
     std::string configFile = this->m_configFile; // c++11 lambda cannot capture member variables
-    boost::thread nrdThread([configFile, &retval, &nrdIo, mainIo, &cv, &m] {
+    boost::thread ribThread([configFile, &retval, &ribIo, mainIo, &cv, &m] {
         {
           std::lock_guard<std::mutex> lock(m);
-          nrdIo = &getGlobalIoService();
-          BOOST_ASSERT(nrdIo != mainIo);
+          ribIo = &getGlobalIoService();
+          BOOST_ASSERT(ribIo != mainIo);
         }
-        cv.notify_all(); // notify that nrdIo has been assigned
+        cv.notify_all(); // notify that ribIo has been assigned
 
         try {
-          ndn::KeyChain nrdKeyChain;
+          ndn::KeyChain ribKeyChain;
           // must be created inside a separate thread
-          rib::Nrd nrd(configFile, nrdKeyChain);
-          nrd.initialize();
-          getGlobalIoService().run(); // nrdIo is not thread-safe to use here
+          rib::Service ribService(configFile, ribKeyChain);
+          ribService.initialize();
+          getGlobalIoService().run(); // ribIo is not thread-safe to use here
         }
         catch (const std::exception& e) {
           NFD_LOG_FATAL(e.what());
@@ -153,15 +153,15 @@
 
         {
           std::lock_guard<std::mutex> lock(m);
-          nrdIo = nullptr;
+          ribIo = nullptr;
         }
       });
 
     {
-      // Wait to guarantee that nrdIo is properly initialized, so it can be used to terminate
+      // Wait to guarantee that ribIo is properly initialized, so it can be used to terminate
       // RIB manager thread.
       std::unique_lock<std::mutex> lock(m);
-      cv.wait(lock, [&nrdIo] { return nrdIo != nullptr; });
+      cv.wait(lock, [&ribIo] { return ribIo != nullptr; });
     }
 
     try {
@@ -177,14 +177,14 @@
     }
 
     {
-      // nrdIo is guaranteed to be alive at this point
+      // ribIo is guaranteed to be alive at this point
       std::lock_guard<std::mutex> lock(m);
-      if (nrdIo != nullptr) {
-        nrdIo->stop();
-        nrdIo = nullptr;
+      if (ribIo != nullptr) {
+        ribIo->stop();
+        ribIo = nullptr;
       }
     }
-    nrdThread.join();
+    ribThread.join();
 
     return retval;
   }
diff --git a/rib/rib-manager.cpp b/rib/rib-manager.cpp
index fedfd8a..e581095 100644
--- a/rib/rib-manager.cpp
+++ b/rib/rib-manager.cpp
@@ -164,8 +164,8 @@
      ControlParameters()
        .setName(Name(topPrefix).append(MGMT_MODULE_NAME))
        .setFaceId(0),
-     bind(&RibManager::onNrdCommandPrefixAddNextHopSuccess, this, cref(topPrefix), _1),
-     bind(&RibManager::onNrdCommandPrefixAddNextHopError, this, cref(topPrefix), _2));
+     bind(&RibManager::onCommandPrefixAddNextHopSuccess, this, cref(topPrefix), _1),
+     bind(&RibManager::onCommandPrefixAddNextHopError, this, cref(topPrefix), _2));
 
   // add top prefix to the dispatcher
   m_addTopPrefix(topPrefix);
@@ -216,8 +216,8 @@
         .setRoute(route);
 
   m_rib.beginApplyUpdate(update,
-                                bind(&RibManager::onRibUpdateSuccess, this, update),
-                                bind(&RibManager::onRibUpdateFailure, this, update, _1, _2));
+                         bind(&RibManager::onRibUpdateSuccess, this, update),
+                         bind(&RibManager::onRibUpdateFailure, this, update, _1, _2));
 
   m_registeredFaces.insert(route.faceId);
 }
@@ -245,8 +245,8 @@
         .setRoute(route);
 
   m_rib.beginApplyUpdate(update,
-                                bind(&RibManager::onRibUpdateSuccess, this, update),
-                                bind(&RibManager::onRibUpdateFailure, this, update, _1, _2));
+                         bind(&RibManager::onRibUpdateSuccess, this, update),
+                         bind(&RibManager::onRibUpdateFailure, this, update, _1, _2));
 }
 
 void
@@ -425,8 +425,8 @@
 }
 
 void
-RibManager::onNrdCommandPrefixAddNextHopSuccess(const Name& prefix,
-                                                const ndn::nfd::ControlParameters& result)
+RibManager::onCommandPrefixAddNextHopSuccess(const Name& prefix,
+                                             const ndn::nfd::ControlParameters& result)
 {
   NFD_LOG_DEBUG("Successfully registered " + prefix.toUri() + " with NFD");
 
@@ -443,7 +443,7 @@
 }
 
 void
-RibManager::onNrdCommandPrefixAddNextHopError(const Name& name, const std::string& msg)
+RibManager::onCommandPrefixAddNextHopError(const Name& name, const std::string& msg)
 {
   BOOST_THROW_EXCEPTION(Error("Error in setting interest filter (" + name.toUri() + "): " + msg));
 }
diff --git a/rib/rib-manager.hpp b/rib/rib-manager.hpp
index 7c7ff00..55ee394 100644
--- a/rib/rib-manager.hpp
+++ b/rib/rib-manager.hpp
@@ -165,11 +165,11 @@
 
 private:
   void
-  onNrdCommandPrefixAddNextHopSuccess(const Name& prefix,
-                                      const ndn::nfd::ControlParameters& result);
+  onCommandPrefixAddNextHopSuccess(const Name& prefix,
+                                   const ndn::nfd::ControlParameters& result);
 
   void
-  onNrdCommandPrefixAddNextHopError(const Name& name, const std::string& msg);
+  onCommandPrefixAddNextHopError(const Name& name, const std::string& msg);
 
   void
   onControlHeaderSuccess();
diff --git a/rib/nrd.cpp b/rib/service.cpp
similarity index 93%
rename from rib/nrd.cpp
rename to rib/service.cpp
index d723a3f..3b3798f 100644
--- a/rib/nrd.cpp
+++ b/rib/service.cpp
@@ -23,7 +23,7 @@
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "nrd.hpp"
+#include "service.hpp"
 
 #include "rib-manager.hpp"
 #include "core/config-file.hpp"
@@ -40,19 +40,19 @@
 
 static const std::string INTERNAL_CONFIG = "internal://nfd.conf";
 
-Nrd::Nrd(const std::string& configFile, ndn::KeyChain& keyChain)
+Service::Service(const std::string& configFile, ndn::KeyChain& keyChain)
   : m_configFile(configFile)
   , m_keyChain(keyChain)
 {
 }
 
-Nrd::Nrd(const ConfigSection& config, ndn::KeyChain& keyChain)
+Service::Service(const ConfigSection& config, ndn::KeyChain& keyChain)
   : m_configSection(config)
   , m_keyChain(keyChain)
 {
 }
 
-Nrd::~Nrd()
+Service::~Service()
 {
   // It is necessary to explicitly define the destructor, because some member variables
   // (e.g., unique_ptr<RibManager>) are forward-declared, but implicitly declared destructor
@@ -60,7 +60,7 @@
 }
 
 void
-Nrd::initialize()
+Service::initialize()
 {
   m_face.reset(new ndn::Face(getLocalNfdTransport(), getGlobalIoService(), m_keyChain));
   m_dispatcher.reset(new ndn::mgmt::Dispatcher(*m_face, m_keyChain));
@@ -77,7 +77,7 @@
         // do nothing
       }
       else {
-        // missing NRD section
+        // missing "rib" section handler
         ConfigFile::throwErrorOnUnknownSection(filename, sectionName, section, isDryRun);
       }
     });
@@ -98,7 +98,7 @@
 }
 
 void
-Nrd::initializeLogging()
+Service::initializeLogging()
 {
   ConfigFile config(&ConfigFile::ignoreUnknownSection);
   LoggerFactory::getInstance().setConfigFile(config);
@@ -114,7 +114,7 @@
 }
 
 shared_ptr<ndn::Transport>
-Nrd::getLocalNfdTransport()
+Service::getLocalNfdTransport()
 {
   ConfigSection config;
 
diff --git a/rib/nrd.hpp b/rib/service.hpp
similarity index 69%
rename from rib/nrd.hpp
rename to rib/service.hpp
index 0d8743d..5cb60d9 100644
--- a/rib/nrd.hpp
+++ b/rib/service.hpp
@@ -23,8 +23,8 @@
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef NFD_RIB_NRD_HPP
-#define NFD_RIB_NRD_HPP
+#ifndef NFD_RIB_SERVICE_HPP
+#define NFD_RIB_SERVICE_HPP
 
 #include "common.hpp"
 #include "core/config-file.hpp"
@@ -40,10 +40,9 @@
 class RibManager;
 
 /**
- * \brief Class representing NRD (NFD RIB Manager) instance
- * This class can be used to initialize all components of NRD
+ * \brief initializes and executes NFD-RIB service thread
  */
-class Nrd : noncopyable
+class Service : noncopyable
 {
 public:
   class Error : public std::runtime_error
@@ -57,27 +56,31 @@
   };
 
   /**
-   * \brief Create NRD instance using absolute or relative path to \p configFile
+   * \brief create NFD-RIB service
+   * \param configFile absolute or relative path of configuration file
+   * \param keyChain the KeyChain
    */
-  Nrd(const std::string& configFile, ndn::KeyChain& keyChain);
+  Service(const std::string& configFile, ndn::KeyChain& keyChain);
 
   /**
-   * \brief Create NRD instance using a parsed ConfigSection \p config
-   * This version of the constructor is more appropriate for integrated environments,
-   * such as NS-3 or android.
-   * \note When using this version of the constructor, error messages will include
-   *      "internal://nfd.conf" when referring to configuration errors.
+   * \brief create NFD-RIB service
+   * \param config parsed configuration section
+   * \param keyChain the KeyChain
+   * \note This constructor overload is more appropriate for integrated environments,
+   *       such as NS-3 or android. Error messages related to configuration file
+   *       will use "internal://nfd.conf" as configuration filename.
    */
-  Nrd(const ConfigSection& config, ndn::KeyChain& keyChain);
+  Service(const ConfigSection& config, ndn::KeyChain& keyChain);
 
   /**
    * \brief Destructor
    */
-  ~Nrd();
+  ~Service();
 
   /**
-   * \brief Perform initialization of NFD instance
-   * After initialization, NFD instance can be started by invoking run on globalIoService
+   * \brief Perform initialization of NFD-RIB instance
+   *
+   * After initialization, NFD-RIB instance can be started by running the global io_service
    */
   void
   initialize();
@@ -88,7 +91,7 @@
 
   /**
    * \brief Look into the config file and construct appropriate transport to communicate with NFD
-   * If NRD instance was initialized with config file, INFO format is assumed
+   * If NFD-RIB instance was initialized with config file, INFO format is assumed
    */
   shared_ptr<ndn::Transport>
   getLocalNfdTransport();
@@ -106,4 +109,4 @@
 } // namespace rib
 } // namespace nfd
 
-#endif // NFD_RIB_NRD_HPP
+#endif // NFD_RIB_SERVICE_HPP
diff --git a/tools/nrd.sh b/tools/nrd.sh
deleted file mode 100644
index 52e7112..0000000
--- a/tools/nrd.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!@BASH@
-
-echo "NDN RIB Management Daemon does not need to be started separately anymore"
-sleep 10
-exit 0
