diff --git a/core/common.hpp b/core/common.hpp
index a5a88eb..01f794c 100644
--- a/core/common.hpp
+++ b/core/common.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -69,6 +69,7 @@
 #include <ndn-cxx/util/optional.hpp>
 #include <ndn-cxx/util/scheduler.hpp>
 #include <ndn-cxx/util/signal.hpp>
+#include <ndn-cxx/util/span.hpp>
 #include <ndn-cxx/util/time.hpp>
 
 #include <boost/asio.hpp>
@@ -97,6 +98,7 @@
 
 using ndn::optional;
 using ndn::nullopt;
+using ndn::span;
 using ndn::to_string;
 
 using ndn::Block;
diff --git a/daemon/fw/strategy.cpp b/daemon/fw/strategy.cpp
index 8762e24..7212c52 100644
--- a/daemon/fw/strategy.cpp
+++ b/daemon/fw/strategy.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -297,7 +297,7 @@
 
   const fib::Entry* fibEntry = nullptr;
   for (const auto& delegation : fh) {
-    fibEntry = &fib.findLongestPrefixMatch(delegation.name);
+    fibEntry = &fib.findLongestPrefixMatch(delegation);
     if (fibEntry->hasNextHops()) {
       if (fibEntry->getPrefix().size() == 0) {
         // in consumer region, return the default route
@@ -305,7 +305,7 @@
       }
       else {
         // in default-free zone, use the first delegation that finds a FIB entry
-        NFD_LOG_TRACE("lookupFib delegation=" << delegation.name << " found=" << fibEntry->getPrefix());
+        NFD_LOG_TRACE("lookupFib delegation=" << delegation << " found=" << fibEntry->getPrefix());
       }
       return *fibEntry;
     }
diff --git a/daemon/table/network-region-table.cpp b/daemon/table/network-region-table.cpp
index 4ede386..5869d18 100644
--- a/daemon/table/network-region-table.cpp
+++ b/daemon/table/network-region-table.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -28,11 +28,11 @@
 namespace nfd {
 
 bool
-NetworkRegionTable::isInProducerRegion(const ndn::DelegationList& forwardingHint) const
+NetworkRegionTable::isInProducerRegion(span<const Name> forwardingHint) const
 {
   for (const Name& regionName : *this) {
     for (const auto& delegation : forwardingHint) {
-      if (delegation.name.isPrefixOf(regionName)) {
+      if (delegation.isPrefixOf(regionName)) {
         return true;
       }
     }
diff --git a/daemon/table/network-region-table.hpp b/daemon/table/network-region-table.hpp
index e531a45..96acf87 100644
--- a/daemon/table/network-region-table.hpp
+++ b/daemon/table/network-region-table.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -28,8 +28,6 @@
 
 #include "core/common.hpp"
 
-#include <ndn-cxx/delegation-list.hpp>
-
 namespace nfd {
 
 /** \brief stores a collection of producer region names
@@ -48,11 +46,11 @@
    *  \retval false the Interest has not reached a producer region
    *
    *  If any delegation name in the forwarding hint is a prefix of any region name,
-   *  the Interest has reached the producer region and should be forwarded according to ‎its Name;
+   *  the Interest has reached the producer region and should be forwarded according to its Name;
    *  otherwise, the Interest should be forwarded according to the forwarding hint.
    */
   bool
-  isInProducerRegion(const ndn::DelegationList& forwardingHint) const;
+  isInProducerRegion(span<const Name> forwardingHint) const;
 };
 
 } // namespace nfd
diff --git a/tests/daemon/fw/forwarding-hint.t.cpp b/tests/daemon/fw/forwarding-hint.t.cpp
index da63619..d330395 100644
--- a/tests/daemon/fw/forwarding-hint.t.cpp
+++ b/tests/daemon/fw/forwarding-hint.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -34,6 +34,14 @@
 
 using namespace nfd::tests;
 
+#define CHECK_FH_EQUAL(actual, ...) \
+  do { \
+    std::vector<Name> expected({__VA_ARGS__}); \
+    BOOST_CHECK_EQUAL_COLLECTIONS( \
+      (actual).getForwardingHint().begin(), (actual).getForwardingHint().end(), \
+      expected.begin(), expected.end()); \
+  } while (false)
+
 BOOST_AUTO_TEST_SUITE(Fw)
 BOOST_AUTO_TEST_SUITE(TestForwardingHint)
 
@@ -104,7 +112,7 @@
   consumerExpressInterest(int seq)
   {
     auto interest = makeInterest(Name("/net/ndnsim").appendNumber(seq));
-    interest->setForwardingHint({delTelia, delUcla});
+    interest->setForwardingHint({nameTelia, nameUcla});
     consumerA->getClientFace().expressInterest(*interest, nullptr, nullptr, nullptr);
   }
 
@@ -114,8 +122,8 @@
   shared_ptr<TopologyLink> linkAH, linkHT, linkTP, linkHC, linkCS, linkSQ;
   shared_ptr<TopologyAppLink> consumerA, producerP, producerQ;
 
-  ndn::Delegation delTelia = {10, "/telia/terabits"};
-  ndn::Delegation delUcla = {20, "/ucla/cs"};
+  Name nameTelia = "/telia/terabits";
+  Name nameUcla = "/ucla/cs";
 };
 
 BOOST_FIXTURE_TEST_SUITE(NdnsimTeliaUclaTopology, NdnsimTeliaUclaTopologyFixture)
@@ -128,12 +136,12 @@
   // A forwards Interest according to default route, no change to forwarding hint
   BOOST_CHECK_EQUAL(linkAH->getFace(nodeA).getCounters().nOutInterests, 1);
   const Interest& interestAH = topo.getPcap(linkAH->getFace(nodeA)).sentInterests.at(0);
-  BOOST_CHECK_EQUAL(interestAH.getForwardingHint(), ndn::DelegationList({delTelia, delUcla}));
+  CHECK_FH_EQUAL(interestAH, nameTelia, nameUcla);
 
   // H prefers T, no change to forwarding hint
   BOOST_CHECK_EQUAL(linkHT->getFace(nodeH).getCounters().nOutInterests, 1);
   const Interest& interestHT = topo.getPcap(linkHT->getFace(nodeH)).sentInterests.at(0);
-  BOOST_CHECK_EQUAL(interestHT.getForwardingHint(), ndn::DelegationList({delTelia, delUcla}));
+  CHECK_FH_EQUAL(interestHT, nameTelia, nameUcla);
 
   // T forwards to P, forwarding hint stripped when Interest reaches producer region
   BOOST_CHECK_EQUAL(linkTP->getFace(nodeT).getCounters().nOutInterests, 1);
@@ -157,17 +165,17 @@
   // A forwards Interest according to default route, no change to forwarding hint
   BOOST_CHECK_EQUAL(linkAH->getFace(nodeA).getCounters().nOutInterests, 1);
   const Interest& interestAH = topo.getPcap(linkAH->getFace(nodeA)).sentInterests.at(0);
-  BOOST_CHECK_EQUAL(interestAH.getForwardingHint(), ndn::DelegationList({delTelia, delUcla}));
+  CHECK_FH_EQUAL(interestAH, nameTelia, nameUcla);
 
   // H forwards to C, no change to forwarding hint
   BOOST_CHECK_EQUAL(linkHC->getFace(nodeH).getCounters().nOutInterests, 1);
   const Interest& interestHC = topo.getPcap(linkHC->getFace(nodeH)).sentInterests.at(0);
-  BOOST_CHECK_EQUAL(interestHC.getForwardingHint(), ndn::DelegationList({delTelia, delUcla}));
+  CHECK_FH_EQUAL(interestHC, nameTelia, nameUcla);
 
   // C forwards to S, no change to forwarding hint
   BOOST_CHECK_EQUAL(linkCS->getFace(nodeC).getCounters().nOutInterests, 1);
   const Interest& interestCS = topo.getPcap(linkCS->getFace(nodeC)).sentInterests.at(0);
-  BOOST_CHECK_EQUAL(interestCS.getForwardingHint(), ndn::DelegationList({delTelia, delUcla}));
+  CHECK_FH_EQUAL(interestCS, nameTelia, nameUcla);
 
   // S forwards to Q, forwarding hint stripped when Interest reaches producer region
   BOOST_CHECK_EQUAL(linkSQ->getFace(nodeS).getCounters().nOutInterests, 1);
diff --git a/tests/daemon/table/network-region-table.t.cpp b/tests/daemon/table/network-region-table.t.cpp
index 6ba2678..431e3d3 100644
--- a/tests/daemon/table/network-region-table.t.cpp
+++ b/tests/daemon/table/network-region-table.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2021,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -36,7 +36,7 @@
 
 BOOST_AUTO_TEST_CASE(InProducerRegion)
 {
-  ndn::DelegationList fh{{10, "/telia/terabits"}, {20, "/ucla/cs"}};
+  const std::vector<Name> fh{"/telia/terabits", "/ucla/cs"};
 
   NetworkRegionTable nrt1;
   nrt1.insert("/verizon");
diff --git a/tests/daemon/table/pit-entry.t.cpp b/tests/daemon/table/pit-entry.t.cpp
index 00993ee..d5b71fc 100644
--- a/tests/daemon/table/pit-entry.t.cpp
+++ b/tests/daemon/table/pit-entry.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2020,  Regents of the University of California,
+ * Copyright (c) 2014-2022,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -58,7 +58,7 @@
   BOOST_CHECK_EQUAL(entry.canMatch(*interest3), true);
 
   auto interest4 = makeInterest("/A");
-  interest4->setForwardingHint({{10, "/telia/terabits"}, {20, "/ucla/cs"}});
+  interest4->setForwardingHint({"/telia/terabits", "/ucla/cs"});
   BOOST_CHECK_EQUAL(entry.canMatch(*interest4), false); // expected failure until #3162
 
   auto interest5 = makeInterest("/A", true);
