diff --git a/model/cs/ndn-content-store.h b/model/cs/ndn-content-store.h
index 047fd81..19ff996 100644
--- a/model/cs/ndn-content-store.h
+++ b/model/cs/ndn-content-store.h
@@ -147,7 +147,7 @@
   virtual bool
   Add (Ptr<const ContentObjectHeader> header, Ptr<const Packet> packet) = 0;
 
-  // /**
+  // /*
   //  * \brief Add a new content to the content store.
   //  *
   //  * \param header Interest header for which an entry should be removed
diff --git a/model/fw/best-route.cc b/model/fw/best-route.cc
index 076234f..046d7a2 100644
--- a/model/fw/best-route.cc
+++ b/model/fw/best-route.cc
@@ -33,14 +33,21 @@
 #include <boost/lambda/bind.hpp>
 namespace ll = boost::lambda;
 
-NS_LOG_COMPONENT_DEFINE ("ndn.fw.BestRoute");
-
 namespace ns3 {
 namespace ndn {
 namespace fw {
 
 NS_OBJECT_ENSURE_REGISTERED (BestRoute);
-  
+
+LogComponent BestRoute::g_log = LogComponent (BestRoute::GetLogName ().c_str ());
+
+std::string
+BestRoute::GetLogName ()
+{
+  return super::GetLogName ()+".BestRoute";
+}
+
+
 TypeId
 BestRoute::GetTypeId (void)
 {
diff --git a/model/fw/best-route.h b/model/fw/best-route.h
index 3f4fef7..6e17b99 100644
--- a/model/fw/best-route.h
+++ b/model/fw/best-route.h
@@ -24,6 +24,7 @@
 #define NDNSIM_BEST_ROUTE_H
 
 #include "green-yellow-red.h"
+#include "ns3/log.h"
 
 namespace ns3 {
 namespace ndn {
@@ -44,6 +45,12 @@
   GetTypeId ();
 
   /**
+   * @brief Helper function to retrieve logging name for the forwarding strategy
+   */
+  static std::string
+  GetLogName ();
+  
+  /**
    * @brief Default constructor
    */
   BestRoute ();
@@ -54,6 +61,8 @@
                        Ptr<const InterestHeader> header,
                        Ptr<const Packet> origPacket,
                        Ptr<pit::Entry> pitEntry);
+protected:
+  static LogComponent g_log;
 };
 
 } // namespace fw
diff --git a/model/fw/flooding.cc b/model/fw/flooding.cc
index 6d021ec..b4e94a8 100644
--- a/model/fw/flooding.cc
+++ b/model/fw/flooding.cc
@@ -36,14 +36,20 @@
 #include <boost/lambda/bind.hpp>
 namespace ll = boost::lambda;
 
-NS_LOG_COMPONENT_DEFINE ("ndn.fw.Flooding");
-
 namespace ns3 {
 namespace ndn {
 namespace fw {
 
 NS_OBJECT_ENSURE_REGISTERED (Flooding);
-    
+
+LogComponent Flooding::g_log = LogComponent (Flooding::GetLogName ().c_str ());
+
+std::string
+Flooding::GetLogName ()
+{
+  return super::GetLogName ()+".Flooding";
+}
+
 TypeId Flooding::GetTypeId ()
 {
   static TypeId tid = TypeId ("ns3::ndn::fw::Flooding")
diff --git a/model/fw/flooding.h b/model/fw/flooding.h
index d730113..c4f6205 100644
--- a/model/fw/flooding.h
+++ b/model/fw/flooding.h
@@ -23,6 +23,7 @@
 #define NDNSIM_FLOODING_H
 
 #include "nacks.h"
+#include "ns3/log.h"
 
 namespace ns3 {
 namespace ndn {
@@ -37,9 +38,19 @@
 class Flooding :
     public Nacks
 {
-public:
-  static TypeId GetTypeId ();
+private:
+  typedef Nacks super;
 
+public:
+  static TypeId
+  GetTypeId ();
+
+  /**
+   * @brief Helper function to retrieve logging name for the forwarding strategy
+   */
+  static std::string
+  GetLogName ();
+  
   /**
    * @brief Default constructor
    */
@@ -53,8 +64,8 @@
                        Ptr<const Packet> origPacket,
                        Ptr<pit::Entry> pitEntry);
 
-private:
-  typedef Nacks super;
+protected:
+  static LogComponent g_log;
 };
 
 } // namespace fw
diff --git a/model/fw/green-yellow-red.h b/model/fw/green-yellow-red.h
index 363d0cb..371f7fd 100644
--- a/model/fw/green-yellow-red.h
+++ b/model/fw/green-yellow-red.h
@@ -34,7 +34,8 @@
     public Nacks
 {
 public:
-  static TypeId GetTypeId (void);
+  static TypeId
+  GetTypeId (void);
 
 protected:
   virtual void
diff --git a/model/fw/nacks.h b/model/fw/nacks.h
index ef14f19..421897b 100644
--- a/model/fw/nacks.h
+++ b/model/fw/nacks.h
@@ -35,11 +35,11 @@
 {
 private:
   typedef ForwardingStrategy super;
-
+  
 public:
   static TypeId
   GetTypeId ();
-
+  
   // from super
   virtual void
   OnInterest (Ptr<Face> face,
diff --git a/model/fw/ndn-forwarding-strategy.cc b/model/fw/ndn-forwarding-strategy.cc
index 14db750..770613b 100644
--- a/model/fw/ndn-forwarding-strategy.cc
+++ b/model/fw/ndn-forwarding-strategy.cc
@@ -44,13 +44,19 @@
 #include <boost/tuple/tuple.hpp>
 namespace ll = boost::lambda;
 
-NS_LOG_COMPONENT_DEFINE ("ndn.ForwardingStrategy");
-
 namespace ns3 {
 namespace ndn {
 
 NS_OBJECT_ENSURE_REGISTERED (ForwardingStrategy);
 
+NS_LOG_COMPONENT_DEFINE (ForwardingStrategy::GetLogName ().c_str ());
+
+std::string
+ForwardingStrategy::GetLogName ()
+{
+  return "ndn.fw";
+}
+
 TypeId ForwardingStrategy::GetTypeId (void)
 {
   static TypeId tid = TypeId ("ns3::ndn::ForwardingStrategy")
diff --git a/model/fw/ndn-forwarding-strategy.h b/model/fw/ndn-forwarding-strategy.h
index fa42502..cd0d041 100644
--- a/model/fw/ndn-forwarding-strategy.h
+++ b/model/fw/ndn-forwarding-strategy.h
@@ -49,6 +49,11 @@
   static TypeId GetTypeId (void);
 
   /**
+   * @brief Helper function to retrieve logging name for the forwarding strategy
+   */
+  static std::string GetLogName ();
+
+  /**
    * @brief Default constructor
    */
   ForwardingStrategy ();
diff --git a/model/fw/per-fib-limits.cc b/model/fw/per-fib-limits.cc
new file mode 100644
index 0000000..3b60cf5
--- /dev/null
+++ b/model/fw/per-fib-limits.cc
@@ -0,0 +1,68 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2012 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "per-fib-limits.h"
+#include "per-out-face-limits.h"
+
+#include "ns3/ndn-l3-protocol.h"
+#include "ns3/ndn-interest-header.h"
+#include "ns3/ndn-content-object-header.h"
+
+#include "best-route.h"
+#include "flooding.h"
+#include "smart-flooding.h"
+
+namespace ns3 {
+namespace ndn {
+namespace fw {
+
+template class PerFibLimits< PerOutFaceLimits<BestRoute> >;
+typedef PerFibLimits< PerOutFaceLimits<BestRoute> > PerFibLimitsPerOutFaceLimitsBestRoute;
+NS_OBJECT_ENSURE_REGISTERED (PerFibLimitsPerOutFaceLimitsBestRoute);
+
+template class PerFibLimits< PerOutFaceLimits<Flooding> >;
+typedef PerFibLimits< PerOutFaceLimits<Flooding> > PerFibLimitsPerOutFaceLimitsFlooding;
+NS_OBJECT_ENSURE_REGISTERED (PerFibLimitsPerOutFaceLimitsFlooding);
+
+template class PerFibLimits< PerOutFaceLimits<SmartFlooding> >;
+typedef PerFibLimits< PerOutFaceLimits<SmartFlooding> > PerFibLimitsPerOutFaceLimitsSmartFlooding;
+NS_OBJECT_ENSURE_REGISTERED (PerFibLimitsPerOutFaceLimitsSmartFlooding);
+
+#ifdef DOXYGEN
+// /**
+//  * \brief Strategy implementing per-fib-per-out-face limits on top of BestRoute strategy
+//  */
+class BestRoute::PerOutFaceLimits::PerFibLimits : public ::ns3::ndn::fw::PerFibLimits< ::ns3::ndn::fw::PerOutFaceLimits<BestRoute> > { };
+
+/**
+ * \brief Strategy implementing per-fib-per-out-face limits on top of Flooding strategy
+ */
+class Flooding::PerOutFaceLimits::PerFibLimits : public ::ns3::ndn::fw::PerFibLimits< ::ns3::ndn::fw::PerOutFaceLimits<Flooding> > { };
+
+/**
+ * \brief Strategy implementing per-fib-per-out-face limits on top of SmartFlooding strategy
+ */
+class SmartFlooding::PerOutFaceLimits::PerFibLimits : public ::ns3::ndn::fw::PerFibLimits< ::ns3::ndn::fw::PerOutFaceLimits<SmartFlooding> > { };
+
+#endif
+
+} // namespace fw
+} // namespace ndn
+} // namespace ns3
diff --git a/model/fw/simple-limits.h b/model/fw/per-fib-limits.h
similarity index 60%
copy from model/fw/simple-limits.h
copy to model/fw/per-fib-limits.h
index ce639e3..3632a87 100644
--- a/model/fw/simple-limits.h
+++ b/model/fw/per-fib-limits.h
@@ -1,6 +1,6 @@
 /* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2011 University of California, Los Angeles
+ * Copyright (c) 2012 University of California, Los Angeles
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -19,8 +19,8 @@
  */
 
 
-#ifndef NDNSIM_SIMPLE_LIMITS_H
-#define NDNSIM_SIMPLE_LIMITS_H
+#ifndef NDNSIM_PER_FIB_LIMITS_H
+#define NDNSIM_PER_FIB_LIMITS_H
 
 #include "ns3/event-id.h"
 #include "ns3/log.h"
@@ -42,7 +42,7 @@
  * \brief Strategy implementing per-FIB entry limits
  */
 template<class Parent>
-class SimpleLimits :
+class PerFibLimits :
     public Parent
 {
 private:
@@ -53,25 +53,36 @@
   GetTypeId ();
 
   /**
+   * @brief Helper function to retrieve logging name for the forwarding strategy
+   */
+  static std::string
+  GetLogName ();
+  
+  /**
    * @brief Default constructor
    */
-  SimpleLimits ()
+  PerFibLimits ()
   { }
   
+  /// \copydoc ForwardingStrategy::WillEraseTimedOutPendingInterest
   virtual void
   WillEraseTimedOutPendingInterest (Ptr<pit::Entry> pitEntry);
 
+  /// \copydoc ForwardingStrategy::AddFace
   virtual void
   AddFace (Ptr<Face> face)
   {
-    ObjectFactory factory (m_limitType);
-    Ptr<Limits> limits = factory.template Create<Limits> ();
-    face->AggregateObject (limits);
-
     super::AddFace (face);
+
+    if (face->GetObject<Limits> () == 0)
+      {
+        NS_FATAL_ERROR ("At least per-face limits should be enabled");
+        exit (1);
+      }
   }
   
 protected:
+  /// \copydoc ForwardingStrategy::CanSendOutInterest
   virtual bool
   CanSendOutInterest (Ptr<Face> inFace,
                       Ptr<Face> outFace,
@@ -79,39 +90,43 @@
                       Ptr<const Packet> origPacket,
                       Ptr<pit::Entry> pitEntry);
   
+  /// \copydoc ForwardingStrategy::WillSatisfyPendingInterest
   virtual void
   WillSatisfyPendingInterest (Ptr<Face> inFace,
                               Ptr<pit::Entry> pitEntry);
 
+protected:
+  static LogComponent g_log; ///< @brief Logging variable
+  
 private:
   std::string m_limitType;
-
-  static LogComponent g_log;
 };
 
 template<class Parent>
-LogComponent SimpleLimits<Parent>::g_log = LogComponent ("ndn.SimpleLimits");
+LogComponent PerFibLimits<Parent>::g_log = LogComponent (PerFibLimits<Parent>::GetLogName ().c_str ());
+
+template<class Parent>
+std::string
+PerFibLimits<Parent>::GetLogName ()
+{
+  return super::GetLogName ()+".PerFibLimits";
+}
 
 template<class Parent>
 TypeId
-SimpleLimits<Parent>::GetTypeId (void)
+PerFibLimits<Parent>::GetTypeId (void)
 {
-  static TypeId tid = TypeId ((super::GetTypeId ().GetName ()+"::SimpleLimits").c_str ())
+  static TypeId tid = TypeId ((super::GetTypeId ().GetName ()+"::PerFibLimits").c_str ())
     .SetGroupName ("Ndn")
     .template SetParent <super> ()
-    .template AddConstructor <SimpleLimits> ()
-
-    .template AddAttribute ("Limit", "Limit type to be used (e.g., ns3::ndn::Limits::Window or ns3::ndn::Limits::Rate)",
-                            StringValue ("ns3::ndn::Limits::Window"),
-                            MakeStringAccessor (&SimpleLimits<Parent>::m_limitType),
-                            MakeStringChecker ())    
+    .template AddConstructor <PerFibLimits> ()
     ;
   return tid;
 }
 
 template<class Parent>
 bool
-SimpleLimits<Parent>::CanSendOutInterest (Ptr<Face> inFace,
+PerFibLimits<Parent>::CanSendOutInterest (Ptr<Face> inFace,
                                           Ptr<Face> outFace,
                                           Ptr<const InterestHeader> header,
                                           Ptr<const Packet> origPacket,
@@ -119,36 +134,29 @@
 {
   NS_LOG_FUNCTION (this << pitEntry->GetPrefix ());
 
-  if (!super::CanSendOutInterest (inFace, outFace, header, origPacket, pitEntry))
+  Ptr<Limits> fibLimits = pitEntry->GetFibEntry ()->template GetObject<Limits> ();
+  // no checks for the limit here. the check should be somewhere elese
+  
+  if (fibLimits->IsBelowLimit ())
     {
-      return false;
+      if (super::CanSendOutInterest (inFace, outFace, header, origPacket, pitEntry))
+        {
+          fibLimits->BorrowLimit ();
+          return true;
+        }
     }
   
-  Ptr<Limits> faceLimits = outFace->template GetObject<Limits> ();
-  if (faceLimits->IsBelowLimit ())
-    {
-      faceLimits->BorrowLimit ();
-      return true;
-    }
-  else
-    {
-      return false;
-    }
+  return false;
 }
 
 template<class Parent>
 void
-SimpleLimits<Parent>::WillEraseTimedOutPendingInterest (Ptr<pit::Entry> pitEntry)
+PerFibLimits<Parent>::WillEraseTimedOutPendingInterest (Ptr<pit::Entry> pitEntry)
 {
   NS_LOG_FUNCTION (this << pitEntry->GetPrefix ());
 
-  for (pit::Entry::out_container::iterator face = pitEntry->GetOutgoing ().begin ();
-       face != pitEntry->GetOutgoing ().end ();
-       face ++)
-    {
-      Ptr<Limits> faceLimits = face->m_face->GetObject<Limits> ();
-      faceLimits->ReturnLimit ();
-    }
+  Ptr<Limits> fibLimits = pitEntry->GetFibEntry ()->template GetObject<Limits> ();
+  fibLimits->ReturnLimit ();
 
   super::WillEraseTimedOutPendingInterest (pitEntry);
 }
@@ -156,18 +164,13 @@
 
 template<class Parent>
 void
-SimpleLimits<Parent>::WillSatisfyPendingInterest (Ptr<Face> inFace,
+PerFibLimits<Parent>::WillSatisfyPendingInterest (Ptr<Face> inFace,
                                                         Ptr<pit::Entry> pitEntry)
 {
   NS_LOG_FUNCTION (this << pitEntry->GetPrefix ());
 
-  for (pit::Entry::out_container::iterator face = pitEntry->GetOutgoing ().begin ();
-       face != pitEntry->GetOutgoing ().end ();
-       face ++)
-    {
-      Ptr<Limits> faceLimits = face->m_face->GetObject<Limits> ();
-      faceLimits->ReturnLimit ();
-    }
+  Ptr<Limits> fibLimits = pitEntry->GetFibEntry ()->template GetObject<Limits> ();
+  fibLimits->ReturnLimit ();
   
   super::WillSatisfyPendingInterest (inFace, pitEntry);
 }
@@ -176,4 +179,4 @@
 } // namespace ndn
 } // namespace ns3
 
-#endif // NDNSIM_SIMPLE_LIMITS_H
+#endif // NDNSIM_PER_FIB_LIMITS_H
diff --git a/model/fw/per-out-face-limits.cc b/model/fw/per-out-face-limits.cc
new file mode 100644
index 0000000..5591739
--- /dev/null
+++ b/model/fw/per-out-face-limits.cc
@@ -0,0 +1,67 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "per-out-face-limits.h"
+
+#include "ns3/ndn-l3-protocol.h"
+#include "ns3/ndn-interest-header.h"
+#include "ns3/ndn-content-object-header.h"
+
+#include "best-route.h"
+#include "flooding.h"
+#include "smart-flooding.h"
+
+namespace ns3 {
+namespace ndn {
+namespace fw {
+
+template class PerOutFaceLimits<BestRoute>;
+typedef PerOutFaceLimits<BestRoute> PerOutFaceLimitsBestRoute;
+NS_OBJECT_ENSURE_REGISTERED (PerOutFaceLimitsBestRoute);
+
+template class PerOutFaceLimits<Flooding>;
+typedef PerOutFaceLimits<Flooding> PerOutFaceLimitsFlooding;
+NS_OBJECT_ENSURE_REGISTERED (PerOutFaceLimitsFlooding);
+
+template class PerOutFaceLimits<SmartFlooding>;
+typedef PerOutFaceLimits<SmartFlooding> PerOutFaceLimitsSmartFlooding;
+NS_OBJECT_ENSURE_REGISTERED (PerOutFaceLimitsSmartFlooding);
+
+#ifdef DOXYGEN
+// /**
+//  * \brief Strategy implementing per-out-face limits on top of BestRoute strategy
+//  */
+class BestRoute::PerOutFaceLimits : public ::ns3::ndn::fw::PerOutFaceLimits<BestRoute> { };
+
+/**
+ * \brief Strategy implementing per-out-face limits on top of Flooding strategy
+ */
+class Flooding::PerOutFaceLimits : public ::ns3::ndn::fw::PerOutFaceLimits<Flooding> { };
+
+/**
+ * \brief Strategy implementing per-out-face limits on top of SmartFlooding strategy
+ */
+class SmartFlooding::PerOutFaceLimits : public ::ns3::ndn::fw::PerOutFaceLimits<SmartFlooding> { };
+#endif
+
+} // namespace fw
+} // namespace ndn
+} // namespace ns3
+
diff --git a/model/fw/simple-limits.h b/model/fw/per-out-face-limits.h
similarity index 71%
rename from model/fw/simple-limits.h
rename to model/fw/per-out-face-limits.h
index ce639e3..534768b 100644
--- a/model/fw/simple-limits.h
+++ b/model/fw/per-out-face-limits.h
@@ -19,8 +19,8 @@
  */
 
 
-#ifndef NDNSIM_SIMPLE_LIMITS_H
-#define NDNSIM_SIMPLE_LIMITS_H
+#ifndef NDNSIM_PER_OUT_FACE_LIMITS_H
+#define NDNSIM_PER_OUT_FACE_LIMITS_H
 
 #include "ns3/event-id.h"
 #include "ns3/log.h"
@@ -39,28 +39,39 @@
 
 /**
  * \ingroup ndn
- * \brief Strategy implementing per-FIB entry limits
+ * \brief Strategy implementing per-outgoing face limits
  */
 template<class Parent>
-class SimpleLimits :
+class PerOutFaceLimits :
     public Parent
 {
 private:
   typedef Parent super;
 
 public:
+  /**
+   * @brief Get TypeId of the class
+   */
   static TypeId
   GetTypeId ();
 
   /**
+   * @brief Helper function to retrieve logging name for the forwarding strategy
+   */
+  static std::string
+  GetLogName ();
+  
+  /**
    * @brief Default constructor
    */
-  SimpleLimits ()
+  PerOutFaceLimits ()
   { }
-  
+
+  /// \copydoc ForwardingStrategy::WillEraseTimedOutPendingInterest
   virtual void
   WillEraseTimedOutPendingInterest (Ptr<pit::Entry> pitEntry);
 
+  /// \copydoc ForwardingStrategy::AddFace
   virtual void
   AddFace (Ptr<Face> face)
   {
@@ -72,6 +83,7 @@
   }
   
 protected:
+  /// \copydoc ForwardingStrategy::CanSendOutInterest
   virtual bool
   CanSendOutInterest (Ptr<Face> inFace,
                       Ptr<Face> outFace,
@@ -79,31 +91,40 @@
                       Ptr<const Packet> origPacket,
                       Ptr<pit::Entry> pitEntry);
   
+  /// \copydoc ForwardingStrategy::WillSatisfyPendingInterest
   virtual void
   WillSatisfyPendingInterest (Ptr<Face> inFace,
                               Ptr<pit::Entry> pitEntry);
 
+protected:
+  static LogComponent g_log; ///< @brief Logging variable
+  
 private:
   std::string m_limitType;
-
-  static LogComponent g_log;
 };
 
 template<class Parent>
-LogComponent SimpleLimits<Parent>::g_log = LogComponent ("ndn.SimpleLimits");
+LogComponent PerOutFaceLimits<Parent>::g_log = LogComponent (PerOutFaceLimits<Parent>::GetLogName ().c_str ());
+
+template<class Parent>
+std::string
+PerOutFaceLimits<Parent>::GetLogName ()
+{
+  return super::GetLogName ()+".PerOutFaceLimits";
+}
 
 template<class Parent>
 TypeId
-SimpleLimits<Parent>::GetTypeId (void)
+PerOutFaceLimits<Parent>::GetTypeId (void)
 {
-  static TypeId tid = TypeId ((super::GetTypeId ().GetName ()+"::SimpleLimits").c_str ())
+  static TypeId tid = TypeId ((super::GetTypeId ().GetName ()+"::PerOutFaceLimits").c_str ())
     .SetGroupName ("Ndn")
     .template SetParent <super> ()
-    .template AddConstructor <SimpleLimits> ()
+    .template AddConstructor <PerOutFaceLimits> ()
 
     .template AddAttribute ("Limit", "Limit type to be used (e.g., ns3::ndn::Limits::Window or ns3::ndn::Limits::Rate)",
                             StringValue ("ns3::ndn::Limits::Window"),
-                            MakeStringAccessor (&SimpleLimits<Parent>::m_limitType),
+                            MakeStringAccessor (&PerOutFaceLimits<Parent>::m_limitType),
                             MakeStringChecker ())    
     ;
   return tid;
@@ -111,34 +132,30 @@
 
 template<class Parent>
 bool
-SimpleLimits<Parent>::CanSendOutInterest (Ptr<Face> inFace,
+PerOutFaceLimits<Parent>::CanSendOutInterest (Ptr<Face> inFace,
                                           Ptr<Face> outFace,
                                           Ptr<const InterestHeader> header,
                                           Ptr<const Packet> origPacket,
                                           Ptr<pit::Entry> pitEntry)
 {
   NS_LOG_FUNCTION (this << pitEntry->GetPrefix ());
-
-  if (!super::CanSendOutInterest (inFace, outFace, header, origPacket, pitEntry))
-    {
-      return false;
-    }
   
   Ptr<Limits> faceLimits = outFace->template GetObject<Limits> ();
   if (faceLimits->IsBelowLimit ())
     {
-      faceLimits->BorrowLimit ();
-      return true;
+      if (super::CanSendOutInterest (inFace, outFace, header, origPacket, pitEntry))
+        {
+          faceLimits->BorrowLimit ();
+          return true;
+        }
     }
-  else
-    {
-      return false;
-    }
+  
+  return false;
 }
 
 template<class Parent>
 void
-SimpleLimits<Parent>::WillEraseTimedOutPendingInterest (Ptr<pit::Entry> pitEntry)
+PerOutFaceLimits<Parent>::WillEraseTimedOutPendingInterest (Ptr<pit::Entry> pitEntry)
 {
   NS_LOG_FUNCTION (this << pitEntry->GetPrefix ());
 
@@ -156,7 +173,7 @@
 
 template<class Parent>
 void
-SimpleLimits<Parent>::WillSatisfyPendingInterest (Ptr<Face> inFace,
+PerOutFaceLimits<Parent>::WillSatisfyPendingInterest (Ptr<Face> inFace,
                                                         Ptr<pit::Entry> pitEntry)
 {
   NS_LOG_FUNCTION (this << pitEntry->GetPrefix ());
@@ -176,4 +193,4 @@
 } // namespace ndn
 } // namespace ns3
 
-#endif // NDNSIM_SIMPLE_LIMITS_H
+#endif // NDNSIM_PER_OUT_FACE_LIMITS_H
diff --git a/model/fw/simple-limits.cc b/model/fw/simple-limits.cc
deleted file mode 100644
index 7880194..0000000
--- a/model/fw/simple-limits.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
-/*
- * Copyright (c) 2011 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#include "simple-limits.h"
-
-#include "ns3/ndn-l3-protocol.h"
-#include "ns3/ndn-interest-header.h"
-#include "ns3/ndn-content-object-header.h"
-
-#include "best-route.h"
-#include "flooding.h"
-#include "smart-flooding.h"
-
-namespace ns3 {
-namespace ndn {
-namespace fw {
-
-template class SimpleLimits<BestRoute>;
-typedef SimpleLimits<BestRoute> SimpleLimitsBestRoute;
-NS_OBJECT_ENSURE_REGISTERED (SimpleLimitsBestRoute);
-
-template class SimpleLimits<Flooding>;
-typedef SimpleLimits<Flooding> SimpleLimitsFlooding;
-NS_OBJECT_ENSURE_REGISTERED (SimpleLimitsFlooding);
-
-template class SimpleLimits<SmartFlooding>;
-typedef SimpleLimits<SmartFlooding> SimpleLimitsSmartFlooding;
-NS_OBJECT_ENSURE_REGISTERED (SimpleLimitsSmartFlooding);
-
-#ifdef DOXYGEN
-
-class SimpleLimitsBestRoute     : public SimpleLimits<BestRoute> { };
-class SimpleLimitsFlooding      : public SimpleLimits<Flooding> { };
-class SimpleLimitsSmartFlooding : public SimpleLimits<SmartFlooding> { };
-
-#endif
-
-} // namespace fw
-} // namespace ndn
-} // namespace ns3
diff --git a/model/fw/smart-flooding.cc b/model/fw/smart-flooding.cc
index e74b612..8a1d367 100644
--- a/model/fw/smart-flooding.cc
+++ b/model/fw/smart-flooding.cc
@@ -35,14 +35,20 @@
 #include <boost/lambda/bind.hpp>
 namespace ll = boost::lambda;
 
-NS_LOG_COMPONENT_DEFINE ("ndn.fw.SmartFlooding");
-
 namespace ns3 {
 namespace ndn {
 namespace fw {
 
 NS_OBJECT_ENSURE_REGISTERED (SmartFlooding);
-    
+
+LogComponent SmartFlooding::g_log = LogComponent (SmartFlooding::GetLogName ().c_str ());
+
+std::string
+SmartFlooding::GetLogName ()
+{
+  return super::GetLogName ()+".SmartFlooding";
+}
+
 TypeId
 SmartFlooding::GetTypeId (void)
 {
diff --git a/model/fw/smart-flooding.h b/model/fw/smart-flooding.h
index d30031b..f66d1e8 100644
--- a/model/fw/smart-flooding.h
+++ b/model/fw/smart-flooding.h
@@ -22,6 +22,7 @@
 #define NDNSIM_SMART_FLOODING_H
 
 #include "green-yellow-red.h"
+#include "ns3/log.h"
 
 namespace ns3 {
 namespace ndn {
@@ -33,8 +34,18 @@
 class SmartFlooding :
     public GreenYellowRed
 {
+private:
+  typedef GreenYellowRed super;
+
 public:
-  static TypeId GetTypeId ();
+  static TypeId
+  GetTypeId ();
+
+  /**
+   * @brief Helper function to retrieve logging name for the forwarding strategy
+   */
+  static std::string
+  GetLogName ();
 
   /**
    * @brief Default constructor
@@ -48,8 +59,8 @@
                        Ptr<const Packet> origPacket,
                        Ptr<pit::Entry> pitEntry);
 
-private:
-  typedef GreenYellowRed super;
+protected:
+  static LogComponent g_log;
 };
 
 } // namespace fw
diff --git a/model/ndn-face.h b/model/ndn-face.h
index 78c65a7..acb1c90 100644
--- a/model/ndn-face.h
+++ b/model/ndn-face.h
@@ -111,7 +111,7 @@
   ////////////////////////////////////////////////////////////////////
 
   /**
-   * \Brief Assign routing/forwarding metric with face
+   * \brief Assign routing/forwarding metric with face
    *
    * \param metric configured routing metric (cost) of this face
    */
diff --git a/model/pit/ndn-pit-entry-incoming-face.h b/model/pit/ndn-pit-entry-incoming-face.h
index cd75643..fb3987e 100644
--- a/model/pit/ndn-pit-entry-incoming-face.h
+++ b/model/pit/ndn-pit-entry-incoming-face.h
@@ -52,7 +52,7 @@
    */
   IncomingFace ();
   /**
-   * @brie Copy operator
+   * @brief Copy operator
    */
   IncomingFace &
   operator = (const IncomingFace &other);
diff --git a/model/pit/ndn-pit-entry-outgoing-face.h b/model/pit/ndn-pit-entry-outgoing-face.h
index 63c6378..20dfdaf 100644
--- a/model/pit/ndn-pit-entry-outgoing-face.h
+++ b/model/pit/ndn-pit-entry-outgoing-face.h
@@ -56,7 +56,7 @@
   OutgoingFace ();
 
   /**
-   * @brie Copy operator
+   * @brief Copy operator
    */
   OutgoingFace &
   operator = (const OutgoingFace &other);
