diff --git a/tools/chunks/catchunks/data-fetcher.cpp b/tools/chunks/catchunks/data-fetcher.cpp
index 313334f..7600016 100644
--- a/tools/chunks/catchunks/data-fetcher.cpp
+++ b/tools/chunks/catchunks/data-fetcher.cpp
@@ -1,8 +1,8 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2016,  Regents of the University of California,
- *                      Colorado State University,
- *                      University Pierre & Marie Curie, Sorbonne University.
+/*
+ * Copyright (c) 2016-2019, Regents of the University of California,
+ *                          Colorado State University,
+ *                          University Pierre & Marie Curie, Sorbonne University.
  *
  * This file is part of ndn-tools (Named Data Networking Essential Tools).
  * See AUTHORS.md for complete list of ndn-tools authors and contributors.
@@ -75,7 +75,7 @@
 {
   if (isRunning()) {
     m_isStopped = true;
-    m_face.removePendingInterest(m_interestId);
+    m_pendingInterest.cancel();
     m_scheduler.cancelAllEvents();
   }
 }
@@ -84,10 +84,10 @@
 DataFetcher::expressInterest(const Interest& interest, const shared_ptr<DataFetcher>& self)
 {
   m_nCongestionRetries = 0;
-  m_interestId = m_face.expressInterest(interest,
-                                        bind(&DataFetcher::handleData, this, _1, _2, self),
-                                        bind(&DataFetcher::handleNack, this, _1, _2, self),
-                                        bind(&DataFetcher::handleTimeout, this, _1, self));
+  m_pendingInterest = m_face.expressInterest(interest,
+                                             bind(&DataFetcher::handleData, this, _1, _2, self),
+                                             bind(&DataFetcher::handleNack, this, _1, _2, self),
+                                             bind(&DataFetcher::handleTimeout, this, _1, self));
 }
 
 void
diff --git a/tools/chunks/catchunks/data-fetcher.hpp b/tools/chunks/catchunks/data-fetcher.hpp
index 5b66450..53e32c0 100644
--- a/tools/chunks/catchunks/data-fetcher.hpp
+++ b/tools/chunks/catchunks/data-fetcher.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2018, Regents of the University of California,
+ * Copyright (c) 2016-2019, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -110,7 +110,7 @@
 private:
   Face& m_face;
   Scheduler m_scheduler;
-  const PendingInterestId* m_interestId;
+  PendingInterestHandle m_pendingInterest;
   DataCallback m_onData;
   FailureCallback m_onNack;
   FailureCallback m_onTimeout;
diff --git a/tools/chunks/catchunks/pipeline-interests-aimd.cpp b/tools/chunks/catchunks/pipeline-interests-aimd.cpp
index 73e22c5..eea122e 100644
--- a/tools/chunks/catchunks/pipeline-interests-aimd.cpp
+++ b/tools/chunks/catchunks/pipeline-interests-aimd.cpp
@@ -86,9 +86,6 @@
 void
 PipelineInterestsAimd::doCancel()
 {
-  for (const auto& entry : m_segmentInfo) {
-    m_face.removePendingInterest(entry.second.interestId);
-  }
   m_checkRtoEvent.cancel();
   m_segmentInfo.clear();
 }
@@ -155,8 +152,6 @@
                   << " is " << m_retxCount[segNo] << std::endl;
       }
     }
-
-    m_face.removePendingInterest(m_segmentInfo[segNo].interestId);
   }
 
   Interest interest(Name(m_prefix).appendSegment(segNo));
@@ -164,26 +159,24 @@
   interest.setMustBeFresh(m_options.mustBeFresh);
   interest.setMaxSuffixComponents(1);
 
-  auto interestId = m_face.expressInterest(interest,
-                                           bind(&PipelineInterestsAimd::handleData, this, _1, _2),
-                                           bind(&PipelineInterestsAimd::handleNack, this, _1, _2),
-                                           bind(&PipelineInterestsAimd::handleLifetimeExpiration, this, _1));
+  SegmentInfo& segInfo = m_segmentInfo[segNo];
+  segInfo.interestHdl = m_face.expressInterest(interest,
+                                               bind(&PipelineInterestsAimd::handleData, this, _1, _2),
+                                               bind(&PipelineInterestsAimd::handleNack, this, _1, _2),
+                                               bind(&PipelineInterestsAimd::handleLifetimeExpiration, this, _1));
+  segInfo.timeSent = time::steady_clock::now();
+  segInfo.rto = m_rttEstimator.getEstimatedRto();
+
   m_nInFlight++;
   m_nSent++;
 
   if (isRetransmission) {
-    SegmentInfo& segInfo = m_segmentInfo[segNo];
-    segInfo.timeSent = time::steady_clock::now();
-    segInfo.rto = m_rttEstimator.getEstimatedRto();
     segInfo.state = SegmentState::Retransmitted;
     m_nRetransmitted++;
   }
   else {
     m_highInterest = segNo;
-    m_segmentInfo[segNo] = {interestId,
-                            time::steady_clock::now(),
-                            m_rttEstimator.getEstimatedRto(),
-                            SegmentState::FirstTimeSent};
+    segInfo.state = SegmentState::FirstTimeSent;
   }
 }
 
@@ -427,7 +420,6 @@
   for (auto it = m_segmentInfo.begin(); it != m_segmentInfo.end();) {
     // cancel fetching all segments that follow
     if (it->first > segNo) {
-      m_face.removePendingInterest(it->second.interestId);
       it = m_segmentInfo.erase(it);
       m_nInFlight--;
     }
diff --git a/tools/chunks/catchunks/pipeline-interests-aimd.hpp b/tools/chunks/catchunks/pipeline-interests-aimd.hpp
index aea2d19..12edb95 100644
--- a/tools/chunks/catchunks/pipeline-interests-aimd.hpp
+++ b/tools/chunks/catchunks/pipeline-interests-aimd.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2016-2018, Regents of the University of California,
+ * Copyright (c) 2016-2019, Regents of the University of California,
  *                          Colorado State University,
  *                          University Pierre & Marie Curie, Sorbonne University.
  *
@@ -76,7 +76,7 @@
  */
 struct SegmentInfo
 {
-  const PendingInterestId* interestId; ///< pending interest ID returned by ndn::Face::expressInterest
+  ScopedPendingInterestHandle interestHdl;
   time::steady_clock::TimePoint timeSent;
   Milliseconds rto;
   SegmentState state;
