diff --git a/tests/route/test-fib.cpp b/tests/route/test-fib.cpp
index d9b4354..7232742 100644
--- a/tests/route/test-fib.cpp
+++ b/tests/route/test-fib.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2024,  The University of Memphis,
+ * Copyright (c) 2014-2025,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -103,7 +103,7 @@
   hops.addNextHop(hop1);
   hops.addNextHop(hop2);
 
-  fib.update("/ndn/name", hops);
+  fib.update("/ndn/name", hops, ndn::nfd::ROUTE_FLAG_CAPTURE);
   face.processEvents(ndn::time::milliseconds(-1));
 
   // Should register faces 1 and 2 for /ndn/name
@@ -136,13 +136,13 @@
   oldHops.addNextHop(hop1);
   oldHops.addNextHop(hop2);
 
-  fib.update("/ndn/name", oldHops);
+  fib.update("/ndn/name", oldHops, ndn::nfd::ROUTE_FLAG_CAPTURE);
   face.processEvents(ndn::time::milliseconds(-1));
 
   BOOST_REQUIRE_EQUAL(interests.size(), 2);
   interests.clear();
 
-  fib.update("/ndn/name", oldHops);
+  fib.update("/ndn/name", oldHops, ndn::nfd::ROUTE_FLAG_CAPTURE);
   face.processEvents(ndn::time::milliseconds(-1));
 
   // Should register face 1 and 2 for /ndn/name
@@ -175,7 +175,7 @@
   oldHops.addNextHop(hop1);
   oldHops.addNextHop(hop2);
 
-  fib.update("/ndn/name", oldHops);
+  fib.update("/ndn/name", oldHops, ndn::nfd::ROUTE_FLAG_CAPTURE);
   face.processEvents(ndn::time::milliseconds(-1));
 
   BOOST_REQUIRE_EQUAL(interests.size(), 2);
@@ -183,7 +183,7 @@
 
   NexthopList empty;
 
-  fib.update("/ndn/name", empty);
+  fib.update("/ndn/name", empty, ndn::nfd::ROUTE_FLAG_CAPTURE);
   face.processEvents(ndn::time::milliseconds(-1));
 
   // Should unregister faces 1 and 2 for /ndn/name
@@ -218,7 +218,7 @@
   hops.addNextHop(hop2);
   hops.addNextHop(hop3);
 
-  fib.update("/ndn/name", hops);
+  fib.update("/ndn/name", hops, ndn::nfd::ROUTE_FLAG_CAPTURE);
   face.processEvents(ndn::time::milliseconds(-1));
 
   // Should only register faces 1 and 2 for /ndn/name
@@ -251,7 +251,7 @@
   hops.addNextHop(hop1);
   hops.addNextHop(hop2);
 
-  fib.update("/ndn/name", hops);
+  fib.update("/ndn/name", hops, ndn::nfd::ROUTE_FLAG_CAPTURE);
   face.processEvents(ndn::time::milliseconds(-1));
 
   // FIB
@@ -264,7 +264,7 @@
   NextHop hop3(router3FaceUri, 5);
   hops.addNextHop(hop3);
 
-  fib.update("/ndn/name", hops);
+  fib.update("/ndn/name", hops, ndn::nfd::ROUTE_FLAG_CAPTURE);
   face.processEvents(ndn::time::milliseconds(-1));
 
   // To maintain a max 2 face requirement, face 3 should be registered and face 2 should be
@@ -309,7 +309,8 @@
   int origSeqNo = fe.seqNo;
   fib.m_table.emplace(name1, std::move(fe));
 
-  fib.scheduleEntryRefresh(fe, [&] (auto& entry) { BOOST_CHECK_EQUAL(origSeqNo + 1, entry.seqNo); });
+  fib.scheduleEntryRefresh(fe, true,
+                           [&] (auto& entry, bool captureFlag) { BOOST_CHECK_EQUAL(origSeqNo + 1, entry.seqNo); });
   this->advanceClocks(ndn::time::milliseconds(10), 1);
 
   // avoid "test case [...] did not check any assertions" message from Boost.Test
