diff --git a/tests/tools/nfdc/forwarder-general-module.t.cpp b/tests/tools/nfdc/forwarder-general-module.t.cpp
index d7ac0a3..f97d36d 100644
--- a/tests/tools/nfdc/forwarder-general-module.t.cpp
+++ b/tests/tools/nfdc/forwarder-general-module.t.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2014-2017,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
@@ -36,23 +36,22 @@
 BOOST_AUTO_TEST_SUITE(Nfdc)
 BOOST_FIXTURE_TEST_SUITE(TestForwarderGeneralModule, StatusFixture<ForwarderGeneralModule>)
 
-class MakeNfdIdCollector
-{
-public:
-  unique_ptr<NfdIdCollector>
-  operator()(Face&, KeyChain&) const
-  {
-    return make_unique<NfdIdCollector>(make_unique<ValidatorNull>());
-  };
-};
+// class MakeNfdIdCollector
+// {
+// public:
+//   unique_ptr<NfdIdCollector>
+//   operator()(Face&, KeyChain&) const
+//   {
+//     return make_unique<NfdIdCollector>(make_unique<ValidatorNull>());
+//   };
+// };
 
-class ForwarderGeneralStatusFixture : public StatusFixture<ForwarderGeneralModule,
-                                                           MakeNfdIdCollector>
+class ForwarderGeneralStatusFixture : public StatusFixture<ForwarderGeneralModule>
 {
 protected:
   ForwarderGeneralStatusFixture()
   {
-    module.setNfdIdCollector(*validator);
+    // module.setNfdIdCollector(*validator);
 
     BOOST_REQUIRE(this->addIdentity("/nfd-status/test-nfdid",
                                     ndn::EcKeyParams(name::Component("KEYID"))));
@@ -68,7 +67,7 @@
 
 const std::string STATUS_XML = stripXmlSpaces(R"XML(
   <generalStatus>
-    <nfdId>/nfd-status/test-nfdid/KEY/KEYID</nfdId>
+    <nfdId>/nfdId-unavailable</nfdId>
     <version>0.4.1-1-g704430c</version>
     <startTime>2016-06-24T15:13:46.856000</startTime>
     <currentTime>2016-07-17T17:55:54.109000</currentTime>
@@ -95,7 +94,7 @@
 
 const std::string STATUS_TEXT = std::string(R"TEXT(
 General NFD status:
-                 nfdId=/nfd-status/test-nfdid/KEY/KEYID
+                 nfdId=/nfdId-unavailable
                version=0.4.1-1-g704430c
              startTime=20160624T151346.856000
            currentTime=20160717T175554.109000
diff --git a/tests/tools/nfdc/status-fixture.hpp b/tests/tools/nfdc/status-fixture.hpp
index 2d33d37..b955f7a 100644
--- a/tests/tools/nfdc/status-fixture.hpp
+++ b/tests/tools/nfdc/status-fixture.hpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2014-2017,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
@@ -37,8 +37,8 @@
 
 using ndn::Face;
 using ndn::KeyChain;
-using ndn::Validator;
-using ndn::ValidatorNull;
+using ndn::security::v2::Validator;
+using ndn::security::v2::ValidatorNull;
 using boost::test_tools::output_test_stream;
 
 class MakeValidatorNull
diff --git a/tools/nfdc/face-id-fetcher.cpp b/tools/nfdc/face-id-fetcher.cpp
index 458b9bb..f0bf841 100644
--- a/tools/nfdc/face-id-fetcher.cpp
+++ b/tools/nfdc/face-id-fetcher.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2016,  Regents of the University of California,
+/*
+ * Copyright (c) 2014-2017,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -30,6 +30,7 @@
 
 #include <ndn-cxx/mgmt/nfd/face-query-filter.hpp>
 #include <ndn-cxx/mgmt/nfd/face-status.hpp>
+#include <ndn-cxx/security/validator-null.hpp>
 #include <ndn-cxx/util/segment-fetcher.hpp>
 
 namespace nfd {
@@ -114,7 +115,7 @@
   auto interest = std::make_shared<ndn::Interest>(interestPacket);
 
   ndn::util::SegmentFetcher::fetch(
-    m_face, *interest, m_validator,
+    m_face, *interest, ndn::security::v2::getAcceptAllValidator(),
     bind(&FaceIdFetcher::onQuerySuccess, this, _1, canonicalUri),
     bind(&FaceIdFetcher::onQueryFailure, this, _1, canonicalUri));
 }
diff --git a/tools/nfdc/face-id-fetcher.hpp b/tools/nfdc/face-id-fetcher.hpp
index 7c9a40f..5e45b7b 100644
--- a/tools/nfdc/face-id-fetcher.hpp
+++ b/tools/nfdc/face-id-fetcher.hpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2014-2017,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
@@ -29,7 +29,6 @@
 #include "core/common.hpp"
 #include <ndn-cxx/face.hpp>
 #include <ndn-cxx/mgmt/nfd/controller.hpp>
-#include <ndn-cxx/security/validator-null.hpp>
 
 namespace nfd {
 namespace tools {
@@ -100,7 +99,6 @@
   bool m_allowCreate;
   SuccessCallback m_onSucceed;
   FailureCallback m_onFail;
-  ndn::ValidatorNull m_validator;
 };
 
 } // namespace nfdc
diff --git a/tools/nfdc/forwarder-general-module.hpp b/tools/nfdc/forwarder-general-module.hpp
index f8c30d8..9fc6a68 100644
--- a/tools/nfdc/forwarder-general-module.hpp
+++ b/tools/nfdc/forwarder-general-module.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2016,  Regents of the University of California,
+/*
+ * Copyright (c) 2014-2017,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -45,7 +45,7 @@
 public:
   ForwarderGeneralModule();
 
-  virtual void
+  void
   fetchStatus(Controller& controller,
               const function<void()>& onSuccess,
               const Controller::DatasetFailCallback& onFailure,
@@ -57,7 +57,7 @@
     m_nfdIdCollector = &nfdIdCollector;
   }
 
-  virtual void
+  void
   formatStatusXml(std::ostream& os) const override;
 
   /** \brief format a single status item as XML
@@ -68,7 +68,7 @@
   void
   formatItemXml(std::ostream& os, const ForwarderStatus& item, const Name& nfdId) const;
 
-  virtual void
+  void
   formatStatusText(std::ostream& os) const override;
 
   /** \brief format a single status item as text
@@ -94,6 +94,8 @@
  *  This validator redirects all validation requests to an inner validator.
  *  For the first Data packet accepted by the inner validator that has a Name in KeyLocator,
  *  this Name is collected as NFD's signing certificate name.
+ *
+ *  \todo #4089 re-implement as v2 ValidationPolicy
  */
 class NfdIdCollector : public ndn::Validator
 {
@@ -111,7 +113,7 @@
   getNfdId() const;
 
 protected:
-  virtual void
+  void
   checkPolicy(const Interest& interest, int nSteps,
               const ndn::OnInterestValidated& accept,
               const ndn::OnInterestValidationFailed& reject,
@@ -121,7 +123,7 @@
     m_inner->validate(interest, accept, reject);
   }
 
-  virtual void
+  void
   checkPolicy(const Data& data, int nSteps,
               const ndn::OnDataValidated& accept,
               const ndn::OnDataValidationFailed& reject,
diff --git a/tools/nfdc/module.hpp b/tools/nfdc/module.hpp
index 553c14f..765e39b 100644
--- a/tools/nfdc/module.hpp
+++ b/tools/nfdc/module.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2016,  Regents of the University of California,
+/*
+ * Copyright (c) 2014-2017,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -27,14 +27,15 @@
 #define NFD_TOOLS_NFDC_MODULE_HPP
 
 #include "core/common.hpp"
+#include <ndn-cxx/mgmt/nfd/command-options.hpp>
 #include <ndn-cxx/mgmt/nfd/controller.hpp>
 
 namespace nfd {
 namespace tools {
 namespace nfdc {
 
-using ndn::nfd::Controller;
 using ndn::nfd::CommandOptions;
+using ndn::nfd::Controller;
 
 /** \brief provides access to an NFD management module
  *  \note This type is an interface. It should not have member fields.
diff --git a/tools/nfdc/status-report.hpp b/tools/nfdc/status-report.hpp
index 153751a..1658852 100644
--- a/tools/nfdc/status-report.hpp
+++ b/tools/nfdc/status-report.hpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2014-2017,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
@@ -27,6 +27,9 @@
 #define NFD_TOOLS_NFDC_STATUS_REPORT_HPP
 
 #include "module.hpp"
+#include <ndn-cxx/face.hpp>
+#include <ndn-cxx/security/key-chain.hpp>
+#include <ndn-cxx/security/v2/validator.hpp>
 
 namespace nfd {
 namespace tools {
@@ -34,7 +37,7 @@
 
 using ndn::Face;
 using ndn::KeyChain;
-using ndn::Validator;
+using ndn::security::v2::Validator;
 
 enum class ReportFormat {
   XML = 1,
diff --git a/tools/nfdc/status.cpp b/tools/nfdc/status.cpp
index f87cd8b..529ee82 100644
--- a/tools/nfdc/status.cpp
+++ b/tools/nfdc/status.cpp
@@ -1,5 +1,5 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2014-2017,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
@@ -40,17 +40,17 @@
 void
 reportStatus(ExecuteContext& ctx, const StatusReportOptions& options)
 {
-  unique_ptr<Validator> validator = make_unique<ndn::ValidatorNull>();
+  unique_ptr<ndn::security::v2::Validator> validator = make_unique<ndn::security::v2::ValidatorNull>();
   CommandOptions ctrlOptions;
 
   StatusReport report;
 
   if (options.wantForwarderGeneral) {
-    auto nfdIdCollector = make_unique<NfdIdCollector>(std::move(validator));
+    // auto nfdIdCollector = make_unique<NfdIdCollector>(std::move(validator));
     auto forwarderGeneralModule = make_unique<ForwarderGeneralModule>();
-    forwarderGeneralModule->setNfdIdCollector(*nfdIdCollector);
+    // forwarderGeneralModule->setNfdIdCollector(*nfdIdCollector);
     report.sections.push_back(std::move(forwarderGeneralModule));
-    validator = std::move(nfdIdCollector);
+    // validator = std::move(nfdIdCollector);
   }
 
   if (options.wantChannels) {
