diff --git a/utils/ndn-limits-window.cc b/utils/ndn-limits-window.cc
new file mode 100644
index 0000000..6f371b4
--- /dev/null
+++ b/utils/ndn-limits-window.cc
@@ -0,0 +1,83 @@
+/* -*- 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 "ndn-limits-window.h"
+
+#include "ns3/log.h"
+#include "ns3/simulator.h"
+#include "ns3/random-variable.h"
+
+NS_LOG_COMPONENT_DEFINE ("ndn.Limits.Window");
+
+namespace ns3 {
+namespace ndn {
+
+NS_OBJECT_ENSURE_REGISTERED (Limits);
+
+TypeId
+LimitsWindow::GetTypeId ()
+{
+  static TypeId tid = TypeId ("ns3::ndn::Limits::Window")
+    .SetGroupName ("Ndn")
+    .SetParent <Limits> () 
+    .AddConstructor <LimitsWindow> ()
+    
+    .AddTraceSource ("Outstanding",
+                     "Number of outstanding interests",
+                     MakeTraceSourceAccessor (&LimitsWindow::m_outstanding))
+    ;
+  return tid;
+}
+
+bool
+LimitsWindow::IsBelowLimit ()
+{
+  if (!IsEnabled ()) return true;
+
+  if (m_curMaxLimit - m_outstanding >= 1.0)
+    {
+      // static UniformVariable acceptanceProbability (0, m_curMaxLimit);
+      // double value = acceptanceProbability.GetValue ();
+      double value = m_outstanding + 1;
+      
+      if (m_outstanding < value)
+        {
+          m_outstanding += 1.0;
+          return true;
+        }
+      else
+        return false;
+    }
+  else
+    return false;
+}
+
+void
+LimitsWindow::RemoveOutstanding ()
+{
+  if (!IsEnabled ()) return; 
+
+  NS_LOG_DEBUG (m_outstanding);
+  NS_ASSERT_MSG (m_outstanding >= (uint32_t)1, "Should not be possible, unless we decreasing this number twice somewhere");
+  m_outstanding -= 1;
+}
+
+} // namespace ndn
+} // namespace ns3
diff --git a/utils/ndn-limits-window.h b/utils/ndn-limits-window.h
new file mode 100644
index 0000000..b1f2208
--- /dev/null
+++ b/utils/ndn-limits-window.h
@@ -0,0 +1,84 @@
+/* -*- 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>
+ */
+
+#ifndef _NDN_LIMITS_WINDOW_H_
+#define	_NDN_LIMITS_WINDOW_H_
+
+#include "ndn-limits.h"
+
+namespace ns3 {
+namespace ndn {
+
+/**
+ * \ingroup ndn
+ * \brief Structure to manage limits for outstanding interests
+ */
+class LimitsWindow :
+    public Limits
+{
+public:
+  typedef Limits super;
+  
+  static TypeId
+  GetTypeId ();
+  
+  /**
+   * \brief Constructor
+   * \param prefix smart pointer to the prefix for the FIB entry
+   */
+  LimitsWindow ()
+  : m_outstanding (0)
+  { }
+
+  virtual
+  ~LimitsWindow () { }
+
+
+  // from limits
+  virtual bool
+  IsBelowLimit ();
+
+  ////////////////////////////////////////////////////////////////////////////
+  ////////////////////////////////////////////////////////////////////////////
+  ////////////////////////////////////////////////////////////////////////////
+
+  // specific to window-based limits
+  
+  /**
+   * @brief Remove outstanding interests
+   */
+  void
+  RemoveOutstanding ();
+
+  double
+  GetOutstanding () const
+  {
+    return m_outstanding;
+  }
+  
+protected:
+  TracedValue< double > m_outstanding;
+};
+  
+
+} // namespace ndn
+} // namespace ns3
+
+#endif // _NDN_LIMITS_WINDOW_H_
diff --git a/utils/ndn-limits.cc b/utils/ndn-limits.cc
index 2e4a9ec..4e5f48f 100644
--- a/utils/ndn-limits.cc
+++ b/utils/ndn-limits.cc
@@ -29,41 +29,22 @@
 namespace ns3 {
 namespace ndn {
 
-NS_OBJECT_ENSURE_REGISTERED (Limits);
-
 TypeId
 Limits::GetTypeId ()
 {
   static TypeId tid = TypeId ("ns3::ndn::Limits")
     .SetGroupName ("Ndn")
     .SetParent <Object> ()
-    .AddConstructor <Limits> ()
     
     .AddTraceSource ("CurMaxLimit",
                      "Current maximum limit",
                      MakeTraceSourceAccessor (&Limits::m_curMaxLimit))
                      
-    .AddTraceSource ("Outstanding",
-                     "Number of outstanding interests",
-                     MakeTraceSourceAccessor (&Limits::m_outstanding))
     ;
   return tid;
 }
 
 void
-Limits::SetMaxLimit (double max)
-{
-  m_maxLimit = max;
-  m_curMaxLimit = max;
-}
-
-double
-Limits::GetMaxLimit () const
-{
-  return m_maxLimit;
-}
-
-void
 Limits::UpdateCurrentLimit (double limit)
 {
   NS_ASSERT_MSG (limit >= 0.0, "Limit should be greater or equal to zero");
@@ -71,38 +52,5 @@
   m_curMaxLimit = std::min (limit, m_maxLimit);
 }
 
-bool
-Limits::IsBelowLimit ()
-{
-  if (!IsEnabled ()) return true;
-
-  if (m_curMaxLimit - m_outstanding >= 1.0)
-    {
-      // static UniformVariable acceptanceProbability (0, m_curMaxLimit);
-      // double value = acceptanceProbability.GetValue ();
-      double value = m_outstanding + 1;
-      
-      if (m_outstanding < value)
-        {
-          m_outstanding += 1.0;
-          return true;
-        }
-      else
-        return false;
-    }
-  else
-    return false;
-}
-
-void
-Limits::RemoveOutstanding ()
-{
-  if (!IsEnabled ()) return; 
-
-  NS_LOG_DEBUG (m_outstanding);
-  NS_ASSERT_MSG (m_outstanding >= (uint32_t)1, "Should not be possible, unless we decreasing this number twice somewhere");
-  m_outstanding -= 1;
-}
-
 } // namespace ndn
 } // namespace ns3
