diff --git a/daemon/fw/best-route-strategy.hpp b/daemon/fw/best-route-strategy.hpp
index c29caae..4d7a5b0 100644
--- a/daemon/fw/best-route-strategy.hpp
+++ b/daemon/fw/best-route-strategy.hpp
@@ -8,7 +8,6 @@
 #define NFD_FW_BEST_ROUTE_STRATEGY_HPP
 
 #include "strategy.hpp"
-#include "forwarder.hpp"
 
 namespace nfd {
 namespace fw {
diff --git a/daemon/fw/broadcast-strategy.hpp b/daemon/fw/broadcast-strategy.hpp
index 7818e90..41868ed 100644
--- a/daemon/fw/broadcast-strategy.hpp
+++ b/daemon/fw/broadcast-strategy.hpp
@@ -8,7 +8,6 @@
 #define NFD_FW_BROADCAST_STRATEGY_HPP
 
 #include "strategy.hpp"
-#include "forwarder.hpp"
 
 namespace nfd {
 namespace fw {
diff --git a/daemon/fw/client-control-strategy.cpp b/daemon/fw/client-control-strategy.cpp
new file mode 100644
index 0000000..eacd604
--- /dev/null
+++ b/daemon/fw/client-control-strategy.cpp
@@ -0,0 +1,51 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (C) 2014 Named Data Networking Project
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "client-control-strategy.hpp"
+
+namespace nfd {
+namespace fw {
+
+NFD_LOG_INIT("ClientControlStrategy");
+
+ClientControlStrategy::ClientControlStrategy(Forwarder& forwarder)
+  : BestRouteStrategy(forwarder)
+{
+}
+
+ClientControlStrategy::~ClientControlStrategy()
+{
+}
+
+void
+ClientControlStrategy::afterReceiveInterest(const Face& inFace,
+                                            const Interest& interest,
+                                            shared_ptr<fib::Entry> fibEntry,
+                                            shared_ptr<pit::Entry> pitEntry)
+{
+  // Strategy needn't check whether LocalControlHeader-NextHopFaceId is enabled.
+  // LocalFace does this check.
+  if (!interest.getLocalControlHeader().hasNextHopFaceId()) {
+    this->BestRouteStrategy::afterReceiveInterest(inFace, interest, fibEntry, pitEntry);
+    return;
+  }
+
+  FaceId outFaceId = static_cast<FaceId>(interest.getNextHopFaceId());
+  shared_ptr<Face> outFace = this->getFace(outFaceId);
+  if (!static_cast<bool>(outFace)) {
+    // If outFace doesn't exist, it's better to reject the Interest
+    // than to use BestRouteStrategy.
+    NFD_LOG_WARN("Interest " << interest.getName() <<
+                 " NextHopFaceId=" << outFaceId << " non-existent face");
+    this->rejectPendingInterest(pitEntry);
+    return;
+  }
+
+  this->sendInterest(pitEntry, outFace);
+}
+
+} // namespace fw
+} // namespace nfd
diff --git a/daemon/fw/client-control-strategy.hpp b/daemon/fw/client-control-strategy.hpp
new file mode 100644
index 0000000..48f45b3
--- /dev/null
+++ b/daemon/fw/client-control-strategy.hpp
@@ -0,0 +1,37 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (C) 2014 Named Data Networking Project
+ * See COPYING for copyright and distribution information.
+ */
+
+#ifndef NFD_FW_CLIENT_CONTROL_STRATEGY_HPP
+#define NFD_FW_CLIENT_CONTROL_STRATEGY_HPP
+
+#include "best-route-strategy.hpp"
+
+namespace nfd {
+namespace fw {
+
+/** \brief a forwarding strategy that forwards Interests
+ *         according to NextHopFaceId field in LocalControlHeader
+ */
+class ClientControlStrategy : public BestRouteStrategy
+{
+public:
+  explicit
+  ClientControlStrategy(Forwarder& forwarder);
+
+  virtual
+  ~ClientControlStrategy();
+
+  virtual void
+  afterReceiveInterest(const Face& inFace,
+                       const Interest& interest,
+                       shared_ptr<fib::Entry> fibEntry,
+                       shared_ptr<pit::Entry> pitEntry);
+};
+
+} // namespace fw
+} // namespace nfd
+
+#endif // NFD_FW_CLIENT_CONTROL_STRATEGY_HPP
diff --git a/daemon/fw/forwarder.hpp b/daemon/fw/forwarder.hpp
index 7ab0849..d9d23bc 100644
--- a/daemon/fw/forwarder.hpp
+++ b/daemon/fw/forwarder.hpp
@@ -15,14 +15,16 @@
 #include "table/cs.hpp"
 #include "table/measurements.hpp"
 #include "table/strategy-choice.hpp"
-#include "strategy.hpp"
 
 namespace nfd {
 
-/**
- * Forwarder is the main class of NFD.
+namespace fw {
+class Strategy;
+} // namespace fw
+
+/** \brief main class of NFD
  *
- * It creates and owns a set of Face listeners
+ *  Forwarder owns all faces and tables, and implements forwarding pipelines.
  */
 class Forwarder
 {
diff --git a/daemon/fw/ncc-strategy.hpp b/daemon/fw/ncc-strategy.hpp
index 5d1042f..6e915aa 100644
--- a/daemon/fw/ncc-strategy.hpp
+++ b/daemon/fw/ncc-strategy.hpp
@@ -8,8 +8,6 @@
 #define NFD_FW_NCC_STRATEGY_HPP
 
 #include "strategy.hpp"
-#include "forwarder.hpp"
-#include "strategy-info.hpp"
 
 namespace nfd {
 namespace fw {
diff --git a/daemon/fw/strategy.cpp b/daemon/fw/strategy.cpp
index fbb2b4a..2d95492 100644
--- a/daemon/fw/strategy.cpp
+++ b/daemon/fw/strategy.cpp
@@ -56,18 +56,5 @@
 //  NFD_LOG_DEBUG("beforeRemoveFibEntry fibEntry=" << fibEntry->getPrefix());
 //}
 
-void
-Strategy::sendInterest(shared_ptr<pit::Entry> pitEntry,
-                       shared_ptr<Face> outFace)
-{
-  m_forwarder.onOutgoingInterest(pitEntry, *outFace);
-}
-
-void
-Strategy::rejectPendingInterest(shared_ptr<pit::Entry> pitEntry)
-{
-  m_forwarder.onInterestReject(pitEntry);
-}
-
 } // namespace fw
 } // namespace nfd
diff --git a/daemon/fw/strategy.hpp b/daemon/fw/strategy.hpp
index df4c946..0844eb2 100644
--- a/daemon/fw/strategy.hpp
+++ b/daemon/fw/strategy.hpp
@@ -7,15 +7,10 @@
 #ifndef NFD_FW_STRATEGY_HPP
 #define NFD_FW_STRATEGY_HPP
 
-#include "face/face.hpp"
-#include "table/fib-entry.hpp"
-#include "table/pit-entry.hpp"
+#include "forwarder.hpp"
 #include "table/measurements-accessor.hpp"
 
 namespace nfd {
-
-class Forwarder;
-
 namespace fw {
 
 /** \brief represents a forwarding strategy
@@ -114,6 +109,9 @@
   MeasurementsAccessor&
   getMeasurements();
 
+  shared_ptr<Face>
+  getFace(FaceId id);
+
 private:
   Name m_name;
 
@@ -132,12 +130,31 @@
   return m_name;
 }
 
+inline void
+Strategy::sendInterest(shared_ptr<pit::Entry> pitEntry,
+                       shared_ptr<Face> outFace)
+{
+  m_forwarder.onOutgoingInterest(pitEntry, *outFace);
+}
+
+inline void
+Strategy::rejectPendingInterest(shared_ptr<pit::Entry> pitEntry)
+{
+  m_forwarder.onInterestReject(pitEntry);
+}
+
 inline MeasurementsAccessor&
 Strategy::getMeasurements()
 {
   return m_measurements;
 }
 
+inline shared_ptr<Face>
+Strategy::getFace(FaceId id)
+{
+  return m_forwarder.getFace(id);
+}
+
 } // namespace fw
 } // namespace nfd
 
diff --git a/daemon/table/measurements-accessor.cpp b/daemon/table/measurements-accessor.cpp
index 5a00c18..97a913b 100644
--- a/daemon/table/measurements-accessor.cpp
+++ b/daemon/table/measurements-accessor.cpp
@@ -5,6 +5,7 @@
  */
 
 #include "measurements-accessor.hpp"
+#include "fw/strategy.hpp"
 
 namespace nfd {
 
diff --git a/tests/fw/client-control-strategy.cpp b/tests/fw/client-control-strategy.cpp
new file mode 100644
index 0000000..42af192
--- /dev/null
+++ b/tests/fw/client-control-strategy.cpp
@@ -0,0 +1,75 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (C) 2014 Named Data Networking Project
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "fw/client-control-strategy.hpp"
+#include "strategy-tester.hpp"
+#include "tests/face/dummy-face.hpp"
+
+#include "tests/test-common.hpp"
+
+namespace nfd {
+namespace tests {
+
+BOOST_FIXTURE_TEST_SUITE(FwClientControlStrategy, BaseFixture)
+
+BOOST_AUTO_TEST_CASE(Forward3)
+{
+  Forwarder forwarder;
+  typedef StrategyTester<fw::ClientControlStrategy> ClientControlStrategyTester;
+  ClientControlStrategyTester strategy(forwarder);
+
+  shared_ptr<DummyFace> face1 = make_shared<DummyFace>();
+  shared_ptr<DummyFace> face2 = make_shared<DummyFace>();
+  shared_ptr<DummyFace> face3 = make_shared<DummyFace>();
+  shared_ptr<DummyLocalFace> face4 = make_shared<DummyLocalFace>();
+  face4->setLocalControlHeaderFeature(LOCAL_CONTROL_HEADER_FEATURE_NEXTHOP_FACEID);
+  forwarder.addFace(face1);
+  forwarder.addFace(face2);
+  forwarder.addFace(face3);
+  forwarder.addFace(face4);
+
+  Fib& fib = forwarder.getFib();
+  shared_ptr<fib::Entry> fibEntry = fib.insert(Name()).first;
+  fibEntry->addNextHop(face2, 0);
+
+  Pit& pit = forwarder.getPit();
+
+  // Interest with valid NextHopFaceId
+  shared_ptr<Interest> interest1 = make_shared<Interest>("ndn:/0z8r6yDDe");
+  interest1->setNextHopFaceId(face1->getId());
+  shared_ptr<pit::Entry> pitEntry1 = pit.insert(*interest1).first;
+
+  strategy.m_sendInterestHistory.clear();
+  strategy.afterReceiveInterest(*face4, *interest1, fibEntry, pitEntry1);
+  BOOST_REQUIRE_EQUAL(strategy.m_sendInterestHistory.size(), 1);
+  BOOST_CHECK_EQUAL(strategy.m_sendInterestHistory[0].get<1>(), face1);
+
+  // Interest without NextHopFaceId
+  shared_ptr<Interest> interest2 = make_shared<Interest>("ndn:/y6JQADGVz");
+  shared_ptr<pit::Entry> pitEntry2 = pit.insert(*interest2).first;
+
+  strategy.m_sendInterestHistory.clear();
+  strategy.afterReceiveInterest(*face4, *interest2, fibEntry, pitEntry2);
+  BOOST_REQUIRE_EQUAL(strategy.m_sendInterestHistory.size(), 1);
+  BOOST_CHECK_EQUAL(strategy.m_sendInterestHistory[0].get<1>(), face2);
+
+  // Interest with invalid NextHopFaceId
+  shared_ptr<Interest> interest3 = make_shared<Interest>("ndn:/0z8r6yDDe");
+  interest3->setNextHopFaceId(face3->getId());
+  shared_ptr<pit::Entry> pitEntry3 = pit.insert(*interest3).first;
+
+  forwarder.removeFace(face3); // face3 is removed and its FaceId becomes invalid
+  strategy.m_sendInterestHistory.clear();
+  strategy.m_rejectPendingInterestHistory.clear();
+  strategy.afterReceiveInterest(*face4, *interest3, fibEntry, pitEntry3);
+  BOOST_REQUIRE_EQUAL(strategy.m_sendInterestHistory.size(), 0);
+  BOOST_REQUIRE_EQUAL(strategy.m_rejectPendingInterestHistory.size(), 1);
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace tests
+} // namespace nfd
diff --git a/tests/table/measurements-accessor.cpp b/tests/table/measurements-accessor.cpp
index cb1f3ee..77f0526 100644
--- a/tests/table/measurements-accessor.cpp
+++ b/tests/table/measurements-accessor.cpp
@@ -5,7 +5,7 @@
  */
 
 #include "table/measurements-accessor.hpp"
-#include "fw/forwarder.hpp"
+#include "fw/strategy.hpp"
 
 #include "tests/test-common.hpp"
 
diff --git a/tests/table/strategy-choice.cpp b/tests/table/strategy-choice.cpp
index af5a879..c198db8 100644
--- a/tests/table/strategy-choice.cpp
+++ b/tests/table/strategy-choice.cpp
@@ -5,7 +5,7 @@
  */
 
 #include "table/strategy-choice.hpp"
-#include "fw/forwarder.hpp"
+#include "fw/strategy.hpp"
 
 #include "tests/test-common.hpp"
 
