diff --git a/daemon/fw/strategy.cpp b/daemon/fw/strategy.cpp
index f8c2f12..dd7eab5 100644
--- a/daemon/fw/strategy.cpp
+++ b/daemon/fw/strategy.cpp
@@ -6,10 +6,13 @@
 
 #include "strategy.hpp"
 #include "forwarder.hpp"
+#include "core/logger.hpp"
 
 namespace nfd {
 namespace fw {
 
+NFD_LOG_INIT("Strategy");
+
 Strategy::Strategy(Forwarder& forwarder)
   : m_forwarder(forwarder)
 {
@@ -19,6 +22,29 @@
 {
 }
 
+void
+Strategy::beforeExpirePendingInterest(shared_ptr<pit::Entry> pitEntry)
+{
+  NFD_LOG_DEBUG("beforeExpirePendingInterest pitEntry=" << pitEntry->getName());
+}
+
+void
+Strategy::afterAddFibEntry(shared_ptr<fib::Entry> fibEntry)
+{
+  NFD_LOG_DEBUG("afterAddFibEntry fibEntry=" << fibEntry->getPrefix());
+}
+
+void
+Strategy::afterUpdateFibEntry(shared_ptr<fib::Entry> fibEntry)
+{
+  NFD_LOG_DEBUG("afterUpdateFibEntry fibEntry=" << fibEntry->getPrefix());
+}
+
+void
+Strategy::beforeRemoveFibEntry(shared_ptr<fib::Entry> fibEntry)
+{
+  NFD_LOG_DEBUG("beforeRemoveFibEntry fibEntry=" << fibEntry->getPrefix());
+}
 
 void
 Strategy::sendInterest(shared_ptr<pit::Entry> pitEntry,
diff --git a/daemon/fw/strategy.hpp b/daemon/fw/strategy.hpp
index ce21c13..027acdf 100644
--- a/daemon/fw/strategy.hpp
+++ b/daemon/fw/strategy.hpp
@@ -33,23 +33,61 @@
   virtual
   ~Strategy();
   
+public: // triggers
+  /** \brief trigger after Interest is received
+   *
+   *  The Interest:
+   *  - does not violate Scope
+   *  - is not looped
+   *  - cannot be satisfied by ContentStore
+   *  - is under a namespace managed by this strategy
+   *
+   *  The strategy should decide whether and where to forward this Interest.
+   *  - If the strategy decides to forward this Interest,
+   *    invoke this->sendInterest one or more times, either now or shortly after
+   *  - If strategy concludes that this Interest cannot be forwarded,
+   *    invoke this->rebuffPendingInterest so that PIT entry will be deleted shortly
+   */
   virtual void
   afterReceiveInterest(const Face& inFace,
                        const Interest& interest,
                        shared_ptr<fib::Entry> fibEntry,
                        shared_ptr<pit::Entry> pitEntry) =0;
   
-  //virtual void
-  //beforeExpirePendingInterest() =0;
+  /** \brief trigger before PIT entry expires
+   *
+   *  PIT entry expires when InterestLifetime has elapsed for all InRecords,
+   *  and it is not satisfied by an incoming Data.
+   *
+   *  This trigger is not invoked for PIT entry already satisfied.
+   *
+   *  In this base class this method does nothing.
+   */
+  virtual void
+  beforeExpirePendingInterest(shared_ptr<pit::Entry> pitEntry);
   
-  //virtual void
-  //afterAddFibEntry() =0;
+  /** \brief trigger after FIB entry is being inserted
+   *         and becomes managed by this strategy
+   *
+   *  In this base class this method does nothing.
+   */
+  virtual void
+  afterAddFibEntry(shared_ptr<fib::Entry> fibEntry);
   
-  //virtual void
-  //afterUpdateFibEntry() =0;
+  /** \brief trigger after FIB entry being managed by this strategy is updated
+   *
+   *  In this base class this method does nothing.
+   */
+  virtual void
+  afterUpdateFibEntry(shared_ptr<fib::Entry> fibEntry);
   
-  //virtual void
-  //beforeRemoveFibEntry() =0;
+  /** \brief trigger before FIB entry ceises to be managed by this strategy
+   *         or is being deleted
+   *
+   *  In this base class this method does nothing.
+   */
+  virtual void
+  beforeRemoveFibEntry(shared_ptr<fib::Entry> fibEntry);
   
 protected: // actions
   /// send Interest to outFace
@@ -58,6 +96,7 @@
                     shared_ptr<Face> outFace);
   
   /** \brief decide that a pending Interest cannot be forwarded
+   *
    *  This shall not be called if the pending Interest has been
    *  forwarded earlier, and does not need to be resent now.
    */
@@ -65,6 +104,10 @@
   rebuffPendingInterest(shared_ptr<pit::Entry> pitEntry);
   
 private:
+  /** \brief reference to the forwarder
+   *
+   *  Triggers can access forwarder indirectly via actions.
+   */
   Forwarder& m_forwarder;
 };
 
