diff --git a/daemon/fw/forwarder.cpp b/daemon/fw/forwarder.cpp
index 4c60129..4c91fb7 100644
--- a/daemon/fw/forwarder.cpp
+++ b/daemon/fw/forwarder.cpp
@@ -167,13 +167,8 @@
   NFD_LOG_DEBUG("onContentStoreMiss interest=" << interest.getName());
   ++m_counters.nCsMisses;
 
-  // FIXME Strategies are not prepared to handle non-zero EndpointIds, so always insert
-  //       the in-record and dispatch to strategy with EndpointId=0 for now. Eventually,
-  //       this pipeline will need to be refactored so that strategies can control the
-  //       in-record insertion.
-
   // insert in-record
-  pitEntry->insertOrUpdateInRecord(ingress.face, 0, interest);
+  pitEntry->insertOrUpdateInRecord(ingress.face, interest);
 
   // set PIT expiry timer to the time that the last PIT in-record expires
   auto lastExpiring = std::max_element(pitEntry->in_begin(), pitEntry->in_end(),
@@ -233,7 +228,7 @@
   NFD_LOG_DEBUG("onOutgoingInterest out=" << egress << " interest=" << pitEntry->getName());
 
   // insert out-record
-  pitEntry->insertOrUpdateOutRecord(egress.face, egress.endpoint, interest);
+  pitEntry->insertOrUpdateOutRecord(egress.face, interest);
 
   // send Interest
   egress.face.sendInterest(interest, egress.endpoint);
@@ -311,7 +306,7 @@
     this->insertDeadNonceList(*pitEntry, &ingress.face);
 
     // delete PIT entry's out-record
-    pitEntry->deleteOutRecord(ingress.face, ingress.endpoint);
+    pitEntry->deleteOutRecord(ingress.face);
   }
   // when more than one PIT entry is matched, trigger strategy: before satisfy Interest,
   // and send Data to all matched out faces
@@ -325,7 +320,7 @@
       // remember pending downstreams
       for (const pit::InRecord& inRecord : pitEntry->getInRecords()) {
         if (inRecord.getExpiry() > now) {
-          pendingDownstreams.emplace(&inRecord.getFace(), inRecord.getEndpointId());
+          pendingDownstreams.emplace(&inRecord.getFace(), 0);
         }
       }
 
@@ -345,7 +340,7 @@
 
       // clear PIT entry's in and out records
       pitEntry->clearInRecords();
-      pitEntry->deleteOutRecord(ingress.face, ingress.endpoint);
+      pitEntry->deleteOutRecord(ingress.face);
     }
 
     // foreach pending downstream
@@ -424,7 +419,7 @@
   }
 
   // has out-record?
-  auto outRecord = pitEntry->getOutRecord(ingress.face, ingress.endpoint);
+  auto outRecord = pitEntry->getOutRecord(ingress.face);
   // if no out-record found, drop
   if (outRecord == pitEntry->out_end()) {
     NFD_LOG_DEBUG("onIncomingNack in=" << ingress << " nack=" << nack.getInterest().getName()
@@ -467,7 +462,7 @@
   }
 
   // has in-record?
-  auto inRecord = pitEntry->getInRecord(egress.face, egress.endpoint);
+  auto inRecord = pitEntry->getInRecord(egress.face);
 
   // if no in-record found, drop
   if (inRecord == pitEntry->in_end()) {
@@ -494,7 +489,7 @@
   nackPkt.setHeader(nack);
 
   // erase in-record
-  pitEntry->deleteInRecord(egress.face, egress.endpoint);
+  pitEntry->deleteInRecord(egress.face);
 
   // send Nack on face
   egress.face.sendNack(nackPkt, egress.endpoint);
@@ -542,7 +537,7 @@
   }
   else {
     // insert outgoing Nonce of a specific face
-    auto outRecord = pitEntry.getOutRecord(*upstream, 0);
+    auto outRecord = pitEntry.getOutRecord(*upstream);
     if (outRecord != pitEntry.getOutRecords().end()) {
       m_deadNonceList.add(pitEntry.getName(), outRecord->getLastNonce());
     }
