diff --git a/tests/communication/test-sync-logic-handler.cpp b/tests/communication/test-sync-logic-handler.cpp
index 8c0cc3d..c259bfc 100644
--- a/tests/communication/test-sync-logic-handler.cpp
+++ b/tests/communication/test-sync-logic-handler.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-2023,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -30,8 +30,6 @@
 namespace nlsr {
 namespace test {
 
-using std::shared_ptr;
-
 class SyncLogicFixture : public IoKeyChainFixture
 {
 public:
@@ -58,7 +56,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face{m_io, m_keyChain};
+  ndn::DummyClientFace face{m_io, m_keyChain};
   ConfParameter conf{face, m_keyChain};
   DummyConfFileProcessor confProcessor{conf, SyncProtocol::PSYNC};
   SyncLogicHandler::IsLsaNew testIsLsaNew;
@@ -84,7 +82,7 @@
   for (auto lsaType : {Lsa::Type::NAME, Lsa::Type::ADJACENCY}) {
     std::string updateName = this->updateNamePrefix + boost::lexical_cast<std::string>(lsaType);
 
-    ndn::util::signal::ScopedConnection connection = this->sync.onNewLsa.connect(
+    ndn::signal::ScopedConnection connection = this->sync.onNewLsa.connect(
       [&] (const auto& routerName, uint64_t sequenceNumber, const auto& originRouter, uint64_t incomingFaceId) {
         BOOST_CHECK_EQUAL(ndn::Name{updateName}, routerName);
         BOOST_CHECK_EQUAL(sequenceNumber, syncSeqNo);
@@ -111,7 +109,7 @@
   for (auto lsaType : {Lsa::Type::NAME, Lsa::Type::COORDINATE}) {
     std::string updateName = this->updateNamePrefix + boost::lexical_cast<std::string>(lsaType);
 
-    ndn::util::signal::ScopedConnection connection = this->sync.onNewLsa.connect(
+    ndn::signal::ScopedConnection connection = this->sync.onNewLsa.connect(
       [&] (const auto& routerName, uint64_t sequenceNumber, const auto& originRouter, uint64_t incomingFaceId) {
         BOOST_CHECK_EQUAL(ndn::Name{updateName}, routerName);
         BOOST_CHECK_EQUAL(sequenceNumber, syncSeqNo);
@@ -138,7 +136,7 @@
   for (auto lsaType : this->lsaTypes) {
     std::string updateName = this->updateNamePrefix + boost::lexical_cast<std::string>(lsaType);
 
-    ndn::util::signal::ScopedConnection connection = this->sync.onNewLsa.connect(
+    ndn::signal::ScopedConnection connection = this->sync.onNewLsa.connect(
       [&] (const auto& routerName, uint64_t sequenceNumber, const auto& originRouter, uint64_t incomingFaceId) {
         BOOST_CHECK_EQUAL(ndn::Name{updateName}, routerName);
         BOOST_CHECK_EQUAL(sequenceNumber, syncSeqNo);
@@ -167,7 +165,7 @@
               .append(this->conf.getRouterName())
               .append(boost::lexical_cast<std::string>(lsaType));
 
-    ndn::util::signal::ScopedConnection connection = this->sync.onNewLsa.connect(
+    ndn::signal::ScopedConnection connection = this->sync.onNewLsa.connect(
       [&] (const auto& routerName, uint64_t sequenceNumber, const auto& originRouter, uint64_t incomingFaceId) {
         BOOST_FAIL("Updates for self should not be emitted!");
       });
@@ -191,7 +189,7 @@
     ndn::Name updateName{this->conf.getSiteName()};
     updateName.append(this->conf.getRouterName()).append(boost::lexical_cast<std::string>(lsaType));
 
-    ndn::util::signal::ScopedConnection connection = this->sync.onNewLsa.connect(
+    ndn::signal::ScopedConnection connection = this->sync.onNewLsa.connect(
       [&] (const auto& routerName, uint64_t sequenceNumber, const auto& originRouter, uint64_t incomingFaceId) {
         BOOST_FAIL("Malformed updates should not be emitted!");
       });
@@ -216,7 +214,7 @@
 
   const uint64_t sequenceNumber = 1;
   SyncLogicHandler sync{this->face, this->m_keyChain, testLsaAlwaysFalse, this->conf};
-  ndn::util::signal::ScopedConnection connection = sync.onNewLsa.connect(
+  ndn::signal::ScopedConnection connection = sync.onNewLsa.connect(
     [&] (const auto& routerName, uint64_t sequenceNumber, const auto& originRouter, uint64_t incomingFaceId) {
       BOOST_FAIL("An update for an LSA with non-new sequence number should not emit!");
     });
diff --git a/tests/communication/test-sync-protocol-adapter.cpp b/tests/communication/test-sync-protocol-adapter.cpp
index 721b2f7..1b80a82 100644
--- a/tests/communication/test-sync-protocol-adapter.cpp
+++ b/tests/communication/test-sync-protocol-adapter.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-2023,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -29,7 +29,7 @@
 namespace nlsr {
 namespace test {
 
-using namespace ndn;
+using ndn::Name;
 
 class SyncProtocolAdapterFixture : public IoKeyChainFixture
 {
@@ -37,7 +37,7 @@
   SyncProtocolAdapterFixture()
     : syncPrefix("/localhop/ndn/nlsr/sync")
     , nameLsaUserPrefix("/localhop/ndn/nlsr/LSA/NAME")
-    , syncInterestLifetime(time::seconds(60))
+    , syncInterestLifetime(60_s)
   {
     syncPrefix.appendVersion(4);
   }
@@ -46,29 +46,28 @@
   addNodes()
   {
     for (int i = 0; i < 2; i++) {
-      faces[i] = std::make_shared<util::DummyClientFace>(m_io,
-                                                         util::DummyClientFace::Options{true, true});
+      faces[i] = std::make_shared<ndn::DummyClientFace>(m_io, ndn::DummyClientFace::Options{true, true});
       userPrefixes[i] = Name(nameLsaUserPrefix).appendNumber(i);
-      nodes[i] = std::make_shared<SyncProtocolAdapter>(*faces[i], m_keyChain, SyncProtocol::PSYNC,
-                                                       syncPrefix, userPrefixes[i],
-                                                       syncInterestLifetime,
-                                                       [i, this] (const ndn::Name& updateName,
-                                                                  uint64_t highSeq, uint64_t incomingFaceId) {
-                                                         prefixToSeq[i].emplace(updateName, highSeq);
-                                                       });
+      nodes[i] = std::make_shared<SyncProtocolAdapter>(
+        *faces[i], m_keyChain, SyncProtocol::PSYNC, syncPrefix, userPrefixes[i],
+        syncInterestLifetime,
+        [i, this] (const Name& updateName, uint64_t highSeq, uint64_t incomingFaceId) {
+          prefixToSeq[i].emplace(updateName, highSeq);
+        });
     }
 
     faces[0]->linkTo(*faces[1]);
-    advanceClocks(ndn::time::milliseconds(10), 10);
+    advanceClocks(10_ms, 10);
   }
 
 public:
-  Name syncPrefix, nameLsaUserPrefix;
+  Name syncPrefix;
+  Name nameLsaUserPrefix;
   Name userPrefixes[2];
-  time::milliseconds syncInterestLifetime;
-  std::shared_ptr<ndn::util::DummyClientFace> faces[2];
+  ndn::time::milliseconds syncInterestLifetime;
+  std::shared_ptr<ndn::DummyClientFace> faces[2];
   std::shared_ptr<SyncProtocolAdapter> nodes[2];
-  std::map<ndn::Name, uint64_t> prefixToSeq[2];
+  std::map<Name, uint64_t> prefixToSeq[2];
 };
 
 BOOST_AUTO_TEST_SUITE(TestSyncProtocolAdapter)
@@ -78,7 +77,7 @@
   addNodes();
 
   nodes[0]->publishUpdate(userPrefixes[0], 10);
-  advanceClocks(ndn::time::milliseconds(1000), 100);
+  advanceClocks(1_s, 100);
 
   auto it = prefixToSeq[1].find(userPrefixes[0]);
   BOOST_CHECK(it != prefixToSeq[1].end());
@@ -86,7 +85,7 @@
   BOOST_CHECK_EQUAL(it->second, 10);
 
   nodes[1]->publishUpdate(userPrefixes[1], 100);
-  advanceClocks(ndn::time::milliseconds(1000), 100);
+  advanceClocks(1_s, 100);
 
   it = prefixToSeq[0].find(userPrefixes[1]);
   BOOST_CHECK(it != prefixToSeq[0].end());
@@ -95,9 +94,9 @@
 
   Name adjLsaUserPrefix("/localhop/ndn/nlsr/LSA/ADJACENCY");
   nodes[0]->addUserNode(adjLsaUserPrefix);
-  advanceClocks(ndn::time::milliseconds(1000), 100);
+  advanceClocks(1_s, 100);
   nodes[0]->publishUpdate(adjLsaUserPrefix, 10);
-  advanceClocks(ndn::time::milliseconds(1000), 100);
+  advanceClocks(1_s, 100);
 
   it = prefixToSeq[1].find(adjLsaUserPrefix);
   BOOST_CHECK(it != prefixToSeq[1].end());
diff --git a/tests/publisher/publisher-fixture.hpp b/tests/publisher/publisher-fixture.hpp
index ffc7016..b187ffb 100644
--- a/tests/publisher/publisher-fixture.hpp
+++ b/tests/publisher/publisher-fixture.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-2023,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -81,7 +81,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ConfParameter conf;
   DummyConfFileProcessor confProcessor;
   Nlsr nlsr;
diff --git a/tests/route/test-fib.cpp b/tests/route/test-fib.cpp
index 932b63a..7bbfccb 100644
--- a/tests/route/test-fib.cpp
+++ b/tests/route/test-fib.cpp
@@ -71,8 +71,8 @@
   ndn::Scheduler m_scheduler{m_io};
 
 public:
-  ndn::util::DummyClientFace face{m_io, m_keyChain, [] {
-    ndn::util::DummyClientFace::Options opts;
+  ndn::DummyClientFace face{m_io, m_keyChain, [] {
+    ndn::DummyClientFace::Options opts;
     opts.enableRegistrationReply = true;
     opts.registrationReplyFaceId = 128;
     return opts;
diff --git a/tests/route/test-hyperbolic-calculator.cpp b/tests/route/test-hyperbolic-calculator.cpp
index 18a7d21..10a401e 100644
--- a/tests/route/test-hyperbolic-calculator.cpp
+++ b/tests/route/test-hyperbolic-calculator.cpp
@@ -145,7 +145,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ConfParameter conf;
   Nlsr nlsr;
   Map map;
diff --git a/tests/route/test-link-state-calculator.cpp b/tests/route/test-link-state-calculator.cpp
index 397f779..0a4c522 100644
--- a/tests/route/test-link-state-calculator.cpp
+++ b/tests/route/test-link-state-calculator.cpp
@@ -95,7 +95,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ConfParameter conf;
   DummyConfFileProcessor confProcessor;
   Nlsr nlsr;
diff --git a/tests/route/test-name-prefix-table.cpp b/tests/route/test-name-prefix-table.cpp
index 1425603..839c874 100644
--- a/tests/route/test-name-prefix-table.cpp
+++ b/tests/route/test-name-prefix-table.cpp
@@ -53,7 +53,7 @@
   ndn::Scheduler m_scheduler{m_io};
 
 public:
-  ndn::util::DummyClientFace face{m_io, m_keyChain};
+  ndn::DummyClientFace face{m_io, m_keyChain};
   ConfParameter conf{face, m_keyChain};
   DummyConfFileProcessor confProcessor{conf};
 
diff --git a/tests/route/test-routing-table.cpp b/tests/route/test-routing-table.cpp
index 1e689a7..b777a04 100644
--- a/tests/route/test-routing-table.cpp
+++ b/tests/route/test-routing-table.cpp
@@ -35,7 +35,7 @@
   ndn::Scheduler m_scheduler{m_io};
 
 public:
-  ndn::util::DummyClientFace face{m_io, m_keyChain, {true, true}};
+  ndn::DummyClientFace face{m_io, m_keyChain, {true, true}};
   ConfParameter conf{face, m_keyChain};
   DummyConfFileProcessor confProcessor{conf};
 
diff --git a/tests/security/test-certificate-store.cpp b/tests/security/test-certificate-store.cpp
index efd7ace..18be8fe 100644
--- a/tests/security/test-certificate-store.cpp
+++ b/tests/security/test-certificate-store.cpp
@@ -102,7 +102,7 @@
     BOOST_CHECK(didFindInterest);
   }
 
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
 
   ConfParameter conf;
   DummyConfFileProcessor confProcessor;
@@ -149,7 +149,7 @@
 
 BOOST_AUTO_TEST_CASE(RetrieveCert)
 {
-  ndn::util::DummyClientFace consumer(m_io);
+  ndn::DummyClientFace consumer(m_io);
   consumer.linkTo(face);
 
   auto checkRetrieve = [&] (const ndn::Name& interestName, bool canBePrefix, const ndn::Name& dataName) {
@@ -245,7 +245,7 @@
   BOOST_CHECK(certStore.find(keyName) != nullptr);
 
   // testing a callback after segment validation signal from lsdb
-  ndn::util::signal::ScopedConnection connection = lsdb.afterSegmentValidatedSignal.connect(
+  ndn::signal::ScopedConnection connection = lsdb.afterSegmentValidatedSignal.connect(
   [&] (const ndn::Data& lsaSegment) {
     BOOST_CHECK_EQUAL(lsaSegment.getName(), data.getName());
   });
diff --git a/tests/test-adjacency-list.cpp b/tests/test-adjacency-list.cpp
index 565052c..1a2ca87 100644
--- a/tests/test-adjacency-list.cpp
+++ b/tests/test-adjacency-list.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-2023,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -87,7 +87,7 @@
   adjacencies.insert(adjacencyA);
   adjacencies.insert(adjacencyB);
 
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ndn::KeyChain keyChain;
   ConfParameter conf(face, keyChain);
   BOOST_CHECK(adjacencies.isAdjLsaBuildable(conf.getInterestRetryNumber()));
@@ -108,7 +108,7 @@
   adjacencies.insert(adjacencyA);
   adjacencies.insert(adjacencyB);
 
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ndn::KeyChain keyChain;
   ConfParameter conf(face, keyChain);
   conf.setInterestRetryNumber(HELLO_RETRIES_DEFAULT);
@@ -131,7 +131,7 @@
   adjacencies.insert(adjacencyA);
   adjacencies.insert(adjacencyB);
 
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ndn::KeyChain keyChain;
   ConfParameter conf(face, keyChain);
   conf.setInterestRetryNumber(HELLO_RETRIES_DEFAULT);
diff --git a/tests/test-common.cpp b/tests/test-common.cpp
index 388cb23..953d9ec 100644
--- a/tests/test-common.cpp
+++ b/tests/test-common.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-2023,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -41,7 +41,7 @@
 }
 
 void
-checkPrefixRegistered(const ndn::util::DummyClientFace& face, const ndn::Name& prefix)
+checkPrefixRegistered(const ndn::DummyClientFace& face, const ndn::Name& prefix)
 {
   bool registerCommandEmitted = false;
   for (const auto& interest : face.sentInterests) {
diff --git a/tests/test-common.hpp b/tests/test-common.hpp
index 3498f81..2bee4fc 100644
--- a/tests/test-common.hpp
+++ b/tests/test-common.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-2023,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -56,7 +56,7 @@
 }
 
 void
-checkPrefixRegistered(const ndn::util::DummyClientFace& face, const ndn::Name& prefix);
+checkPrefixRegistered(const ndn::DummyClientFace& face, const ndn::Name& prefix);
 
 class DummyConfFileProcessor
 {
diff --git a/tests/test-conf-file-processor.cpp b/tests/test-conf-file-processor.cpp
index 249dab4..bf7ddb3 100644
--- a/tests/test-conf-file-processor.cpp
+++ b/tests/test-conf-file-processor.cpp
@@ -164,7 +164,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ConfParameter conf;
 };
 
diff --git a/tests/test-conf-parameter.cpp b/tests/test-conf-parameter.cpp
index 4d16ba5..02fe05b 100644
--- a/tests/test-conf-parameter.cpp
+++ b/tests/test-conf-parameter.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-2023,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -34,7 +34,7 @@
 
 BOOST_AUTO_TEST_CASE(ConfParameterSettersAndGetters)
 {
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ndn::KeyChain keyChain;
   ConfParameter cp1(face, keyChain);
 
diff --git a/tests/test-hello-protocol.cpp b/tests/test-hello-protocol.cpp
index 6ea3449..a825321 100644
--- a/tests/test-hello-protocol.cpp
+++ b/tests/test-hello-protocol.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-2023,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -88,7 +88,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ConfParameter conf;
   DummyConfFileProcessor confProcessor;
   AdjacencyList& adjList;
diff --git a/tests/test-lsa-rule.cpp b/tests/test-lsa-rule.cpp
index cf9c699..eaebf12 100644
--- a/tests/test-lsa-rule.cpp
+++ b/tests/test-lsa-rule.cpp
@@ -85,7 +85,7 @@
    }
 
 public:
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
 
   ndn::Name rootIdName, siteIdentityName, opIdentityName, routerIdName;
   ndn::security::pib::Identity rootId, siteIdentity, opIdentity, routerId;
diff --git a/tests/test-lsa-segment-storage.cpp b/tests/test-lsa-segment-storage.cpp
index 0bed79d..922e78c 100644
--- a/tests/test-lsa-segment-storage.cpp
+++ b/tests/test-lsa-segment-storage.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-2023,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -64,7 +64,7 @@
                     ndn::time::system_clock::now() + refreshTime, npl1);
 
     interestName.appendVersion();
-    ndn::util::Segmenter segmenter(m_keyChain, ndn::security::SigningInfo());
+    ndn::Segmenter segmenter(m_keyChain, ndn::security::SigningInfo());
     auto segments = segmenter.segment(nameLsa.wireEncode(), interestName,
                                       ndn::MAX_NDN_PACKET_SIZE / 2, refreshTime);
     for (const auto& seg : segments) {
@@ -84,7 +84,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face{m_io, m_keyChain, {true, true}};
+  ndn::DummyClientFace face{m_io, m_keyChain, {true, true}};
   ConfParameter conf{face, m_keyChain};
   DummyConfFileProcessor confProcessor{conf};
   Nlsr nlsr{face, m_keyChain, conf};
@@ -92,7 +92,7 @@
   ndn::InMemoryStorageFifo ims{100};
 
   int numValidationSignal = 0;
-  ndn::util::signal::ScopedConnection afterSegmentValidatedConn;
+  ndn::signal::ScopedConnection afterSegmentValidatedConn;
 };
 
 BOOST_FIXTURE_TEST_SUITE(TestLsaSegmentStorage, LsaSegmentStorageFixture)
diff --git a/tests/test-lsdb.cpp b/tests/test-lsdb.cpp
index bec64cb..f6e078b 100644
--- a/tests/test-lsdb.cpp
+++ b/tests/test-lsdb.cpp
@@ -110,7 +110,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ConfParameter conf;
   DummyConfFileProcessor confProcessor;
   Lsdb lsdb;
@@ -150,7 +150,7 @@
   auto deadline = ndn::time::steady_clock::now() + ndn::time::seconds(LSA_REFRESH_TIME_MAX);
 
   // Simulate an LSA interest timeout
-  lsdb.onFetchLsaError(ndn::util::SegmentFetcher::ErrorCode::INTEREST_TIMEOUT, "Timeout",
+  lsdb.onFetchLsaError(ndn::SegmentFetcher::ErrorCode::INTEREST_TIMEOUT, "Timeout",
                        oldInterestName, 0, deadline, interestName, oldSeqNo);
   advanceClocks(10_ms);
 
@@ -184,7 +184,7 @@
   interests.clear();
 
   // Simulate an LSA interest timeout where the sequence number is outdated
-  lsdb.onFetchLsaError(ndn::util::SegmentFetcher::ErrorCode::INTEREST_TIMEOUT, "Timeout",
+  lsdb.onFetchLsaError(ndn::SegmentFetcher::ErrorCode::INTEREST_TIMEOUT, "Timeout",
                        oldInterestName, 0, deadline, interestName, oldSeqNo);
   advanceClocks(10_ms);
 
@@ -211,7 +211,7 @@
   lsdb.installLsa(nameLsa);
 
   // Create another Lsdb and expressInterest
-  ndn::util::DummyClientFace face2(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face2(m_io, m_keyChain, {true, true});
   face.linkTo(face2);
 
   ConfParameter conf2(face2, m_keyChain);
@@ -256,11 +256,11 @@
   ndn::Name interestName("/localhop/ndn/nlsr/LSA/site/%C1.Router/this-router/NAME/");
   interestName.appendNumber(seqNo);
 
-  ndn::util::DummyClientFace face2(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face2(m_io, m_keyChain, {true, true});
   face.linkTo(face2);
 
-  auto fetcher = ndn::util::SegmentFetcher::start(face2, ndn::Interest(interestName),
-                                                  ndn::security::getAcceptAllValidator());
+  auto fetcher = ndn::SegmentFetcher::start(face2, ndn::Interest(interestName),
+                                            ndn::security::getAcceptAllValidator());
   fetcher->onComplete.connect([&expectedDataContent] (ndn::ConstBufferPtr bufferPtr) {
                                 ndn::Block block(bufferPtr);
                                 BOOST_CHECK_EQUAL(expectedDataContent, block);
diff --git a/tests/test-nlsr.cpp b/tests/test-nlsr.cpp
index b4f979c..ed8ce66 100644
--- a/tests/test-nlsr.cpp
+++ b/tests/test-nlsr.cpp
@@ -99,7 +99,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace m_face{m_io, m_keyChain, {true, true}};
+  ndn::DummyClientFace m_face{m_io, m_keyChain, {true, true}};
 };
 
 class NlsrFixture : public MockNfdMgmtFixture
@@ -138,7 +138,7 @@
   AdjacencyList& neighbors;
   uint32_t nSuccessCallbacks;
   uint32_t nFailureCallbacks;
-  ndn::util::signal::ScopedConnection connection;
+  ndn::signal::ScopedConnection connection;
 };
 
 BOOST_FIXTURE_TEST_SUITE(TestNlsr, NlsrFixture)
diff --git a/tests/test-statistics.cpp b/tests/test-statistics.cpp
index 5aa9855..641d55b 100644
--- a/tests/test-statistics.cpp
+++ b/tests/test-statistics.cpp
@@ -111,7 +111,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ConfParameter conf;
   DummyConfFileProcessor confProcessor;
   Nlsr nlsr;
diff --git a/tests/update/test-advertise-crash.cpp b/tests/update/test-advertise-crash.cpp
index e2ded04..23f6e61 100644
--- a/tests/update/test-advertise-crash.cpp
+++ b/tests/update/test-advertise-crash.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-2023,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -63,7 +63,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ConfParameter conf;
   DummyConfFileProcessor confProcessor;
 
diff --git a/tests/update/test-nfd-rib-command-processor.cpp b/tests/update/test-nfd-rib-command-processor.cpp
index 9385790..5105f9c 100644
--- a/tests/update/test-nfd-rib-command-processor.cpp
+++ b/tests/update/test-nfd-rib-command-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-2023,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -87,7 +87,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ConfParameter conf;
   DummyConfFileProcessor confProcessor;
 
diff --git a/tests/update/test-prefix-update-processor.cpp b/tests/update/test-prefix-update-processor.cpp
index 52fb7b1..79e2d90 100644
--- a/tests/update/test-prefix-update-processor.cpp
+++ b/tests/update/test-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-2023,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -125,7 +125,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
 
   ndn::Name siteIdentityName;
   ndn::security::pib::Identity siteIdentity;
diff --git a/tests/update/test-save-delete-prefix.cpp b/tests/update/test-save-delete-prefix.cpp
index 84612e4..3e8ef3b 100644
--- a/tests/update/test-save-delete-prefix.cpp
+++ b/tests/update/test-save-delete-prefix.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-2023,  The University of Memphis,
  *                           Regents of the University of California,
  *                           Arizona Board of Regents.
  *
@@ -154,7 +154,7 @@
   }
 
 public:
-  ndn::util::DummyClientFace face;
+  ndn::DummyClientFace face;
   ndn::Name siteIdentityName, routerIdName;
   ndn::security::pib::Identity siteIdentity, routerId;
 