diff --git a/utils/ndn-limits.h b/utils/ndn-limits.h
index 181059a..14aec50 100644
--- a/utils/ndn-limits.h
+++ b/utils/ndn-limits.h
@@ -23,7 +23,6 @@
 
 #include "ns3/ptr.h"
 #include "ns3/object.h"
-#include "ns3/nstime.h"
 #include "ns3/traced-value.h"
 
 namespace ns3 {
@@ -39,33 +38,38 @@
 public:
   static TypeId
   GetTypeId ();
-  
-  /**
-   * \brief Constructor
-   * \param prefix smart pointer to the prefix for the FIB entry
-   */
+
   Limits ()
   : m_maxLimit (-1)
   , m_curMaxLimit (0)
-  , m_outstanding (0)
   { }
- 
+
+  virtual
+  ~Limits () {}
+  
   /**
    * @brief Set limit for the number of outstanding interests
    */
-  void
-  SetMaxLimit (double max);
+  virtual void
+  SetMaxLimit (double max)
+  {
+    m_maxLimit = max;
+    m_curMaxLimit = max;
+  }    
 
   /**
    * @brief Get limit for the number of outstanding interests
    */
-  double
-  GetMaxLimit () const;
+  virtual double
+  GetMaxLimit () const
+  {
+    return m_maxLimit;
+  }
 
   /**
    * @brief Check whether limits are enabled or not
    */
-  inline bool
+  virtual inline bool
   IsEnabled () const
   {
     return m_maxLimit > 0.0;
@@ -85,7 +89,7 @@
   {
     return m_curMaxLimit;
   }
-
+  
   ////////////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////
@@ -93,20 +97,12 @@
   /**
    * @brief Check if new interest can be send out, if yes, number of outstanding will be increased
    */
-  bool
-  IsBelowLimit ();
-
-  /**
-   * @brief Remove outstanding interests
-   */
-  void
-  RemoveOutstanding ();
+  virtual bool
+  IsBelowLimit () = 0;
   
-public:
+protected:
   double m_maxLimit;
-  
   TracedValue< double > m_curMaxLimit;
-  TracedValue< double > m_outstanding;
 };
   
 
