diff --git a/ndn-cxx/mgmt/control-parameters.hpp b/ndn-cxx/mgmt/control-parameters-base.hpp
similarity index 76%
rename from ndn-cxx/mgmt/control-parameters.hpp
rename to ndn-cxx/mgmt/control-parameters-base.hpp
index 211ca53..8346b15 100644
--- a/ndn-cxx/mgmt/control-parameters.hpp
+++ b/ndn-cxx/mgmt/control-parameters-base.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2023 Regents of the University of California.
+ * Copyright (c) 2013-2025 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -19,21 +19,21 @@
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  */
 
-#ifndef NDN_CXX_MGMT_CONTROL_PARAMETERS_HPP
-#define NDN_CXX_MGMT_CONTROL_PARAMETERS_HPP
+#ifndef NDN_CXX_MGMT_CONTROL_PARAMETERS_BASE_HPP
+#define NDN_CXX_MGMT_CONTROL_PARAMETERS_BASE_HPP
 
 #include "ndn-cxx/encoding/block.hpp"
 
 namespace ndn::mgmt {
 
 /**
- * \brief Base class for a struct that contains ControlCommand parameters.
+ * \brief Base class for a struct that contains the parameters for a ControlCommand.
  */
-class ControlParameters
+class ControlParametersBase
 {
 public:
   virtual
-  ~ControlParameters() = default;
+  ~ControlParametersBase() = default;
 
   virtual void
   wireDecode(const Block& wire) = 0;
@@ -44,4 +44,4 @@
 
 } // namespace ndn::mgmt
 
-#endif // NDN_CXX_MGMT_CONTROL_PARAMETERS_HPP
+#endif // NDN_CXX_MGMT_CONTROL_PARAMETERS_BASE_HPP
diff --git a/ndn-cxx/mgmt/dispatcher.cpp b/ndn-cxx/mgmt/dispatcher.cpp
index 7956198..d0c45b1 100644
--- a/ndn-cxx/mgmt/dispatcher.cpp
+++ b/ndn-cxx/mgmt/dispatcher.cpp
@@ -34,15 +34,14 @@
 {
   return [] (const Name& prefix,
              const Interest& interest,
-             const ControlParameters* params,
+             const ControlParametersBase* params,
              const AcceptContinuation& accept,
              const RejectContinuation& reject) {
     accept("");
   };
 }
 
-Dispatcher::Dispatcher(Face& face, KeyChain& keyChain,
-                       const security::SigningInfo& signingInfo,
+Dispatcher::Dispatcher(Face& face, KeyChain& keyChain, const security::SigningInfo& signingInfo,
                        size_t imsCapacity)
   : m_face(face)
   , m_keyChain(keyChain)
@@ -168,7 +167,7 @@
                            ValidateParameters validate,
                            ControlCommandHandler handler)
 {
-  shared_ptr<ControlParameters> parameters;
+  ControlParametersPtr parameters;
   try {
     parameters = parse(prefix, interest);
   }
@@ -189,7 +188,7 @@
 void
 Dispatcher::processAuthorizedCommand(const Name& prefix,
                                      const Interest& interest,
-                                     const shared_ptr<ControlParameters>& parameters,
+                                     const ControlParametersPtr& parameters,
                                      const ValidateParameters& validate,
                                      const ControlCommandHandler& handler)
 {
diff --git a/ndn-cxx/mgmt/dispatcher.hpp b/ndn-cxx/mgmt/dispatcher.hpp
index cfc56b8..27dc529 100644
--- a/ndn-cxx/mgmt/dispatcher.hpp
+++ b/ndn-cxx/mgmt/dispatcher.hpp
@@ -23,10 +23,9 @@
 #define NDN_CXX_MGMT_DISPATCHER_HPP
 
 #include "ndn-cxx/face.hpp"
-#include "ndn-cxx/encoding/block.hpp"
 #include "ndn-cxx/ims/in-memory-storage-fifo.hpp"
+#include "ndn-cxx/mgmt/control-parameters-base.hpp"
 #include "ndn-cxx/mgmt/control-response.hpp"
-#include "ndn-cxx/mgmt/control-parameters.hpp"
 #include "ndn-cxx/mgmt/status-dataset-context.hpp"
 #include "ndn-cxx/security/key-chain.hpp"
 
@@ -75,7 +74,7 @@
  *  Either \p accept or \p reject must be called after authorization completes.
  */
 using Authorization = std::function<void(const Name& prefix, const Interest& interest,
-                                         const ControlParameters* params,
+                                         const ControlParametersBase* params,
                                          const AcceptContinuation& accept,
                                          const RejectContinuation& reject)>;
 
@@ -92,7 +91,7 @@
  * \param params The parsed ControlParameters; guaranteed to be of the correct (sub-)type
  *               for the command.
  */
-using ValidateParameters = std::function<bool(ControlParameters& params)>;
+using ValidateParameters = std::function<bool(ControlParametersBase& params)>;
 
 /**
  * \brief A function to be called after a ControlCommandHandler completes.
@@ -100,15 +99,16 @@
  */
 using CommandContinuation = std::function<void(const ControlResponse& resp)>;
 
-/** \brief A function to handle an authorized ControlCommand.
- *  \param prefix top-level prefix, e.g., "/localhost/nfd";
- *  \param interest incoming Interest
- *  \param params parsed ControlParameters;
- *                This is guaranteed to have correct type for the command,
- *                and is valid (e.g., has all required fields).
+/**
+ * \brief A function to handle an authorized ControlCommand.
+ * \param prefix Top-level prefix, e.g., `/localhost/nfd`.
+ * \param interest Incoming Interest carrying the request.
+ * \param params The parsed ControlParameters; guaranteed to be of the correct (sub-)type
+ *               and to be valid for the command (e.g., has all the required fields).
+ * \param done Function that must be called after command processing is complete.
  */
 using ControlCommandHandler = std::function<void(const Name& prefix, const Interest& interest,
-                                                 const ControlParameters& params,
+                                                 const ControlParametersBase& params,
                                                  const CommandContinuation& done)>;
 
 // ---- STATUS DATASET ----
@@ -211,7 +211,7 @@
    *  8. Send the signed Data packet.
    */
   template<typename ParametersType,
-           std::enable_if_t<std::is_convertible_v<ParametersType*, ControlParameters*>, int> = 0>
+           std::enable_if_t<std::is_convertible_v<ParametersType*, ControlParametersBase*>, int> = 0>
   void
   addControlCommand(const PartialName& relPrefix,
                     Authorization authorize,
@@ -222,7 +222,7 @@
 
     auto relPrefixLen = relPrefix.size();
     ParametersParser parse = [relPrefixLen] (const Name& prefix,
-                                             const auto& interest) -> shared_ptr<ControlParameters> {
+                                             const auto& interest) -> ControlParametersPtr {
       const name::Component& comp = interest.getName().get(prefix.size() + relPrefixLen);
       return make_shared<ParametersType>(comp.blockFromValue());
     };
@@ -349,6 +349,7 @@
   addNotificationStream(const PartialName& relPrefix);
 
 private:
+  using ControlParametersPtr = shared_ptr<ControlParametersBase>;
   using InterestHandler = std::function<void(const Name& prefix, const Interest&)>;
 
   /**
@@ -356,7 +357,7 @@
    * @return A shared pointer to the extracted ControlParameters.
    * @throw tlv::Error The request parameters cannot be parsed.
    */
-  using ParametersParser = std::function<shared_ptr<ControlParameters>(const Name& prefix, const Interest&)>;
+  using ParametersParser = std::function<ControlParametersPtr(const Name& prefix, const Interest&)>;
 
   void
   checkPrefix(const PartialName& relPrefix) const;
@@ -443,7 +444,7 @@
   void
   processAuthorizedCommand(const Name& prefix,
                            const Interest& interest,
-                           const shared_ptr<ControlParameters>& parameters,
+                           const ControlParametersPtr& parameters,
                            const ValidateParameters& validate,
                            const ControlCommandHandler& handler);
 
@@ -490,6 +491,10 @@
   postNotification(const Block& notification, const PartialName& relPrefix);
 
 private:
+  Face& m_face;
+  KeyChain& m_keyChain;
+  security::SigningInfo m_signingInfo;
+
   struct TopPrefixEntry
   {
     ScopedRegisteredPrefixHandle registeredPrefix;
@@ -497,10 +502,6 @@
   };
   std::unordered_map<Name, TopPrefixEntry> m_topLevelPrefixes;
 
-  Face& m_face;
-  KeyChain& m_keyChain;
-  security::SigningInfo m_signingInfo;
-
   std::unordered_map<PartialName, InterestHandler> m_handlers;
 
   // NotificationStream name => next sequence number
diff --git a/ndn-cxx/mgmt/nfd/control-command.hpp b/ndn-cxx/mgmt/nfd/control-command.hpp
index f9b15ca..adcf534 100644
--- a/ndn-cxx/mgmt/nfd/control-command.hpp
+++ b/ndn-cxx/mgmt/nfd/control-command.hpp
@@ -152,7 +152,7 @@
   /**
    * \brief Extract parameters from request Interest.
    */
-  static shared_ptr<mgmt::ControlParameters>
+  static shared_ptr<mgmt::ControlParametersBase>
   parseRequest(const Interest& interest, size_t prefixLen)
   {
     // /<prefix>/<module>/<verb>
diff --git a/ndn-cxx/mgmt/nfd/control-parameters.hpp b/ndn-cxx/mgmt/nfd/control-parameters.hpp
index b49ba4f..8120abd 100644
--- a/ndn-cxx/mgmt/nfd/control-parameters.hpp
+++ b/ndn-cxx/mgmt/nfd/control-parameters.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2023 Regents of the University of California.
+ * Copyright (c) 2013-2025 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -24,7 +24,7 @@
 
 #include "ndn-cxx/name.hpp"
 #include "ndn-cxx/encoding/nfd-constants.hpp"
-#include "ndn-cxx/mgmt/control-parameters.hpp"
+#include "ndn-cxx/mgmt/control-parameters-base.hpp"
 #include "ndn-cxx/util/time.hpp"
 
 namespace ndn::nfd {
@@ -77,7 +77,7 @@
  * \sa https://redmine.named-data.net/projects/nfd/wiki/ControlCommand#ControlParameters
  * \details This type is copyable because it's an abstraction of a TLV type.
  */
-class ControlParameters : public mgmt::ControlParameters
+class ControlParameters : public mgmt::ControlParametersBase
 {
 public:
   class Error : public tlv::Error
diff --git a/ndn-cxx/net/network-monitor-stub.hpp b/ndn-cxx/net/network-monitor-stub.hpp
index b6bf852..e63b952 100644
--- a/ndn-cxx/net/network-monitor-stub.hpp
+++ b/ndn-cxx/net/network-monitor-stub.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2023 Regents of the University of California.
+ * Copyright (c) 2013-2025 Regents of the University of California.
  *
  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
  *
@@ -72,7 +72,7 @@
    *  interface, it emits the #onInterfaceAdded signal. When the initial enumerating completes,
    *  it emits the onEnumerationCompleted signal.
    *
-   *  To simulate this procedure on a newly constructed MockNetworkMonitor, the caller should
+   *  To simulate this procedure on a newly constructed NetworkMonitorStub, the caller should
    *  invoke addInterface() once for each network interface that already exists, and then invoke
    *  emitEnumerationCompleted().
    */
diff --git a/tests/unit/mgmt/dispatcher.t.cpp b/tests/unit/mgmt/dispatcher.t.cpp
index 6a80012..8caedc2 100644
--- a/tests/unit/mgmt/dispatcher.t.cpp
+++ b/tests/unit/mgmt/dispatcher.t.cpp
@@ -38,7 +38,7 @@
   InMemoryStorageFifo& storage{dispatcher.m_storage};
 };
 
-class VoidParameters : public mgmt::ControlParameters
+class VoidParameters : public ControlParametersBase
 {
 public:
   explicit
@@ -64,7 +64,7 @@
 static Authorization
 makeTestAuthorization()
 {
-  return [] (const Name&, const Interest& interest, const ControlParameters*,
+  return [] (const Name&, const Interest& interest, const ControlParametersBase*,
              AcceptContinuation accept, RejectContinuation reject) {
     if (interest.getName()[-1] == name::Component("valid")) {
       accept("");
@@ -277,7 +277,7 @@
 BOOST_AUTO_TEST_CASE(ControlCommandResponse)
 {
   auto handler = [] (const Name& prefix, const Interest& interest,
-                     const ControlParameters&, const CommandContinuation& done) {
+                     const ControlParametersBase&, const CommandContinuation& done) {
     BOOST_CHECK_EQUAL(prefix, "/root");
     BOOST_CHECK_EQUAL(interest.getName().getPrefix(3),
                       Name("/root").append(nfd::CsConfigCommand::getName()));
@@ -304,7 +304,7 @@
   BOOST_CHECK_EQUAL(resp.getText(), "the answer");
 }
 
-class StatefulParameters : public mgmt::ControlParameters
+class StatefulParameters : public ControlParametersBase
 {
 public:
   explicit
@@ -340,12 +340,12 @@
   * ut::description("test for bug #4059"))
 {
   AcceptContinuation authorizationAccept;
-  auto authorization = [&authorizationAccept] (const Name&, const Interest&, const ControlParameters*,
+  auto authorization = [&authorizationAccept] (const Name&, const Interest&, const ControlParametersBase*,
                                                AcceptContinuation accept, RejectContinuation) {
     authorizationAccept = std::move(accept);
   };
 
-  auto validateParameters = [] (const ControlParameters& params) {
+  auto validateParameters = [] (const ControlParametersBase& params) {
     return dynamic_cast<const StatefulParameters&>(params).check();
   };
 
