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