@@ -325,7 +326,7 @@
   hops.addNextHop(hop1);
 
   // Simulate update for this neighbor from name prefix table
-  fib.update(router1Name, hops);
+  fib.update(router1Name, hops, ndn::nfd::ROUTE_FLAG_CAPTURE);
   this->advanceClocks(ndn::time::seconds(1));
 
   // Should not send the register interest
@@ -355,21 +356,21 @@
   nhl1.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.13:6363"), 28));
   nhl1.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.9:6363"), 38));
   nhl1.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.26:6363"), 44));
-  fib.update("/test", nhl1);
+  fib.update("/test", nhl1, ndn::nfd::ROUTE_FLAG_CAPTURE);
 
   // Memphis advertises /test
   NexthopList nhl2;
   nhl2.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.9:6363"), 21));
   nhl2.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.13:6363"), 26));
   nhl2.addNextHop(NextHop(ndn::FaceUri("udp4://10.0.0.26:6363"), 42));
-  fib.update("/test", nhl2);
+  fib.update("/test", nhl2, ndn::nfd::ROUTE_FLAG_CAPTURE);
 
   advanceClocks(10_ms);
   face.sentInterests.clear();
   // Memphis withdraws /test
   // NamePrefixTable calls this saying we need to install the Wu routes
   // instead of the existing Memphis' cheaper routes
-  fib.update("/test", nhl1);
+  fib.update("/test", nhl1, ndn::nfd::ROUTE_FLAG_CAPTURE);
 
   advanceClocks(10_ms);
   int numRegister = 0;
diff --git a/tests/route/test-name-prefix-table-entry.cpp b/tests/route/test-name-prefix-table-entry.cpp
index 69f3579..3ce2751 100644
--- a/tests/route/test-name-prefix-table-entry.cpp
+++ b/tests/route/test-name-prefix-table-entry.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2024,  The University of Memphis,
+ * Copyright (c) 2014-2025,  The University of Memphis,
  *                           Regents of the University of California
  *
  * This file is part of NLSR (Named-data Link State Routing).
