diff --git a/src/clients/iterative-query-controller.cpp b/src/clients/iterative-query-controller.cpp
index ccb9451..e923e77 100644
--- a/src/clients/iterative-query-controller.cpp
+++ b/src/clients/iterative-query-controller.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.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -238,7 +238,7 @@
 
   // addLink
   if (m_lastLink.hasWire()) {
-    query.setDelegationListFromLink(Link(m_lastLink));
+    query.setForwardingHintFromLink(Link(m_lastLink));
   }
 
   switch (m_step) {
diff --git a/src/clients/query.cpp b/src/clients/query.cpp
index 9bc5c60..d008d3b 100644
--- a/src/clients/query.cpp
+++ b/src/clients/query.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.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -47,13 +47,7 @@
 
   m_zone = zone;
 
-  if (!interest.getForwardingHint().empty()) {
-    m_delegationList = interest.getForwardingHint();
-  }
-  else {
-    m_delegationList = DelegationList();
-  }
-
+  m_forwardingHint.assign(interest.getForwardingHint().begin(), interest.getForwardingHint().end());
 
   size_t len = zone.size();
   m_queryType = interest.getName().get(len);
@@ -75,17 +69,15 @@
   Interest interest(name);
   interest.setCanBePrefix(true);
   interest.setInterestLifetime(m_interestLifetime);
-  if (!m_delegationList.empty()) {
-    interest.setForwardingHint(m_delegationList);
-  }
+  interest.setForwardingHint(m_forwardingHint);
 
   return interest;
 }
 
 void
-Query::setDelegationListFromLink(const Link& link)
+Query::setForwardingHintFromLink(const Link& link)
 {
-  m_delegationList = link.getDelegationList();
+  m_forwardingHint.assign(link.getDelegationList().begin(), link.getDelegationList().end());
 }
 
 std::ostream&
diff --git a/src/clients/query.hpp b/src/clients/query.hpp
index bd7ff25..68f26ee 100644
--- a/src/clients/query.hpp
+++ b/src/clients/query.hpp
@@ -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.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -60,7 +60,7 @@
   fromInterest(const Name& zone, const Interest& interest);
 
   void
-  setDelegationListFromLink(const Link& link);
+  setForwardingHintFromLink(const Link& link);
 
   bool
   operator==(const Query& other) const
@@ -170,21 +170,21 @@
   }
 
   /**
-   * @brief set link object
+   * @brief set ForwardingHint
    */
   void
-  setDelegationList(const DelegationList& delegations)
+  setForwardingHint(std::vector<Name> forwardingHint)
   {
-    m_delegationList = delegations;
+    m_forwardingHint = std::move(forwardingHint);
   }
 
   /**
-   * @brief get Link object
+   * @brief get ForwardingHint
    */
-  const DelegationList&
-  getDelegationList() const
+  span<const Name>
+  getForwardingHint() const
   {
-    return m_delegationList;
+    return m_forwardingHint;
   }
 
 private:
@@ -193,7 +193,7 @@
   Name m_rrLabel;
   name::Component m_rrType;
   time::milliseconds m_interestLifetime;
-  DelegationList m_delegationList;
+  std::vector<Name> m_forwardingHint;
 };
 
 std::ostream&
diff --git a/src/daemon/rrset-factory.cpp b/src/daemon/rrset-factory.cpp
index d0938a1..cded8e0 100644
--- a/src/daemon/rrset-factory.cpp
+++ b/src/daemon/rrset-factory.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.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -117,7 +117,7 @@
 RrsetFactory::generateNsRrset(const Name& label,
                               uint64_t version,
                               time::seconds ttl,
-                              const ndn::DelegationList& delegations)
+                              std::vector<Name> delegations)
 {
   if (!m_checked) {
     NDN_THROW(Error("You have to call checkZoneKey before call generate functions"));
@@ -131,7 +131,7 @@
   Rrset& rrset = rrsetAndName.first;
 
   Link link(name);
-  link.setDelegationList(delegations);
+  link.setDelegationList(std::move(delegations));
 
   setContentType(link, NDNS_LINK, ttl);
   sign(link);
diff --git a/src/daemon/rrset-factory.hpp b/src/daemon/rrset-factory.hpp
index bab99ca..bffb093 100644
--- a/src/daemon/rrset-factory.hpp
+++ b/src/daemon/rrset-factory.hpp
@@ -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.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -57,7 +57,7 @@
   generateNsRrset(const Name& label,
                   uint64_t version,
                   time::seconds ttl,
-                  const ndn::DelegationList& delegations);
+                  std::vector<Name> delegations);
 
   Rrset
   generateTxtRrset(const Name& label,
diff --git a/src/mgmt/management-tool.cpp b/src/mgmt/management-tool.cpp
index 6d34997..02299c9 100644
--- a/src/mgmt/management-tool.cpp
+++ b/src/mgmt/management-tool.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.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -475,11 +475,8 @@
           }
           else {
             Link link(rrset.getData());
-            const DelegationList& ds = link.getDelegationList();
-            for (const auto& i: ds) {
-              std::string str = std::to_string(i.preference);
-                + "," + i.name.toUri() + ";";
-              os << str;
+            for (const auto& delegation : link.getDelegationList()) {
+              os << delegation << ";";
             }
           }
           os << std::endl;
diff --git a/src/validator/certificate-fetcher-ndns-cert.cpp b/src/validator/certificate-fetcher-ndns-cert.cpp
index a29afe0..cd4a0ce 100644
--- a/src/validator/certificate-fetcher-ndns-cert.cpp
+++ b/src/validator/certificate-fetcher-ndns-cert.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.
  *
  * This file is part of NDNS (Named Data Networking Domain Name Service).
  * See AUTHORS.md for complete list of NDNS authors and contributors.
@@ -85,8 +85,9 @@
 
   if (data.getContentType() == NDNS_LINK) {
     Link link(data.wireEncode());
-    if (!link.getDelegationList().empty()) {
-      interest.setForwardingHint(link.getDelegationList());
+    auto delList = link.getDelegationList();
+    if (!delList.empty()) {
+      interest.setForwardingHint({delList.begin(), delList.end()});
       NDNS_LOG_INFO(" [* -> *] sending interest with LINK:" << interestName);
     }
     else {
