diff --git a/src/update/manager-base.hpp b/src/update/manager-base.hpp
index 557a015..db6ef62 100644
--- a/src/update/manager-base.hpp
+++ b/src/update/manager-base.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis,
+ * Copyright (c) 2014-2025,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -22,16 +22,14 @@
 #ifndef NLSR_MANAGER_BASE_HPP
 #define NLSR_MANAGER_BASE_HPP
 
+#include "lsdb.hpp"
 #include "name-prefix-list.hpp"
 #include "test-access-control.hpp"
-#include "lsdb.hpp"
-#include "nfd-rib-commands.hpp"
-#include "prefix-update-commands.hpp"
 
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/interest.hpp>
-#include <ndn-cxx/mgmt/nfd/control-command.hpp>
 #include <ndn-cxx/mgmt/dispatcher.hpp>
+#include <ndn-cxx/mgmt/nfd/control-command.hpp>
 #include <ndn-cxx/mgmt/nfd/control-parameters.hpp>
 #include <ndn-cxx/mgmt/nfd/control-response.hpp>
 
@@ -56,19 +54,19 @@
     using std::runtime_error::runtime_error;
   };
 
+protected:
   ManagerBase(ndn::mgmt::Dispatcher& m_dispatcher, const std::string& module);
 
-protected:
-  /*! \brief generate the relative prefix for a handler by appending the verb name to the module name
+  /*! \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
-    */
+  /*! \brief Validate the parameters for a given command.
+   */
   template<typename T>