@@ -30,14 +30,14 @@
 
 BOOST_AUTO_TEST_CASE(NpteConstructorAndNamePrefix)
 {
-  NamePrefixTableEntry npte1("/ndn/memphis.edu/cs");
+  NamePrefixTableEntry npte1("/ndn/memphis.edu/cs", ndn::nfd::ROUTE_FLAG_CAPTURE);
 
   BOOST_CHECK_EQUAL(npte1.getNamePrefix(), "/ndn/memphis.edu/cs");
 }
 
 BOOST_AUTO_TEST_CASE(AddRoutingTableEntry)
 {
-  NamePrefixTableEntry npte1("/ndn/memphis/rtr1");
+  NamePrefixTableEntry npte1("/ndn/memphis/rtr1", ndn::nfd::ROUTE_FLAG_CAPTURE);
   RoutingTablePoolEntry rtpe1("/ndn/memphis/rtr2", 0);
   auto rtpePtr = std::make_shared<RoutingTablePoolEntry>(rtpe1);
 
@@ -51,7 +51,7 @@
 
 BOOST_AUTO_TEST_CASE(RemoveRoutingTableEntry)
 {
-  NamePrefixTableEntry npte1("/ndn/memphis/rtr1");
+  NamePrefixTableEntry npte1("/ndn/memphis/rtr1", ndn::nfd::ROUTE_FLAG_CAPTURE);
   RoutingTablePoolEntry rtpe1("/ndn/memphis/rtr2", 0);
   auto rtpePtr = std::make_shared<RoutingTablePoolEntry>(rtpe1);
 
@@ -70,15 +70,15 @@
 
 BOOST_AUTO_TEST_CASE(EqualsOperatorTwoObj)
 {
-  NamePrefixTableEntry npte1("/ndn/memphis/rtr1");
-  NamePrefixTableEntry npte2("/ndn/memphis/rtr1");
+  NamePrefixTableEntry npte1("/ndn/memphis/rtr1", ndn::nfd::ROUTE_FLAG_CAPTURE);
+  NamePrefixTableEntry npte2("/ndn/memphis/rtr1", ndn::nfd::ROUTE_FLAG_CAPTURE);
 
   BOOST_CHECK_EQUAL(npte1, npte2);
 }
 
 BOOST_AUTO_TEST_CASE(EqualsOperatorOneObjOneName)
 {
-  NamePrefixTableEntry npte1("/ndn/memphis/rtr1");
+  NamePrefixTableEntry npte1("/ndn/memphis/rtr1", ndn::nfd::ROUTE_FLAG_CAPTURE);
 
   BOOST_CHECK_EQUAL(npte1, "/ndn/memphis/rtr1");
 }
diff --git a/tests/route/test-name-prefix-table.cpp b/tests/route/test-name-prefix-table.cpp
index 5d10dd8..95bc97c 100644
--- a/tests/route/test-name-prefix-table.cpp
+++ b/tests/route/test-name-prefix-table.cpp
@@ -149,7 +149,7 @@
 {
   RoutingTablePoolEntry rtpe1("/ndn/memphis/rtr1", 0);
   std::shared_ptr<RoutingTablePoolEntry> rtpePtr = npt.addRtpeToPool(rtpe1);
-  NamePrefixTableEntry npte1("/ndn/memphis/rtr2");
+  NamePrefixTableEntry npte1("/ndn/memphis/rtr2", ndn::nfd::ROUTE_FLAG_CAPTURE);
 
   npt.addEntry("/ndn/memphis/rtr2", "/ndn/memphis/rtr1");
 
@@ -168,7 +168,7 @@
 {
   RoutingTablePoolEntry rtpe1("/ndn/memphis/rtr1", 0);
 
-  NamePrefixTableEntry npte1("/ndn/memphis/rtr2");
+  NamePrefixTableEntry npte1("/ndn/memphis/rtr2", ndn::nfd::ROUTE_FLAG_CAPTURE);
   npt.m_table.push_back(std::make_shared<NamePrefixTableEntry>(npte1));
 
   npt.addEntry("/ndn/memphis/rtr2", "/ndn/memphis/rtr1");
@@ -190,7 +190,7 @@
 
 BOOST_FIXTURE_TEST_CASE(AddNptEntryPtrToRoutingEntry, NamePrefixTableFixture)
 {
-  NamePrefixTableEntry npte1("/ndn/memphis/rtr2");
+  NamePrefixTableEntry npte1("/ndn/memphis/rtr2", ndn::nfd::ROUTE_FLAG_CAPTURE);
   npt.m_table.push_back(std::make_shared<NamePrefixTableEntry>(npte1));
 
   npt.addEntry("/ndn/memphis/rtr2", "/ndn/memphis/rtr1");
@@ -215,8 +215,8 @@
 
 BOOST_FIXTURE_TEST_CASE(RemoveNptEntryPtrFromRoutingEntry, NamePrefixTableFixture)
 {
-  NamePrefixTableEntry npte1("/ndn/memphis/rtr1");
-  NamePrefixTableEntry npte2("/ndn/memphis/rtr2");
+  NamePrefixTableEntry npte1("/ndn/memphis/rtr1", ndn::nfd::ROUTE_FLAG_CAPTURE);
+  NamePrefixTableEntry npte2("/ndn/memphis/rtr2", ndn::nfd::ROUTE_FLAG_CAPTURE);
   RoutingTableEntry rte1("/ndn/memphis/destination1");
   npt.m_table.push_back(std::make_shared<NamePrefixTableEntry>(npte1));
   npt.m_table.push_back(std::make_shared<NamePrefixTableEntry>(npte2));
@@ -254,7 +254,7 @@
   NextHop hop1{ndn::FaceUri("upd4://10.0.0.1"), 0};
   NextHop hop2{ndn::FaceUri("upd4://10.0.0.2"), 1};
   NextHop hop3{ndn::FaceUri("upd4://10.0.0.3"), 2};
-  const NamePrefixTableEntry entry1{"/ndn/router1"};
+  const NamePrefixTableEntry entry1{"/ndn/router1", true};
   npt.addEntry(entry1.getNamePrefix(), destination);
 
   rt.addNextHop(destination, hop1);
