diff --git a/daemon/fw/forwarder.cpp b/daemon/fw/forwarder.cpp
index d3fb541..dbfffa4 100644
--- a/daemon/fw/forwarder.cpp
+++ b/daemon/fw/forwarder.cpp
@@ -95,6 +95,9 @@
       const_cast<Data*>(csMatch)->setIncomingFaceId(FACEID_CONTENT_STORE);
       // XXX should we lookup PIT for other Interests that also match csMatch?
 
+      // set PIT straggler timer
+      this->setStragglerTimer(pitEntry);
+
       // goto outgoing Data pipeline
       this->onOutgoingData(*csMatch, inFace);
       return;
diff --git a/tests/daemon/fw/forwarder.cpp b/tests/daemon/fw/forwarder.cpp
index 263967b..f7cea1c 100644
--- a/tests/daemon/fw/forwarder.cpp
+++ b/tests/daemon/fw/forwarder.cpp
@@ -79,6 +79,47 @@
   BOOST_CHECK_EQUAL(forwarder.getCounters().getNOutDatas(), 1);
 }
 
+BOOST_AUTO_TEST_CASE(CsMatched)
+{
+  LimitedIo limitedIo;
+  Forwarder forwarder;
+
+  shared_ptr<DummyFace> face1 = make_shared<DummyFace>();
+  shared_ptr<DummyFace> face2 = make_shared<DummyFace>();
+  shared_ptr<DummyFace> face3 = make_shared<DummyFace>();
+  forwarder.addFace(face1);
+  forwarder.addFace(face2);
+  forwarder.addFace(face3);
+
+  shared_ptr<Interest> interestA = makeInterest("ndn:/A");
+  interestA->setInterestLifetime(time::seconds(4));
+  shared_ptr<Data> dataA = makeData("ndn:/A");
+  dataA->setIncomingFaceId(face3->getId());
+
+  Fib& fib = forwarder.getFib();
+  shared_ptr<fib::Entry> fibEntry = fib.insert(Name("ndn:/A")).first;
+  fibEntry->addNextHop(face2, 0);
+
+  Pit& pit = forwarder.getPit();
+  BOOST_CHECK_EQUAL(pit.size(), 0);
+
+  Cs& cs = forwarder.getCs();
+  BOOST_REQUIRE(cs.insert(*dataA));
+
+  face1->receiveInterest(*interestA);
+  limitedIo.run(LimitedIo::UNLIMITED_OPS, time::milliseconds(5));
+  // Interest matching ContentStore should not be forwarded
+  BOOST_REQUIRE_EQUAL(face2->m_sentInterests.size(), 0);
+
+  BOOST_REQUIRE_EQUAL(face1->m_sentDatas.size(), 1);
+  // IncomingFaceId field should be reset to represent CS
+  BOOST_CHECK_EQUAL(face1->m_sentDatas[0].getIncomingFaceId(), FACEID_CONTENT_STORE);
+
+  limitedIo.run(LimitedIo::UNLIMITED_OPS, time::milliseconds(500));
+  // PIT entry should not be left behind
+  BOOST_CHECK_EQUAL(pit.size(), 0);
+}
+
 class ScopeLocalhostIncomingTestForwarder : public Forwarder
 {
 public:
