diff --git a/rib/fib-updater.cpp b/rib/fib-updater.cpp
index 1d6328c..574b5f9 100644
--- a/rib/fib-updater.cpp
+++ b/rib/fib-updater.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,
@@ -305,8 +305,7 @@
     }
   }
   else {
-    BOOST_THROW_EXCEPTION(Error("Non-recoverable error: " + response.getText() +
-                                " code: " + to_string(code)));
+    NDN_THROW(Error("Non-recoverable error: " + response.getText() + " code: " + to_string(code)));
   }
 }
 
diff --git a/rib/rib-manager.cpp b/rib/rib-manager.cpp
index d09420e..4477ebc 100644
--- a/rib/rib-manager.cpp
+++ b/rib/rib-manager.cpp
@@ -108,12 +108,12 @@
 {
   m_nfdController.start<ndn::nfd::FaceUpdateCommand>(
     ControlParameters().setFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED, true),
-    [] (const ControlParameters& res) {
+    [] (const ControlParameters&) {
       NFD_LOG_DEBUG("Local fields enabled");
     },
     [] (const ControlResponse& res) {
-      BOOST_THROW_EXCEPTION(Error("Couldn't enable local fields (" + to_string(res.getCode()) +
-                                  " " + res.getText() + ")"));
+      NDN_THROW(Error("Couldn't enable local fields (" + to_string(res.getCode()) +
+                      " " + res.getText() + ")"));
     });
 }
 
@@ -205,8 +205,8 @@
       m_registeredFaces.insert(route.faceId);
     },
     [=] (const ControlResponse& res) {
-      BOOST_THROW_EXCEPTION(Error("Cannot add FIB entry " + topPrefix.toUri() + " (" +
-                                  to_string(res.getCode()) + " " + res.getText() + ")"));
+      NDN_THROW(Error("Cannot add FIB entry " + topPrefix.toUri() + " (" +
+                      to_string(res.getCode()) + " " + res.getText() + ")"));
     });
 
   // add top prefix to the dispatcher without prefix registration
diff --git a/rib/service.cpp b/rib/service.cpp
index a91a93e..35c092d 100644
--- a/rib/service.cpp
+++ b/rib/service.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,
@@ -82,7 +82,7 @@
     return make_shared<ndn::TcpTransport>("localhost", port);
   }
   else {
-    BOOST_THROW_EXCEPTION(ConfigFile::Error("No transport is available to communicate with NFD"));
+    NDN_THROW(ConfigFile::Error("No transport is available to communicate with NFD"));
   }
 }
 
@@ -114,10 +114,10 @@
   , m_ribManager(m_rib, m_face, m_keyChain, m_nfdController, m_dispatcher, m_scheduler)
 {
   if (s_instance != nullptr) {
-    BOOST_THROW_EXCEPTION(std::logic_error("RIB service cannot be instantiated more than once"));
+    NDN_THROW(std::logic_error("RIB service cannot be instantiated more than once"));
   }
   if (&getGlobalIoService() != &getRibIoService()) {
-    BOOST_THROW_EXCEPTION(std::logic_error("RIB service must run on RIB thread"));
+    NDN_THROW(std::logic_error("RIB service must run on RIB thread"));
   }
   s_instance = this;
 
@@ -139,10 +139,10 @@
 Service::get()
 {
   if (s_instance == nullptr) {
-    BOOST_THROW_EXCEPTION(std::logic_error("RIB service is not instantiated"));
+    NDN_THROW(std::logic_error("RIB service is not instantiated"));
   }
   if (&getGlobalIoService() != &getRibIoService()) {
-    BOOST_THROW_EXCEPTION(std::logic_error("Must get RIB service on RIB thread"));
+    NDN_THROW(std::logic_error("Must get RIB service on RIB thread"));
   }
   return *s_instance;
 }
@@ -175,7 +175,7 @@
       ConfigFile::parseYesNo(item, CFG_SECTION + "." + CFG_READVERTISE_NLSR);
     }
     else {
-      BOOST_THROW_EXCEPTION(ConfigFile::Error("Unrecognized option " + CFG_SECTION + "." + key));
+      NDN_THROW(ConfigFile::Error("Unrecognized option " + CFG_SECTION + "." + key));
     }
   }
 }
@@ -228,7 +228,7 @@
       wantReadvertiseNlsr = ConfigFile::parseYesNo(item, CFG_SECTION + "." + CFG_READVERTISE_NLSR);
     }
     else {
-      BOOST_THROW_EXCEPTION(ConfigFile::Error("Unrecognized option " + CFG_SECTION + "." + key));
+      NDN_THROW(ConfigFile::Error("Unrecognized option " + CFG_SECTION + "." + key));
     }
   }
 
