diff --git a/src/update/manager-base.cpp b/src/update/manager-base.cpp
index 88c61da..e066bfc 100644
--- a/src/update/manager-base.cpp
+++ b/src/update/manager-base.cpp
@@ -34,12 +34,6 @@
 {
 }
 
-ndn::PartialName
-ManagerBase::makeRelPrefix(const std::string& verb) const
-{
-  return ndn::PartialName(m_module).append(verb);
-}
-
 CommandManagerBase::CommandManagerBase(ndn::mgmt::Dispatcher& dispatcher,
                                       NamePrefixList& namePrefixList,
                                       Lsdb& lsdb,
@@ -51,16 +45,14 @@
 }
 
 void
-CommandManagerBase::advertiseAndInsertPrefix(const ndn::Name& prefix,
-                                             const ndn::Interest& interest,
-                                             const ndn::mgmt::ControlParametersBase& parameters,
+CommandManagerBase::advertiseAndInsertPrefix(const ndn::mgmt::ControlParametersBase& parameters,
                                              const ndn::mgmt::CommandContinuation& done)
 {
   const auto& castParams = static_cast<const ndn::nfd::ControlParameters&>(parameters);
 
   // Only build a Name LSA if the added name is new
   if (m_namePrefixList.insert(castParams.getName())) {
-    NLSR_LOG_INFO("Advertising name: " << castParams.getName() << "\n");
+    NLSR_LOG_INFO("Advertising name: " << castParams.getName());
     m_lsdb.buildAndInstallOwnNameLsa();
     if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
       NLSR_LOG_INFO("Saving name to the configuration file ");
@@ -77,7 +69,7 @@
   else {
     if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
       // Save an already advertised prefix
-      NLSR_LOG_INFO("Saving an already advertised name: " << castParams.getName() << "\n");
+      NLSR_LOG_INFO("Saving an already advertised name: " << castParams.getName());
       if (afterAdvertise(castParams.getName()) == true) {
         return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
       }
@@ -92,16 +84,14 @@
 }
 
 void
-CommandManagerBase::withdrawAndRemovePrefix(const ndn::Name& prefix,
-                                            const ndn::Interest& interest,
-                                            const ndn::mgmt::ControlParametersBase& parameters,
+CommandManagerBase::withdrawAndRemovePrefix(const ndn::mgmt::ControlParametersBase& parameters,
                                             const ndn::mgmt::CommandContinuation& done)
 {
   const auto& castParams = static_cast<const ndn::nfd::ControlParameters&>(parameters);
 
   // Only build a Name LSA if the added name is new
   if (m_namePrefixList.erase(castParams.getName())) {
-    NLSR_LOG_INFO("Withdrawing/Removing name: " << castParams.getName() << "\n");
+    NLSR_LOG_INFO("Withdrawing/Removing name: " << castParams.getName());
     m_lsdb.buildAndInstallOwnNameLsa();
     if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
       if (afterWithdraw(castParams.getName()) == true) {
@@ -117,7 +107,7 @@
   else {
     if (castParams.hasFlags() && castParams.getFlags() == PREFIX_FLAG) {
       // Delete an already withdrawn prefix
-      NLSR_LOG_INFO("Deleting an already withdrawn name: " << castParams.getName() << "\n");
+      NLSR_LOG_INFO("Deleting an already withdrawn name: " << castParams.getName());
       if (afterWithdraw(castParams.getName()) == true) {
         return done(ndn::nfd::ControlResponse(205, "OK").setBody(parameters.wireEncode()));
       }
diff --git a/src/update/manager-base.hpp b/src/update/manager-base.hpp
index 12b6f3c..7616ef6 100644
--- a/src/update/manager-base.hpp
+++ b/src/update/manager-base.hpp
@@ -24,7 +24,6 @@
 
 #include "lsdb.hpp"
 #include "name-prefix-list.hpp"
-#include "test-access-control.hpp"
 
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/interest.hpp>
@@ -34,7 +33,6 @@
 #include <ndn-cxx/mgmt/nfd/control-response.hpp>
 
 #include <boost/noncopyable.hpp>
-#include <iostream>
 #include <optional>
 
 namespace nlsr {
@@ -57,31 +55,6 @@
 protected:
   ManagerBase(ndn::mgmt::Dispatcher& m_dispatcher, const std::string& module);
 
-  /*! \brief Generate the relative prefix for a handler by appending the verb name to the module name.
-   */
-  ndn::PartialName
-  makeRelPrefix(const std::string& verb) const;
-
-PUBLIC_WITH_TESTS_ELSE_PROTECTED:
-  /*! \brief Validate the parameters for a given command.
-   */
-  template<typename Command>
-  static bool
-  validateParameters(const ndn::mgmt::ControlParametersBase& parameters)
-  {
-    try {
-      Command::validateRequest(dynamic_cast<const ndn::nfd::ControlParameters&>(parameters));
-    }
-    catch (const ndn::nfd::ArgumentError&) {
-      throw;
-    }
-    catch (const std::exception& e) {
-      std::cerr << e.what() << std::endl;
-      return false;
-    }
-    return true;
-  }
-
 protected:
   ndn::mgmt::Dispatcher& m_dispatcher;
 
@@ -100,26 +73,22 @@
   virtual
   ~CommandManagerBase() = default;
 
-  /*! \brief add desired name prefix to the advertised name prefix list
+  /*! \brief Add desired name prefix to the advertised name prefix list
    *         or insert a prefix into the FIB if parameters is valid.
    */
   void
-  advertiseAndInsertPrefix(const ndn::Name& prefix,
-                           const ndn::Interest& interest,
-                           const ndn::mgmt::ControlParametersBase& parameters,
+  advertiseAndInsertPrefix(const ndn::mgmt::ControlParametersBase& parameters,
                            const ndn::mgmt::CommandContinuation& done);
 
-  /*! \brief remove desired name prefix from the advertised name prefix list
+  /*! \brief Remove desired name prefix from the advertised name prefix list
    *         or remove a prefix from the FIB if parameters is valid.
    */
   void
-  withdrawAndRemovePrefix(const ndn::Name& prefix,
-                          const ndn::Interest& interest,
-                          const ndn::mgmt::ControlParametersBase& parameters,
+  withdrawAndRemovePrefix(const ndn::mgmt::ControlParametersBase& parameters,
                           const ndn::mgmt::CommandContinuation& done);
 
-  /*! \brief save an advertised prefix to the nlsr configuration file
-   *         returns bool from the overridden function while nullopt here
+  /*! \brief Save an advertised prefix to the nlsr configuration file.
+   *  \return bool from the overridden function while nullopt here
    */
   virtual std::optional<bool>
   afterAdvertise(const ndn::Name& prefix)
@@ -127,8 +96,8 @@
     return std::nullopt;
   }
 
-  /*! \brief save an advertised prefix to the nlsr configuration file
-   *         returns bool from the overridden function while nullopt here
+  /*! \brief Save an advertised prefix to the nlsr configuration file.
+   *  \return bool from the overridden function while nullopt here
    */
   virtual std::optional<bool>
   afterWithdraw(const ndn::Name& prefix)
diff --git a/src/update/nfd-rib-command-processor.cpp b/src/update/nfd-rib-command-processor.cpp
index f4d191b..6892415 100644
--- a/src/update/nfd-rib-command-processor.cpp
+++ b/src/update/nfd-rib-command-processor.cpp
@@ -28,15 +28,13 @@
                                                Lsdb& lsdb)
   : CommandManagerBase(dispatcher, namePrefixList, lsdb, "rib")
 {
-  m_dispatcher.addControlCommand<ndn::nfd::ControlParameters>(makeRelPrefix("register"),
+  m_dispatcher.addControlCommand<ndn::nfd::RibRegisterCommand>(
     ndn::mgmt::makeAcceptAllAuthorization(),
-    [] (const auto& p) { return validateParameters<ndn::nfd::RibRegisterCommand>(p); },
-    std::bind(&NfdRibCommandProcessor::advertiseAndInsertPrefix, this, _1, _2, _3, _4));
+    std::bind(&NfdRibCommandProcessor::advertiseAndInsertPrefix, this, _3, _4));
 
-  m_dispatcher.addControlCommand<ndn::nfd::ControlParameters>(makeRelPrefix("unregister"),
+  m_dispatcher.addControlCommand<ndn::nfd::RibUnregisterCommand>(
     ndn::mgmt::makeAcceptAllAuthorization(),
-    [] (const auto& p) { return validateParameters<ndn::nfd::RibUnregisterCommand>(p); },
-    std::bind(&NfdRibCommandProcessor::withdrawAndRemovePrefix, this, _1, _2, _3, _4));
+    std::bind(&NfdRibCommandProcessor::withdrawAndRemovePrefix, this, _3, _4));
 }
 
 } // namespace nlsr::update
diff --git a/src/update/prefix-update-commands.hpp b/src/update/prefix-update-commands.hpp
index 7557312..1c63df0 100644
--- a/src/update/prefix-update-commands.hpp
+++ b/src/update/prefix-update-commands.hpp
@@ -40,12 +40,12 @@
 
 class AdvertisePrefixCommand : public ndn::nfd::ControlCommand<AdvertisePrefixCommand>
 {
-  NDN_CXX_CONTROL_COMMAND("nlsr", "advertise");
+  NDN_CXX_CONTROL_COMMAND("prefix-update", "advertise");
 };
 
 class WithdrawPrefixCommand : public ndn::nfd::ControlCommand<WithdrawPrefixCommand>
 {
-  NDN_CXX_CONTROL_COMMAND("nlsr", "withdraw");
+  NDN_CXX_CONTROL_COMMAND("prefix-update", "withdraw");
 };
 
 } // namespace nlsr::update
diff --git a/src/update/prefix-update-processor.cpp b/src/update/prefix-update-processor.cpp
index 1a1b5da..83bfcc4 100644
--- a/src/update/prefix-update-processor.cpp
+++ b/src/update/prefix-update-processor.cpp
@@ -22,11 +22,9 @@
 #include "prefix-update-processor.hpp"
 #include "logger.hpp"
 #include "lsdb.hpp"
-#include "nlsr.hpp"
 #include "prefix-update-commands.hpp"
 
 #include <ndn-cxx/face.hpp>
-#include <ndn-cxx/mgmt/nfd/control-response.hpp>
 
 #include <boost/algorithm/string.hpp>
 #include <fstream>
@@ -61,18 +59,13 @@
   , m_validator(validator)
   , m_confFileNameDynamic(configFileName)
 {
-  NLSR_LOG_DEBUG("Setting dispatcher to capture Interests for: "
-    << ndn::Name(Nlsr::LOCALHOST_PREFIX).append("prefix-update"));
-
-  m_dispatcher.addControlCommand<ndn::nfd::ControlParameters>(makeRelPrefix("advertise"),
+  m_dispatcher.addControlCommand<AdvertisePrefixCommand>(
     makeAuthorization(),
-    [] (const auto& p) { return validateParameters<AdvertisePrefixCommand>(p); },
-    std::bind(&PrefixUpdateProcessor::advertiseAndInsertPrefix, this, _1, _2, _3, _4));
+    std::bind(&PrefixUpdateProcessor::advertiseAndInsertPrefix, this, _3, _4));
 
-  m_dispatcher.addControlCommand<ndn::nfd::ControlParameters>(makeRelPrefix("withdraw"),
+  m_dispatcher.addControlCommand<WithdrawPrefixCommand>(
     makeAuthorization(),
-    [] (const auto& p) { return validateParameters<WithdrawPrefixCommand>(p); },
-    std::bind(&PrefixUpdateProcessor::withdrawAndRemovePrefix, this, _1, _2, _3, _4));
+    std::bind(&PrefixUpdateProcessor::withdrawAndRemovePrefix, this, _3, _4));
 }
 
 ndn::mgmt::Authorization
@@ -84,7 +77,6 @@
               const ndn::mgmt::RejectContinuation& reject) {
     m_validator.validate(interest,
       [accept] (const ndn::Interest& request) {
-
         auto signer1 = getSignerFromTag(request);
         std::string signer = signer1.value_or("*");
         NLSR_LOG_DEBUG("accept " << request.getName() << " signer=" << signer);
@@ -92,7 +84,7 @@
       },
       [reject] (const ndn::Interest& request, const ndn::security::ValidationError& error) {
         NLSR_LOG_DEBUG("reject " << request.getName() << " signer=" <<
-                        getSignerFromTag(request).value_or("?") << ' ' << error);
+                       getSignerFromTag(request).value_or("?") << ' ' << error);
         reject(ndn::mgmt::RejectReply::STATUS403);
       });
   };
@@ -120,7 +112,6 @@
       return true;
     }
   }
-  fp.close();
   return false;
 }
 
