diff --git a/src/face.cpp b/src/face.cpp
index f43d077..aef13af 100644
--- a/src/face.cpp
+++ b/src/face.cpp
@@ -17,6 +17,7 @@
 
 #include "management/ndnd-controller.hpp"
 #include "management/nfd-controller.hpp"
+#include "encoding/tlv-nfd-control.hpp"
 
 namespace ndn {
 
@@ -288,12 +289,18 @@
 
 
 void
-Face::onReceiveElement(const Block &block)
+Face::onReceiveElement(const Block &blockFromDaemon)
 {
+  Block block = blockFromDaemon;
+  uint64_t incomingFaceId = std::numeric_limits<uint64_t>::max();
+  if (block.type() == tlv::nfd_control::LocalControlHeader)
+    block = wireDecodeLocalControlHeader(block, incomingFaceId);
+  
   if (block.type() == Tlv::Interest)
     {
       shared_ptr<Interest> interest(new Interest());
       interest->wireDecode(block);
+      interest->setIncomingFaceId(incomingFaceId);
 
       RegisteredPrefixTable::iterator entry = getEntryForRegisteredPrefix(interest->getName());
       if (entry != m_registeredPrefixTable.end()) {
@@ -304,6 +311,7 @@
     {
       shared_ptr<Data> data(new Data());
       data->wireDecode(block);
+      data->setIncomingFaceId(incomingFaceId);
 
       PendingInterestTable::iterator entry = getEntryIndexForExpressedInterest(data->getName());
       if (entry != m_pendingInterestTable.end()) {
@@ -321,6 +329,7 @@
         }
       }
     }
+  // ignore any other type
 }
 
 Face::PendingInterestTable::iterator
@@ -360,4 +369,42 @@
   return longestPrefix;
 }
 
+Block
+Face::wireEncodeLocalControlHeader(const Block& blockWithoutHeader, uint64_t nextHopFaceId)
+{
+  Block localControlHeader = Block(tlv::nfd_control::LocalControlHeader);
+  Block localControlInfo = Block(tlv::nfd_control::LocalControlInfo);
+
+  localControlInfo.push_back
+    (nonNegativeIntegerBlock(tlv::nfd_control::NextHopFaceId, nextHopFaceId));
+
+  localControlHeader.push_back(localControlInfo);
+  localControlHeader.push_back(blockWithoutHeader);
+
+  localControlHeader.encode();
+  return localControlHeader;
+}
+
+Block
+Face::wireDecodeLocalControlHeader(const Block& blockWithHeader, uint64_t& incomingFaceId)
+{
+  blockWithHeader.parse();
+  if (blockWithHeader.elements_size() != 2 ||
+      blockWithHeader.elements_begin()->type() != tlv::nfd_control::LocalControlInfo)
+    {
+      return Block();
+    }
+
+  const Block& localControlInfo = *blockWithHeader.elements_begin();
+  localControlInfo.parse();
+
+  Block::element_const_iterator i = localControlInfo.find(tlv::nfd_control::IncomingFaceId);
+  if (i != localControlInfo.elements_end())
+    {
+      incomingFaceId = readNonNegativeInteger(*i);
+    }
+
+  return *blockWithHeader.elements().rbegin();
+}
+
 } // namespace ndn
