diff --git a/daemon/mgmt/cs-manager.cpp b/daemon/mgmt/cs-manager.cpp
index a807df8..3be976f 100644
--- a/daemon/mgmt/cs-manager.cpp
+++ b/daemon/mgmt/cs-manager.cpp
@@ -39,12 +39,15 @@
   , m_cs(cs)
   , m_fwCounters(fwCounters)
 {
-  registerCommandHandler<ndn::nfd::CsConfigCommand>("config",
-    [this] (auto&&, auto&&, auto&&... args) { changeConfig(std::forward<decltype(args)>(args)...); });
-  registerCommandHandler<ndn::nfd::CsEraseCommand>("erase",
-    [this] (auto&&, auto&&, auto&&... args) { erase(std::forward<decltype(args)>(args)...); });
-  registerStatusDatasetHandler("info",
-    [this] (auto&&, auto&&, auto&&... args) { serveInfo(std::forward<decltype(args)>(args)...); });
+  registerCommandHandler<ndn::nfd::CsConfigCommand>([this] (auto&&, auto&&, auto&&... args) {
+    changeConfig(std::forward<decltype(args)>(args)...);
+  });
+  registerCommandHandler<ndn::nfd::CsEraseCommand>([this] (auto&&, auto&&, auto&&... args) {
+    erase(std::forward<decltype(args)>(args)...);
+  });
+  registerStatusDatasetHandler("info", [this] (auto&&, auto&&, auto&&... args) {
+    serveInfo(std::forward<decltype(args)>(args)...);
+  });
 }
 
 void
diff --git a/daemon/mgmt/face-manager.cpp b/daemon/mgmt/face-manager.cpp
index e822f12..34eb8e6 100644
--- a/daemon/mgmt/face-manager.cpp
+++ b/daemon/mgmt/face-manager.cpp
@@ -49,12 +49,15 @@
   , m_faceTable(faceSystem.getFaceTable())
 {
   // register handlers for ControlCommand
-  registerCommandHandler<ndn::nfd::FaceCreateCommand>("create",
-    [this] (auto&&, auto&&, auto&&... args) { createFace(std::forward<decltype(args)>(args)...); });
-  registerCommandHandler<ndn::nfd::FaceUpdateCommand>("update",
-    [this] (auto&&, auto&&... args) { updateFace(std::forward<decltype(args)>(args)...); });
-  registerCommandHandler<ndn::nfd::FaceDestroyCommand>("destroy",
-    [this] (auto&&, auto&&, auto&&... args) { destroyFace(std::forward<decltype(args)>(args)...); });
+  registerCommandHandler<ndn::nfd::FaceCreateCommand>([this] (auto&&, auto&&, auto&&... args) {
+    createFace(std::forward<decltype(args)>(args)...);
+  });
+  registerCommandHandler<ndn::nfd::FaceUpdateCommand>([this] (auto&&, auto&&... args) {
+    updateFace(std::forward<decltype(args)>(args)...);
+  });
+  registerCommandHandler<ndn::nfd::FaceDestroyCommand>([this] (auto&&, auto&&, auto&&... args) {
+    destroyFace(std::forward<decltype(args)>(args)...);
+  });
 
   // register handlers for StatusDataset
   registerStatusDatasetHandler("list",
diff --git a/daemon/mgmt/fib-manager.cpp b/daemon/mgmt/fib-manager.cpp
index cdae3f6..4de989e 100644
--- a/daemon/mgmt/fib-manager.cpp
+++ b/daemon/mgmt/fib-manager.cpp
@@ -44,12 +44,15 @@
   , m_fib(fib)
   , m_faceTable(faceTable)
 {
-  registerCommandHandler<ndn::nfd::FibAddNextHopCommand>("add-nexthop",
-    [this] (auto&&, auto&&... args) { addNextHop(std::forward<decltype(args)>(args)...); });
-  registerCommandHandler<ndn::nfd::FibRemoveNextHopCommand>("remove-nexthop",
-    [this] (auto&&, auto&&... args) { removeNextHop(std::forward<decltype(args)>(args)...); });
-  registerStatusDatasetHandler("list",
-    [this] (auto&&, auto&&, auto&&... args) { listEntries(std::forward<decltype(args)>(args)...); });
+  registerCommandHandler<ndn::nfd::FibAddNextHopCommand>([this] (auto&&, auto&&... args) {
+    addNextHop(std::forward<decltype(args)>(args)...);
+  });
+  registerCommandHandler<ndn::nfd::FibRemoveNextHopCommand>([this] (auto&&, auto&&... args) {
+    removeNextHop(std::forward<decltype(args)>(args)...);
+  });
+  registerStatusDatasetHandler("list", [this] (auto&&, auto&&, auto&&... args) {
+    listEntries(std::forward<decltype(args)>(args)...);
+  });
 }
 
 void
diff --git a/daemon/mgmt/manager-base.hpp b/daemon/mgmt/manager-base.hpp
index 53a5fc6..ec03463 100644
--- a/daemon/mgmt/manager-base.hpp
+++ b/daemon/mgmt/manager-base.hpp
@@ -76,15 +76,23 @@
   ~ManagerBase();
 
 NFD_PUBLIC_WITH_TESTS_ELSE_PROTECTED: // registrations to the dispatcher
-  // difference from ndn::mgmt::ControlCommandHandler: accepts nfd::ControlParameters
+  template<typename Command>
   using ControlCommandHandler = std::function<void(const Name& prefix, const Interest& interest,
-                                                   const ControlParameters& parameters,
+                                                   const typename Command::RequestParameters& parameters,
                                                    const CommandContinuation& done)>;
 
   template<typename Command>
   void
-  registerCommandHandler(const std::string& verb,
-                         ControlCommandHandler handler);
+  registerCommandHandler(ControlCommandHandler<Command> handler)
+  {
+    auto handle = [h = std::move(handler)] (const auto& prefix, const auto& interest,
+                                            const auto& params, const auto& done) {
+      const auto& reqParams = static_cast<const typename Command::RequestParameters&>(params);
+      h(prefix, interest, reqParams, done);
+    };
+    m_dispatcher.addControlCommand<Command>(makeAuthorization(Command::verb.toUri()),
+                                            std::move(handle));
+  }
 
   void
   registerStatusDatasetHandler(const std::string& verb,
@@ -128,34 +136,6 @@
   CommandAuthenticator* m_authenticator = nullptr;
 };
 
-template<typename Command>
-void
-ManagerBase::registerCommandHandler(const std::string& verb, ControlCommandHandler handler)
-{
-  auto validate = [] (const ndn::mgmt::ControlParametersBase& params) {
-    BOOST_ASSERT(dynamic_cast<const ControlParameters*>(&params) != nullptr);
-    try {
-      Command::validateRequest(static_cast<const ControlParameters&>(params));
-      return true;
-    }
-    catch (const std::invalid_argument&) {
-      return false;
-    }
-  };
-
-  auto handle = [handler = std::move(handler)] (const Name& prefix, const Interest& interest,
-                                                const ndn::mgmt::ControlParametersBase& params,
-                                                const CommandContinuation& done) {
-    BOOST_ASSERT(dynamic_cast<const ControlParameters*>(&params) != nullptr);
-    ControlParameters parameters = static_cast<const ControlParameters&>(params);
-    Command::applyDefaultsToRequest(parameters);
-    handler(prefix, interest, parameters, done);
-  };
-
-  m_dispatcher.addControlCommand<ControlParameters>(makeRelPrefix(verb), makeAuthorization(verb),
-                                                    std::move(validate), std::move(handle));
-}
-
 } // namespace nfd
 
 #endif // NFD_DAEMON_MGMT_MANAGER_BASE_HPP
diff --git a/daemon/mgmt/rib-manager.cpp b/daemon/mgmt/rib-manager.cpp
index 865b30f..6cc614a 100644
--- a/daemon/mgmt/rib-manager.cpp
+++ b/daemon/mgmt/rib-manager.cpp
@@ -61,12 +61,15 @@
   , m_paValidator(make_unique<ndn::security::CertificateFetcherDirectFetch>(face))
   , m_isLocalhopEnabled(false)
 {
-  registerCommandHandler<ndn::nfd::RibRegisterCommand>("register",
-    [this] (auto&&, auto&&... args) { registerEntry(std::forward<decltype(args)>(args)...); });
-  registerCommandHandler<ndn::nfd::RibUnregisterCommand>("unregister",
-    [this] (auto&&, auto&&... args) { unregisterEntry(std::forward<decltype(args)>(args)...); });
-  registerStatusDatasetHandler("list",
-    [this] (auto&&, auto&&, auto&&... args) { listEntries(std::forward<decltype(args)>(args)...); });
+  registerCommandHandler<ndn::nfd::RibRegisterCommand>([this] (auto&&, auto&&... args) {
+    registerEntry(std::forward<decltype(args)>(args)...);
+  });
+  registerCommandHandler<ndn::nfd::RibUnregisterCommand>([this] (auto&&, auto&&... args) {
+    unregisterEntry(std::forward<decltype(args)>(args)...);
+  });
+  registerStatusDatasetHandler("list", [this] (auto&&, auto&&, auto&&... args) {
+    listEntries(std::forward<decltype(args)>(args)...);
+  });
 }
 
 void
diff --git a/daemon/mgmt/strategy-choice-manager.cpp b/daemon/mgmt/strategy-choice-manager.cpp
index e31ae76..1b4628e 100644
--- a/daemon/mgmt/strategy-choice-manager.cpp
+++ b/daemon/mgmt/strategy-choice-manager.cpp
@@ -42,12 +42,15 @@
   : ManagerBase("strategy-choice", dispatcher, authenticator)
   , m_table(strategyChoice)
 {
-  registerCommandHandler<ndn::nfd::StrategyChoiceSetCommand>("set",
-    [this] (auto&&, auto&&, auto&&... args) { setStrategy(std::forward<decltype(args)>(args)...); });
-  registerCommandHandler<ndn::nfd::StrategyChoiceUnsetCommand>("unset",
-    [this] (auto&&, auto&&, auto&&... args) { unsetStrategy(std::forward<decltype(args)>(args)...); });
-  registerStatusDatasetHandler("list",
-    [this] (auto&&, auto&&, auto&&... args) { listChoices(std::forward<decltype(args)>(args)...); });
+  registerCommandHandler<ndn::nfd::StrategyChoiceSetCommand>([this] (auto&&, auto&&, auto&&... args) {
+    setStrategy(std::forward<decltype(args)>(args)...);
+  });
+  registerCommandHandler<ndn::nfd::StrategyChoiceUnsetCommand>([this] (auto&&, auto&&, auto&&... args) {
+    unsetStrategy(std::forward<decltype(args)>(args)...);
+  });
+  registerStatusDatasetHandler("list", [this] (auto&&, auto&&, auto&&... args) {
+    listChoices(std::forward<decltype(args)>(args)...);
+  });
 }
 
 void
diff --git a/tests/daemon/mgmt/face-manager.t.cpp b/tests/daemon/mgmt/face-manager.t.cpp
index 458599f..1e3ba99 100644
--- a/tests/daemon/mgmt/face-manager.t.cpp
+++ b/tests/daemon/mgmt/face-manager.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2024,  Regents of the University of California,
+ * Copyright (c) 2014-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -218,7 +218,7 @@
   auto face3 = addFace(REMOVE_LAST_NOTIFICATION | SET_URI_TEST); // test://
 
   auto generateQuery = [] (const auto& filter) {
-    return Interest(Name("/localhost/nfd/faces/query").append(tlv::GenericNameComponent, filter.wireEncode()))
+    return Interest(Name("/localhost/nfd/faces/query").append(filter.wireEncode()))
            .setCanBePrefix(true);
   };
 
@@ -226,7 +226,7 @@
   auto idQuery = generateQuery(FaceQueryFilter().setFaceId(face1->getId()));
   auto scopeQuery = generateQuery(FaceQueryFilter().setFaceScope(ndn::nfd::FACE_SCOPE_NON_LOCAL));
   auto invalidQueryName = Name("/localhost/nfd/faces/query")
-                          .append(tlv::GenericNameComponent, ndn::makeStringBlock(tlv::Content, "invalid"));
+                          .append(ndn::makeStringBlock(tlv::Content, "invalid"));
   auto invalidQuery = Interest(invalidQueryName).setCanBePrefix(true);
 
   receiveInterest(schemeQuery); // face1 and face2 expected
diff --git a/tests/daemon/mgmt/manager-base.t.cpp b/tests/daemon/mgmt/manager-base.t.cpp
index 2fcdd62..70eb1b6 100644
--- a/tests/daemon/mgmt/manager-base.t.cpp
+++ b/tests/daemon/mgmt/manager-base.t.cpp
@@ -31,14 +31,14 @@
 
 class TestCommandVoidParameters : public ndn::nfd::ControlCommand<TestCommandVoidParameters>
 {
-  NDN_CXX_CONTROL_COMMAND(TestCommandVoidParameters, "test-module", "test-void-parameters");
+  NDN_CXX_CONTROL_COMMAND("test-module", "test-void");
 };
 
 const TestCommandVoidParameters::RequestFormat TestCommandVoidParameters::s_requestFormat;
 
 class TestCommandRequireName : public ndn::nfd::ControlCommand<TestCommandRequireName>
 {
-  NDN_CXX_CONTROL_COMMAND(TestCommandRequireName, "test-module", "test-require-name");
+  NDN_CXX_CONTROL_COMMAND("test-module", "test-name-required");
 };
 
 const TestCommandRequireName::RequestFormat TestCommandRequireName::s_requestFormat =
@@ -81,8 +81,8 @@
   bool wasHandlerCalled = false;
   auto handler = [&] (auto&&...) { wasHandlerCalled = true; };
 
-  m_manager.registerCommandHandler<TestCommandVoidParameters>("test-void", handler);
-  m_manager.registerCommandHandler<TestCommandRequireName>("test-require-name", handler);
+  m_manager.registerCommandHandler<TestCommandVoidParameters>(handler);
+  m_manager.registerCommandHandler<TestCommandRequireName>(handler);
   setTopPrefix();
 
   auto testRegisterCommandHandler = [&] (const Name& commandName) {
@@ -93,11 +93,11 @@
   testRegisterCommandHandler("/localhost/nfd/test-module/test-void");
   BOOST_CHECK(wasHandlerCalled);
 
-  testRegisterCommandHandler("/localhost/nfd/test-module/test-require-name");
+  testRegisterCommandHandler("/localhost/nfd/test-module/test-name-required");
   BOOST_CHECK(!wasHandlerCalled);
 
-  testRegisterCommandHandler(Name("/localhost/nfd/test-module/test-require-name")
-                             .append(ControlParameters().setName("test-name").wireEncode()));
+  testRegisterCommandHandler(Name("/localhost/nfd/test-module/test-name-required")
+                             .append(ControlParameters().setName("/foo").wireEncode()));
   BOOST_CHECK(wasHandlerCalled);
 }
 
diff --git a/tests/daemon/mgmt/manager-common-fixture.cpp b/tests/daemon/mgmt/manager-common-fixture.cpp
index d69763d..3b98dd2 100644
--- a/tests/daemon/mgmt/manager-common-fixture.cpp
+++ b/tests/daemon/mgmt/manager-common-fixture.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2022,  Regents of the University of California,
+ * Copyright (c) 2014-2025,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -38,7 +38,7 @@
                                                  ndn::security::SignedInterestFormat format,
                                                  const Name& identity)
 {
-  commandName.append(tlv::GenericNameComponent, params.wireEncode());
+  commandName.append(params.wireEncode());
 
   switch (format) {
     case ndn::security::SignedInterestFormat::V02:
