diff --git a/tests/daemon/face/face.t.cpp b/tests/daemon/face/face.t.cpp
index 165d5db..346f609 100644
--- a/tests/daemon/face/face.t.cpp
+++ b/tests/daemon/face/face.t.cpp
@@ -106,33 +106,29 @@
   face1->afterReceiveNack.connect(bind([&nReceivedNacks] { ++nReceivedNacks; }));
 
   for (size_t i = 0; i < nInInterests; ++i) {
-    shared_ptr<Interest> interest = makeInterest("/JSQdqward4");
-    face1->receiveInterest(*interest, 0);
+    face1->receiveInterest(*makeInterest("/JSQdqward4"), 0);
   }
 
   for (size_t i = 0; i < nInData; ++i) {
-    shared_ptr<Data> data = makeData("/hT8FDigWn1");
-    face1->receiveData(*data, 0);
+    face1->receiveData(*makeData("/hT8FDigWn1"), 0);
   }
 
   for (size_t i = 0; i < nInNacks; ++i) {
-    lp::Nack nack = makeNack("/StnEVTj4Ex", 561, lp::NackReason::CONGESTION);
-    face1->receiveNack(nack, 0);
+    face1->receiveNack(makeNack(*makeInterest("/StnEVTj4Ex", false, nullopt, 561),
+                                lp::NackReason::CONGESTION), 0);
   }
 
   for (size_t i = 0; i < nOutInterests; ++i) {
-    shared_ptr<Interest> interest = makeInterest("/XyUAFYQDmd");
-    face1->sendInterest(*interest, 0);
+    face1->sendInterest(*makeInterest("/XyUAFYQDmd"), 0);
   }
 
   for (size_t i = 0; i < nOutData; ++i) {
-    shared_ptr<Data> data = makeData("/GigPEtPH6");
-    face1->sendData(*data, 0);
+    face1->sendData(*makeData("/GigPEtPH6"), 0);
   }
 
   for (size_t i = 0; i < nOutNacks; ++i) {
-    lp::Nack nack = makeNack("/9xK6FbwIBM", 365, lp::NackReason::CONGESTION);
-    face1->sendNack(nack, 0);
+    face1->sendNack(makeNack(*makeInterest("/9xK6FbwIBM", false, nullopt, 365),
+                             lp::NackReason::CONGESTION), 0);
   }
 
   BOOST_CHECK_EQUAL(face1->getCounters().nInInterests, nInInterests);
diff --git a/tests/daemon/face/generic-link-service.t.cpp b/tests/daemon/face/generic-link-service.t.cpp
index fc5efc2..8f0dbae 100644
--- a/tests/daemon/face/generic-link-service.t.cpp
+++ b/tests/daemon/face/generic-link-service.t.cpp
@@ -139,7 +139,8 @@
   options.allowLocalFields = false;
   initialize(options);
 
-  auto nack1 = makeNack("/localhost/test", 323, lp::NackReason::NO_ROUTE);
+  auto nack1 = makeNack(*makeInterest("/localhost/test", false, nullopt, 323),
+                        lp::NackReason::NO_ROUTE);
   face->sendNack(nack1, 0);
 
   BOOST_CHECK_EQUAL(service->getCounters().nOutNacks, 1);
@@ -172,7 +173,7 @@
   options.allowLocalFields = false;
   initialize(options);
 
-  shared_ptr<Interest> interest1 = makeInterest("/23Rd9hEiR");
+  auto interest1 = makeInterest("/23Rd9hEiR");
   lp::Packet lpPacket;
   lpPacket.set<lp::FragmentField>(std::make_pair(
     interest1->wireEncode().begin(), interest1->wireEncode().end()));
@@ -207,7 +208,7 @@
   options.allowLocalFields = false;
   initialize(options);
 