-  bool
+  static bool
   validateParameters(const ndn::mgmt::ControlParameters& parameters)
   {
     const auto* castParams = dynamic_cast<const ndn::nfd::ControlParameters*>(&parameters);
diff --git a/src/update/nfd-rib-command-processor.cpp b/src/update/nfd-rib-command-processor.cpp
index 2570797..f4d191b 100644
--- a/src/update/nfd-rib-command-processor.cpp
+++ b/src/update/nfd-rib-command-processor.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  The University of Memphis,
+ * Copyright (c) 2014-2025,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -21,8 +21,7 @@
 
 #include "nfd-rib-command-processor.hpp"
 
-namespace nlsr {
-namespace update {
+namespace nlsr::update {
 
 NfdRibCommandProcessor::NfdRibCommandProcessor(ndn::mgmt::Dispatcher& dispatcher,
                                                NamePrefixList& namePrefixList,
@@ -31,14 +30,13 @@
 {
   m_dispatcher.addControlCommand<ndn::nfd::ControlParameters>(makeRelPrefix("register"),
     ndn::mgmt::makeAcceptAllAuthorization(),
-    std::bind(&NfdRibCommandProcessor::validateParameters<NfdRibRegisterCommand>, this, _1),
+    [] (const auto& p) { return validateParameters<ndn::nfd::RibRegisterCommand>(p); },
     std::bind(&NfdRibCommandProcessor::advertiseAndInsertPrefix, this, _1, _2, _3, _4));
 
   m_dispatcher.addControlCommand<ndn::nfd::ControlParameters>(makeRelPrefix("unregister"),
     ndn::mgmt::makeAcceptAllAuthorization(),
-    std::bind(&NfdRibCommandProcessor::validateParameters<NfdRibUnregisterCommand>, this, _1),
+    [] (const auto& p) { return validateParameters<ndn::nfd::RibUnregisterCommand>(p); },
     std::bind(&NfdRibCommandProcessor::withdrawAndRemovePrefix, this, _1, _2, _3, _4));
 }
 
-} // namespace update
-} // namespace nlsr
+} // namespace nlsr::update
diff --git a/src/update/nfd-rib-command-processor.hpp b/src/update/nfd-rib-command-processor.hpp
index 4b6ca5c..351e375 100644
--- a/src/update/nfd-rib-command-processor.hpp
+++ b/src/update/nfd-rib-command-processor.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2017,  The University of Memphis,
+/*
+ * Copyright (c) 2014-2025,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -17,20 +17,14 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
+ */
 
-#ifndef UPDATE_NFD_RIB_COMMAND_PROCESSOR_HPP
-#define UPDATE_NFD_RIB_COMMAND_PROCESSOR_HPP
+#ifndef NLSR_UPDATE_NFD_RIB_COMMAND_PROCESSOR_HPP
+#define NLSR_UPDATE_NFD_RIB_COMMAND_PROCESSOR_HPP
 
 #include "manager-base.hpp"
-#include "route/fib.hpp"
-#include "nfd-rib-commands.hpp"
 
-#include <ndn-cxx/encoding/tlv-nfd.hpp>
-
-
-namespace nlsr {
-namespace update {
+namespace nlsr::update {
 
 class NfdRibCommandProcessor : public CommandManagerBase
 {
@@ -40,7 +34,6 @@
                          Lsdb& lsdb);
 };
 
-} // namespace update
-} // namespace nlsr
+} // namespace nlsr::update
 
-#endif // UPDATE_NFD_RIB_COMMAND_PROCESSOR_HPP
+#endif // NLSR_UPDATE_NFD_RIB_COMMAND_PROCESSOR_HPP
diff --git a/src/update/nfd-rib-commands.cpp b/src/update/nfd-rib-commands.cpp
deleted file mode 100644
index fd2c2af..0000000
--- a/src/update/nfd-rib-commands.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2017,  The University of Memphis,
- *                           Regents of the University of California,
- *                           Arizona Board of Regents.
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
-
-#include "nfd-rib-commands.hpp"
-
-namespace nlsr {
-namespace update {
-
-NfdRibRegisterCommand::NfdRibRegisterCommand()
-  : ControlCommand("nlsr", "register")
-{
-  m_requestValidator.required(ndn::nfd::CONTROL_PARAMETER_NAME);
-  m_requestValidator.optional(ndn::nfd::CONTROL_PARAMETER_ORIGIN);
-}
-
-NfdRibUnregisterCommand::NfdRibUnregisterCommand()
-  : ControlCommand("nlsr", "unregister")
-{
-  m_requestValidator.required(ndn::nfd::CONTROL_PARAMETER_NAME);
-  m_requestValidator.optional(ndn::nfd::CONTROL_PARAMETER_ORIGIN);
-}
-
-} // namespace update
-} // namespace nlsr
diff --git a/src/update/nfd-rib-commands.hpp b/src/update/nfd-rib-commands.hpp
deleted file mode 100644
index b259b7e..0000000
--- a/src/update/nfd-rib-commands.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2017,  The University of Memphis,
- *                           Regents of the University of California,
- *                           Arizona Board of Regents.
- *
- * This file is part of NLSR (Named-data Link State Routing).
- * See AUTHORS.md for complete list of NLSR authors and contributors.
- *
- * NLSR is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
-
-/*! \file
- * Define parameters for NFD RIB commands
- *
- * When validating an NFD RIB command, NLSR is only concerned with the
- * name in the command. However, a request is rejected if it has
- * unsolicited fields, so the origin, which is set by NFD's RIB, must
- * be considered optional. We consider these to be secure because they
- * are currently only received over the localhost prefix. These serve
- * to support NFD RIB to NLSR route readvertising.
- *
- * \sa NfdRibCommandProcessor
- * \sa nlsr::Nlsr::LOCALHOST_PREFIX
- * \sa nlsr::Nlsr::getDispatcher
- */
-
-#ifndef UPDATE_NFD_RIB_COMMANDS_HPP
-#define UPDATE_NFD_RIB_COMMANDS_HPP
-
-#include <ndn-cxx/mgmt/nfd/control-command.hpp>
-
-namespace nlsr {
-namespace update {
-
-class NfdRibRegisterCommand : public ndn::nfd::ControlCommand
-{
-public:
-  NfdRibRegisterCommand();
-};
-
-class NfdRibUnregisterCommand : public ndn::nfd::ControlCommand
-{
-public:
-  NfdRibUnregisterCommand();
-};
-
-} // namespace update
-} // namespace nlsr
-
-#endif // UPDATE_NFD_RIB_COMMANDS_HPP
diff --git a/src/update/prefix-update-processor.cpp b/src/update/prefix-update-processor.cpp
index c36b408..6edfae7 100644
--- a/src/update/prefix-update-processor.cpp
+++ b/src/update/prefix-update-processor.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis,
+ * Copyright (c) 2014-2025,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -23,16 +23,15 @@
 #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 <algorithm>
 #include <fstream>
 
-namespace nlsr {
-namespace update {
+namespace nlsr::update {
 
 INIT_LOGGER(update.PrefixUpdateProcessor);
 
@@ -67,14 +66,12 @@
 
   m_dispatcher.addControlCommand<ndn::nfd::ControlParameters>(makeRelPrefix("advertise"),
     makeAuthorization(),
-    std::bind(&PrefixUpdateProcessor::validateParameters<AdvertisePrefixCommand>,
-                this, _1),
+    [] (const auto& p) { return validateParameters<AdvertisePrefixCommand>(p); },
     std::bind(&PrefixUpdateProcessor::advertiseAndInsertPrefix, this, _1, _2, _3, _4));
 
   m_dispatcher.addControlCommand<ndn::nfd::ControlParameters>(makeRelPrefix("withdraw"),
     makeAuthorization(),
-    std::bind(&PrefixUpdateProcessor::validateParameters<WithdrawPrefixCommand>,
-                this, _1),
+    [] (const auto& p) { return validateParameters<WithdrawPrefixCommand>(p); },
     std::bind(&PrefixUpdateProcessor::withdrawAndRemovePrefix, this, _1, _2, _3, _4));
 }
 
@@ -193,5 +190,4 @@
   return addOrDeletePrefix(prefix, false);
 }
 
-} // namespace update
-} // namespace nlsr
+} // namespace nlsr::update
diff --git a/src/update/prefix-update-processor.hpp b/src/update/prefix-update-processor.hpp
index 1864d0f..9230f0b 100644
--- a/src/update/prefix-update-processor.hpp
+++ b/src/update/prefix-update-processor.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  The University of Memphis,
+ * Copyright (c) 2014-2025,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -23,14 +23,12 @@
 #define NLSR_UPDATE_PREFIX_UPDATE_PROCESSOR_HPP
 
 #include "manager-base.hpp"
-#include "prefix-update-commands.hpp"
 
 #include <ndn-cxx/security/key-chain.hpp>
 
 #include <boost/property_tree/ptree.hpp>
 
-namespace nlsr {
-namespace update {
+namespace nlsr::update {
 
 using ConfigSection = boost::property_tree::ptree;
 
@@ -93,7 +91,6 @@
   const std::string& m_confFileNameDynamic;
 };
 
-} // namespace update
-} // namespace nlsr
+} // namespace nlsr::update
 
 #endif // NLSR_UPDATE_PREFIX_UPDATE_PROCESSOR_HPP
