diff --git a/INSTALL.md b/INSTALL.md
index a527086..5ebf050 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -8,18 +8,16 @@
    Please see [Getting Started with ndn-cxx](https://named-data.net/doc/ndn-cxx/current/INSTALL.html)
    for how to install ndn-cxx.
    Note: If you have installed ndn-cxx from a binary package, please make sure development headers
-   are installed (if using Ubuntu PPA, `ndn-cxx-dev` package is needed).
+   are installed (if using Ubuntu PPA, `libndn-cxx-dev` package is needed).
 
    Any operating system and compiler supported by ndn-cxx is supported by ndn-tools.
 
--  ``libpcap``
+-  `libpcap`
 
     Comes with the base system on macOS.
 
     On Ubuntu:
 
-    ::
-
         sudo apt-get install libpcap-dev
 
 ## Build Steps
diff --git a/tests/chunks/pipeline-interests-fixed.t.cpp b/tests/chunks/pipeline-interests-fixed.t.cpp
index d7f17d6..12610be 100644
--- a/tests/chunks/pipeline-interests-fixed.t.cpp
+++ b/tests/chunks/pipeline-interests-fixed.t.cpp
@@ -89,8 +89,7 @@
       BOOST_REQUIRE_EQUAL(face.sentInterests.size(), opt.maxPipelineSize + i + 1);
       // check if the interest for the segment i is well formed
       const auto& sentInterest = face.sentInterests[i];
-      BOOST_CHECK_EQUAL(sentInterest.getExclude().size(), 0);
-      BOOST_CHECK_EQUAL(sentInterest.getMaxSuffixComponents(), 1);
+      BOOST_CHECK_EQUAL(sentInterest.getCanBePrefix(), false);
       BOOST_CHECK_EQUAL(sentInterest.getMustBeFresh(), opt.mustBeFresh);
       BOOST_CHECK_EQUAL(Name(name).isPrefixOf(sentInterest.getName()), true);
       BOOST_CHECK_EQUAL(getSegmentFromPacket(sentInterest), i);
diff --git a/tools/chunks/catchunks/pipeline-interests-adaptive.cpp b/tools/chunks/catchunks/pipeline-interests-adaptive.cpp
index 03a842f..93cd30d 100644
--- a/tools/chunks/catchunks/pipeline-interests-adaptive.cpp
+++ b/tools/chunks/catchunks/pipeline-interests-adaptive.cpp
@@ -155,10 +155,11 @@
     }
   }
 
-  Interest interest(Name(m_prefix).appendSegment(segNo));
-  interest.setInterestLifetime(m_options.interestLifetime);
-  interest.setMustBeFresh(m_options.mustBeFresh);
-  interest.setMaxSuffixComponents(1);
+  auto interest = Interest()
+                  .setName(Name(m_prefix).appendSegment(segNo))
+                  .setCanBePrefix(false)
+                  .setMustBeFresh(m_options.mustBeFresh)
+                  .setInterestLifetime(m_options.interestLifetime);
 
   SegmentInfo& segInfo = m_segmentInfo[segNo];
   segInfo.interestHdl = m_face.expressInterest(interest,
@@ -211,7 +212,7 @@
   if (isStopping())
     return;
 
-  // Data name will not have extra components because MaxSuffixComponents is set to 1
+  // Interest was expressed with CanBePrefix=false
   BOOST_ASSERT(data.getName().equals(interest.getName()));
 
   if (!m_hasFinalBlockId && data.getFinalBlock()) {
diff --git a/tools/chunks/catchunks/pipeline-interests-fixed.cpp b/tools/chunks/catchunks/pipeline-interests-fixed.cpp
index 6df6d27..55fe7fc 100644
--- a/tools/chunks/catchunks/pipeline-interests-fixed.cpp
+++ b/tools/chunks/catchunks/pipeline-interests-fixed.cpp
@@ -78,10 +78,11 @@
   if (m_options.isVerbose)
     std::cerr << "Requesting segment #" << nextSegmentNo << std::endl;
 
-  Interest interest(Name(m_prefix).appendSegment(nextSegmentNo));
-  interest.setInterestLifetime(m_options.interestLifetime);
-  interest.setMustBeFresh(m_options.mustBeFresh);
-  interest.setMaxSuffixComponents(1);
+  auto interest = Interest()
+                  .setName(Name(m_prefix).appendSegment(nextSegmentNo))
+                  .setCanBePrefix(false)
+                  .setMustBeFresh(m_options.mustBeFresh)
+                  .setInterestLifetime(m_options.interestLifetime);
 
   auto fetcher = DataFetcher::fetch(m_face, interest,
                                     m_options.maxRetriesOnTimeoutOrNack,
@@ -114,6 +115,7 @@
   if (isStopping())
     return;
 
+  // Interest was expressed with CanBePrefix=false
   BOOST_ASSERT(data.getName().equals(interest.getName()));
 
   if (m_options.isVerbose)