-  shared_ptr<Data> data1 = makeData("/12345689");
+  auto data1 = makeData("/12345689");
   lp::Packet lpPacket;
   lpPacket.set<lp::FragmentField>(std::make_pair(
     data1->wireEncode().begin(), data1->wireEncode().end()));
@@ -227,7 +228,8 @@
   options.allowLocalFields = false;
   initialize(options);
 
-  lp::Nack nack1 = makeNack("/localhost/test", 323, lp::NackReason::NO_ROUTE);
+  lp::Nack nack1 = makeNack(*makeInterest("/localhost/test", false, nullopt, 323),
+                            lp::NackReason::NO_ROUTE);
   lp::Packet lpPacket;
   lpPacket.set<lp::FragmentField>(std::make_pair(
     nack1.getInterest().wireEncode().begin(), nack1.getInterest().wireEncode().end()));
@@ -273,7 +275,7 @@
 
   transport->setMtu(55);
 
-  shared_ptr<Data> data = makeData("/test/data/123456789/987654321/123456789");
+  auto data = makeData("/test/data/123456789/987654321/123456789");
   face->sendData(*data, 0);
 
   BOOST_CHECK_EQUAL(transport->sentPackets.size(), 0);
@@ -289,7 +291,7 @@
 
   transport->setMtu(MTU_UNLIMITED);
 
-  shared_ptr<Data> data = makeData("/test/data/123456789/987654321/123456789");
+  auto data = makeData("/test/data/123456789/987654321/123456789");
   face->sendData(*data, 0);
 
   BOOST_CHECK_EQUAL(transport->sentPackets.size(), 1);
@@ -304,7 +306,7 @@
 
   transport->setMtu(105);
 
-  shared_ptr<Data> data = makeData("/test/data/123456789/987654321/123456789");
+  auto data = makeData("/test/data/123456789/987654321/123456789");
   face->sendData(*data, 0);
 
   BOOST_CHECK_EQUAL(transport->sentPackets.size(), 1);
@@ -319,7 +321,7 @@
 
   transport->setMtu(60);
 
-  shared_ptr<Data> data = makeData("/test/data/123456789/987654321/123456789");
+  auto data = makeData("/test/data/123456789/987654321/123456789");
   face->sendData(*data, 0);
 
   BOOST_CHECK_GT(transport->sentPackets.size(), 1);
@@ -332,7 +334,7 @@
   options.allowReassembly = true;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest(
+  auto interest = makeInterest(
     "/mt7P130BHXmtLm5dwaY5dpUM6SWYNN2B05g7y3UhsQuLvDdnTWdNnTeEiLuW3FAbJRSG3tzQ0UfaSEgG9rvYHmsKtgPMag1Hj4Tr");
   lp::Packet packet(interest->wireEncode());
 
@@ -371,7 +373,7 @@
   options.allowReassembly = false;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/IgFe6NvH");
+  auto interest = makeInterest("/IgFe6NvH");
   lp::Packet packet(interest->wireEncode());
   packet.set<lp::FragIndexField>(140);
 
@@ -388,7 +390,7 @@
   options.allowReassembly = false;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/SeGmEjvIVX");
+  auto interest = makeInterest("/SeGmEjvIVX");
   lp::Packet packet(interest->wireEncode());
   packet.set<lp::FragCountField>(276);
 
@@ -446,7 +448,8 @@
   options.reliabilityOptions.isEnabled = true;
   initialize(options);
 
-  auto nack1 = makeNack("/localhost/test", 323, lp::NackReason::NO_ROUTE);
+  auto nack1 = makeNack(*makeInterest("/localhost/test", false, nullopt, 323),
+                        lp::NackReason::NO_ROUTE);
   face->sendNack(nack1, 0);
 
   BOOST_CHECK_EQUAL(service->getCounters().nOutNacks, 1);
@@ -472,7 +475,7 @@
   BOOST_CHECK_EQUAL(service->m_nMarkedSinceInMarkingState, 0);
   BOOST_CHECK_EQUAL(service->getCounters().nCongestionMarked, 0);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
 
   // congestion threshold will be 32768 bytes, since min(65536, 65536 / 2) = 32768 bytes
 
@@ -508,7 +511,7 @@
   BOOST_CHECK_EQUAL(service->m_nMarkedSinceInMarkingState, 0);
   BOOST_CHECK_EQUAL(service->getCounters().nCongestionMarked, 0);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
 
   // congestion threshold will be 32768 bytes, since min(65536, 65536 / 2) = 32768 bytes
 
@@ -750,7 +753,7 @@
   BOOST_CHECK_EQUAL(service->m_nMarkedSinceInMarkingState, 0);
   BOOST_CHECK_EQUAL(service->getCounters().nCongestionMarked, 0);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
 
   // congestion threshold will be 65536 bytes, since the transport reports that it cannot measure
   // the queue capacity
@@ -799,7 +802,7 @@
   options.allowLocalFields = true;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   lp::Packet packet(interest->wireEncode());
   packet.set<lp::NextHopFaceIdField>(1000);
 
@@ -818,7 +821,7 @@
   options.allowLocalFields = false;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   lp::Packet packet(interest->wireEncode());
   packet.set<lp::NextHopFaceIdField>(1000);
 
@@ -835,7 +838,7 @@
   options.allowLocalFields = true;
   initialize(options);
 
-  shared_ptr<Data> data = makeData("/12345678");
+  auto data = makeData("/12345678");
   lp::Packet packet(data->wireEncode());
   packet.set<lp::NextHopFaceIdField>(1000);
 
@@ -852,7 +855,8 @@
   options.allowLocalFields = true;
   initialize(options);
 
-  lp::Nack nack = makeNack("/localhost/test", 123, lp::NackReason::NO_ROUTE);
+  lp::Nack nack = makeNack(*makeInterest("/localhost/test", false, nullopt, 123),
+                           lp::NackReason::NO_ROUTE);
   lp::Packet packet;
   packet.set<lp::FragmentField>(std::make_pair(
     nack.getInterest().wireEncode().begin(), nack.getInterest().wireEncode().end()));
@@ -873,7 +877,7 @@
   initialize(options);
   // CachePolicy is unprivileged and does not require allowLocalFields option.
 
-  shared_ptr<Data> data = makeData("/12345678");
+  auto data = makeData("/12345678");
   lp::Packet packet(data->wireEncode());
   packet.set<lp::CachePolicyField>(lp::CachePolicy().setPolicy(lp::CachePolicyType::NO_CACHE));
 
@@ -892,7 +896,7 @@
   options.allowLocalFields = true;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   lp::Packet packet(interest->wireEncode());
   lp::CachePolicy policy;
   policy.setPolicy(lp::CachePolicyType::NO_CACHE);
@@ -911,7 +915,8 @@
   options.allowLocalFields = true;
   initialize(options);
 
-  lp::Nack nack = makeNack("/localhost/test", 123, lp::NackReason::NO_ROUTE);
+  lp::Nack nack = makeNack(*makeInterest("/localhost/test", false, nullopt, 123),
+                           lp::NackReason::NO_ROUTE);
   lp::Packet packet(nack.getInterest().wireEncode());
   packet.set<lp::NackField>(nack.getHeader());
   lp::CachePolicy policy;
@@ -931,7 +936,7 @@
   options.allowLocalFields = true;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   interest->setTag(make_shared<lp::IncomingFaceIdTag>(1000));
 
   face->sendInterest(*interest, 0);
@@ -949,7 +954,7 @@
   options.allowLocalFields = false;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   interest->setTag(make_shared<lp::IncomingFaceIdTag>(1000));
 
   face->sendInterest(*interest, 0);
@@ -966,7 +971,7 @@
   options.allowLocalFields = true;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   lp::Packet packet(interest->wireEncode());
   packet.set<lp::IncomingFaceIdField>(1000);
 
@@ -984,7 +989,7 @@
   options.allowLocalFields = true;
   initialize(options);
 
-  shared_ptr<Data> data = makeData("/z1megUh9Bj");
+  auto data = makeData("/z1megUh9Bj");
   lp::Packet packet(data->wireEncode());
   packet.set<lp::IncomingFaceIdField>(1000);
 
@@ -1002,7 +1007,8 @@
   options.allowLocalFields = true;
   initialize(options);
 
-  lp::Nack nack = makeNack("/TPAhdiHz", 278, lp::NackReason::CONGESTION);
+  lp::Nack nack = makeNack(*makeInterest("/TPAhdiHz", false, nullopt, 278),
+                           lp::NackReason::CONGESTION);
   lp::Packet packet(nack.getInterest().wireEncode());
   packet.set<lp::NackField>(nack.getHeader());
   packet.set<lp::IncomingFaceIdField>(1000);
@@ -1016,7 +1022,7 @@
 
 BOOST_AUTO_TEST_CASE(SendCongestionMarkInterest)
 {
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   interest->setTag(make_shared<lp::CongestionMarkTag>(1));
 
   face->sendInterest(*interest, 0);
@@ -1029,7 +1035,7 @@
 
 BOOST_AUTO_TEST_CASE(SendCongestionMarkData)
 {
-  shared_ptr<Data> data = makeData("/12345678");
+  auto data = makeData("/12345678");
   data->setTag(make_shared<lp::CongestionMarkTag>(0));
 
   face->sendData(*data, 0);
@@ -1042,7 +1048,8 @@
 
 BOOST_AUTO_TEST_CASE(SendCongestionMarkNack)
 {
-  lp::Nack nack = makeNack("/localhost/test", 123, lp::NackReason::NO_ROUTE);
+  lp::Nack nack = makeNack(*makeInterest("/localhost/test", false, nullopt, 123),
+                           lp::NackReason::NO_ROUTE);
   nack.setTag(make_shared<lp::CongestionMarkTag>(std::numeric_limits<uint64_t>::max()));
 
   face->sendNack(nack, 0);
@@ -1055,7 +1062,7 @@
 
 BOOST_AUTO_TEST_CASE(ReceiveCongestionMarkInterest)
 {
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   lp::Packet packet(interest->wireEncode());
   packet.set<lp::CongestionMarkField>(1);
 
@@ -1069,7 +1076,7 @@
 
 BOOST_AUTO_TEST_CASE(ReceiveCongestionMarkData)
 {
-  shared_ptr<Data> data = makeData("/12345678");
+  auto data = makeData("/12345678");
   lp::Packet packet(data->wireEncode());
   packet.set<lp::CongestionMarkField>(1);
 
@@ -1083,7 +1090,8 @@
 
 BOOST_AUTO_TEST_CASE(ReceiveCongestionMarkNack)
 {
-  lp::Nack nack = makeNack("/localhost/test", 123, lp::NackReason::NO_ROUTE);
+  lp::Nack nack = makeNack(*makeInterest("/localhost/test", false, nullopt, 123),
+                           lp::NackReason::NO_ROUTE);
   lp::Packet packet;
   packet.set<lp::FragmentField>(std::make_pair(
     nack.getInterest().wireEncode().begin(), nack.getInterest().wireEncode().end()));
@@ -1104,7 +1112,7 @@
   options.allowSelfLearning = true;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   interest->setTag(make_shared<lp::NonDiscoveryTag>(lp::EmptyValue{}));
 
   face->sendInterest(*interest, 0);
@@ -1120,7 +1128,7 @@
   options.allowSelfLearning = false;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   interest->setTag(make_shared<lp::NonDiscoveryTag>(lp::EmptyValue{}));
 
   face->sendInterest(*interest, 0);
@@ -1136,7 +1144,7 @@
   options.allowSelfLearning = true;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   lp::Packet packet(interest->wireEncode());
   packet.set<lp::NonDiscoveryField>(lp::EmptyValue{});
 
@@ -1153,7 +1161,7 @@
   options.allowSelfLearning = false;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   lp::Packet packet(interest->wireEncode());
   packet.set<lp::NonDiscoveryField>(lp::EmptyValue{});
 
@@ -1172,7 +1180,7 @@
   options.allowSelfLearning = true;
   initialize(options);
 
-  shared_ptr<Data> data = makeData("/12345678");
+  auto data = makeData("/12345678");
   lp::Packet packet(data->wireEncode());
   packet.set<lp::NonDiscoveryField>(lp::EmptyValue{});
 
@@ -1188,7 +1196,8 @@
   options.allowSelfLearning = true;
   initialize(options);
 
-  lp::Nack nack = makeNack("/localhost/test", 123, lp::NackReason::NO_ROUTE);
+  lp::Nack nack = makeNack(*makeInterest("/localhost/test", false, nullopt, 123),
+                           lp::NackReason::NO_ROUTE);
   lp::Packet packet;
   packet.set<lp::FragmentField>(std::make_pair(
     nack.getInterest().wireEncode().begin(), nack.getInterest().wireEncode().end()));
@@ -1207,7 +1216,7 @@
   options.allowSelfLearning = true;
   initialize(options);
 
-  shared_ptr<Data> data = makeData("/12345678");
+  auto data = makeData("/12345678");
   auto pah = makePrefixAnnHeader("/local/ndn/prefix");
   data->setTag(make_shared<lp::PrefixAnnouncementTag>(pah));
 
@@ -1224,7 +1233,7 @@
   options.allowSelfLearning = false;
   initialize(options);
 
-  shared_ptr<Data> data = makeData("/12345678");
+  auto data = makeData("/12345678");
   auto pah = makePrefixAnnHeader("/local/ndn/prefix");
   data->setTag(make_shared<lp::PrefixAnnouncementTag>(pah));
 
@@ -1241,7 +1250,7 @@
   options.allowSelfLearning = true;
   initialize(options);
 
-  shared_ptr<Data> data = makeData("/12345678");
+  auto data = makeData("/12345678");
   lp::Packet packet(data->wireEncode());
   auto pah = makePrefixAnnHeader("/local/ndn/prefix");
   packet.set<lp::PrefixAnnouncementField>(pah);
@@ -1259,7 +1268,7 @@
   options.allowSelfLearning = false;
   initialize(options);
 
-  shared_ptr<Data> data = makeData("/12345678");
+  auto data = makeData("/12345678");
   lp::Packet packet(data->wireEncode());
   auto pah = makePrefixAnnHeader("/local/ndn/prefix");
   packet.set<lp::PrefixAnnouncementField>(pah);
@@ -1279,7 +1288,7 @@
   options.allowSelfLearning = true;
   initialize(options);
 
-  shared_ptr<Interest> interest = makeInterest("/12345678");
+  auto interest = makeInterest("/12345678");
   lp::Packet packet(interest->wireEncode());
   auto pah = makePrefixAnnHeader("/local/ndn/prefix");
   packet.set<lp::PrefixAnnouncementField>(pah);
@@ -1296,7 +1305,8 @@
   options.allowSelfLearning = true;
   initialize(options);
 
-  lp::Nack nack = makeNack("/localhost/test", 123, lp::NackReason::NO_ROUTE);
+  lp::Nack nack = makeNack(*makeInterest("/localhost/test", false, nullopt, 123),
+                           lp::NackReason::NO_ROUTE);
   lp::Packet packet;
   packet.set<lp::FragmentField>(std::make_pair(
     nack.getInterest().wireEncode().begin(), nack.getInterest().wireEncode().end()));
diff --git a/tests/daemon/face/internal-face.t.cpp b/tests/daemon/face/internal-face.t.cpp
index a830e3e..bab5ea5 100644
--- a/tests/daemon/face/internal-face.t.cpp
+++ b/tests/daemon/face/internal-face.t.cpp
@@ -102,7 +102,7 @@
 
 BOOST_AUTO_TEST_CASE(ReceiveInterestSendData)
 {
-  auto interest = makeInterest("/PQstEJGdL");
+  auto interest = makeInterest("/PQstEJGdL", true);
 
   bool hasReceivedData = false;
   clientFace->expressInterest(*interest,
@@ -125,7 +125,7 @@
 
 BOOST_AUTO_TEST_CASE(ReceiveInterestSendNack)
 {
-  auto interest = makeInterest("/1HrsRM1X", 152);
+  auto interest = makeInterest("/1HrsRM1X");
 
   bool hasReceivedNack = false;
   clientFace->expressInterest(*interest,
@@ -140,7 +140,7 @@
   BOOST_REQUIRE_EQUAL(receivedInterests.size(), 1);
   BOOST_CHECK_EQUAL(receivedInterests.back().getName(), "/1HrsRM1X");
 
-  forwarderFace->sendNack(makeNack("/1HrsRM1X", 152, lp::NackReason::NO_ROUTE), 0);
+  forwarderFace->sendNack(makeNack(*interest, lp::NackReason::NO_ROUTE), 0);
   this->advanceClocks(1_ms, 10);
 
   BOOST_CHECK(hasReceivedNack);
@@ -157,7 +157,7 @@
       clientFace->put(*makeData("/Wpc8TnEeoF/f6SzV8hD/3uytUJCuIi"));
     });
 
-  forwarderFace->sendInterest(*makeInterest("/Wpc8TnEeoF/f6SzV8hD"), 0);
+  forwarderFace->sendInterest(*makeInterest("/Wpc8TnEeoF/f6SzV8hD", true), 0);
   this->advanceClocks(1_ms, 10);
 
   BOOST_CHECK(hasDeliveredInterest);
@@ -167,16 +167,17 @@
 
 BOOST_AUTO_TEST_CASE(SendInterestReceiveNack)
 {
+  auto interest = makeInterest("/4YgJKWcXN/5oaTe05o");
+
   bool hasDeliveredInterest = false;
   clientFace->setInterestFilter("/4YgJKWcXN",
     [this, &hasDeliveredInterest] (const ndn::InterestFilter&, const Interest& interest) {
       hasDeliveredInterest = true;
       BOOST_CHECK_EQUAL(interest.getName(), "/4YgJKWcXN/5oaTe05o");
-
-      clientFace->put(makeNack("/4YgJKWcXN/5oaTe05o", 191, lp::NackReason::NO_ROUTE));
+      clientFace->put(makeNack(interest, lp::NackReason::NO_ROUTE));
     });
 
-  forwarderFace->sendInterest(*makeInterest("/4YgJKWcXN/5oaTe05o", 191), 0);
+  forwarderFace->sendInterest(*interest, 0);
   this->advanceClocks(1_ms, 10);
 
   BOOST_CHECK(hasDeliveredInterest);
diff --git a/tests/daemon/face/lp-reliability.t.cpp b/tests/daemon/face/lp-reliability.t.cpp
index a4ec6d3..5e73c03 100644
--- a/tests/daemon/face/lp-reliability.t.cpp
+++ b/tests/daemon/face/lp-reliability.t.cpp
@@ -56,6 +56,7 @@
   {
     if (frags.front().has<lp::FragmentField>()) {
       Interest interest("/test/prefix");
+      interest.setCanBePrefix(false);
       lp::Packet pkt;
       pkt.add<lp::FragmentField>(make_pair(interest.wireEncode().begin(), interest.wireEncode().end()));
       m_reliability.handleOutgoing(frags, std::move(pkt), true);
