diff --git a/model/cs/content-store-impl.cc b/model/cs/content-store-impl.cc
index 3a219fa..aa7a234 100644
--- a/model/cs/content-store-impl.cc
+++ b/model/cs/content-store-impl.cc
@@ -24,8 +24,6 @@
 #include "../../utils/trie/lru-policy.h"
 #include "../../utils/trie/fifo-policy.h"
 
-NS_LOG_COMPONENT_DEFINE ("ndn.cs.ContentStoreImpl");
-
 #define NS_OBJECT_ENSURE_REGISTERED_TEMPL(type, templ)  \
   static struct X ## type ## templ ## RegistrationClass \
   {                                                     \
diff --git a/model/cs/content-store-impl.h b/model/cs/content-store-impl.h
index a168636..6ebd865 100644
--- a/model/cs/content-store-impl.h
+++ b/model/cs/content-store-impl.h
@@ -41,6 +41,9 @@
 class EntryImpl : public Entry
 {
 public:
+  typedef Entry base_type;
+  
+public:
   EntryImpl (Ptr<const ContentObjectHeader> header, Ptr<const Packet> packet)
     : Entry (header, packet)
     , item_ (0)
@@ -65,12 +68,12 @@
 template<class Policy>
 class ContentStoreImpl : public ContentStore,
                          protected ndnSIM::trie_with_policy< NameComponents,
-                                                             ndnSIM::smart_pointer_payload_traits< EntryImpl< ContentStoreImpl< Policy > > >,
+                                                             ndnSIM::smart_pointer_payload_traits< EntryImpl< ContentStoreImpl< Policy > >, Entry >,
                                                              Policy >
 {
 public:
   typedef ndnSIM::trie_with_policy< NameComponents,
-                                    ndnSIM::smart_pointer_payload_traits< EntryImpl< ContentStoreImpl< Policy > > >,
+                                    ndnSIM::smart_pointer_payload_traits< EntryImpl< ContentStoreImpl< Policy > >, Entry >,
                                     Policy > super;
   
   typedef EntryImpl< ContentStoreImpl< Policy > > entry;
diff --git a/model/cs/content-store-with-stats.cc b/model/cs/content-store-with-stats.cc
new file mode 100644
index 0000000..1e39255
--- /dev/null
+++ b/model/cs/content-store-with-stats.cc
@@ -0,0 +1,85 @@
+/* -*-  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 "content-store-with-stats.h"
+
+#include "../../utils/trie/random-policy.h"
+#include "../../utils/trie/lru-policy.h"
+#include "../../utils/trie/fifo-policy.h"
+
+#define NS_OBJECT_ENSURE_REGISTERED_TEMPL(type, templ)  \
+  static struct X ## type ## templ ## RegistrationClass \
+  {                                                     \
+    X ## type ## templ ## RegistrationClass () {        \
+      ns3::TypeId tid = type<templ>::GetTypeId ();      \
+      tid.GetParent ();                                 \
+    }                                                   \
+  } x_ ## type ## templ ## RegistrationVariable
+
+namespace ns3 {
+namespace ndn {
+
+using namespace ndnSIM;
+
+namespace cs {
+
+// explicit instantiation and registering
+/**
+ * @brief ContentStore with stats and LRU cache replacement policy
+ **/
+template class ContentStoreWithStats<lru_policy_traits>;
+
+/**
+ * @brief ContentStore with stats and random cache replacement policy
+ **/
+template class ContentStoreWithStats<random_policy_traits>;
+
+/**
+ * @brief ContentStore with stats and FIFO cache replacement policy
+ **/
+template class ContentStoreWithStats<fifo_policy_traits>;
+
+NS_OBJECT_ENSURE_REGISTERED_TEMPL(ContentStoreWithStats, lru_policy_traits);
+NS_OBJECT_ENSURE_REGISTERED_TEMPL(ContentStoreWithStats, random_policy_traits);
+NS_OBJECT_ENSURE_REGISTERED_TEMPL(ContentStoreWithStats, fifo_policy_traits);
+
+
+#ifdef DOXYGEN
+// /**
+//  * \brief Content Store implementing LRU cache replacement policy
+//  */
+class Stats::Lru : public ContentStoreWithStats<lru_policy_traits> { };
+
+/**
+ * \brief Content Store implementing FIFO cache replacement policy
+ */
+class Stats::Fifo : public ContentStoreWithStats<fifo_policy_traits> { };
+
+/**
+ * \brief Content Store implementing Random cache replacement policy
+ */
+class Stats::Random : public ContentStoreWithStats<random_policy_traits> { };
+
+#endif
+
+
+} // namespace cs
+} // namespace ndn
+} // namespace ns3
diff --git a/model/cs/content-store-with-stats.h b/model/cs/content-store-with-stats.h
new file mode 100644
index 0000000..02ffec0
--- /dev/null
+++ b/model/cs/content-store-with-stats.h
@@ -0,0 +1,89 @@
+/* -*-  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>
+ */
+
+#ifndef NDN_CONTENT_STORE_WITH_STATS_H_
+#define NDN_CONTENT_STORE_WITH_STATS_H_
+
+#include "content-store-impl.h"
+
+#include "../../utils/trie/multi-policy.h"
+#include "../../utils/trie/lifetime-stats-policy.h"
+
+namespace ns3 {
+namespace ndn {
+namespace cs {
+
+template<class Policy>
+class ContentStoreWithStats :
+    public ContentStoreImpl< ndnSIM::multi_policy_traits< boost::mpl::vector2< Policy, ndnSIM::lifetime_stats_policy_traits > > >
+{
+public:
+  typedef ContentStoreImpl< ndnSIM::multi_policy_traits< boost::mpl::vector2< Policy, ndnSIM::lifetime_stats_policy_traits > > > super;
+
+  ContentStoreWithStats ()
+  {
+    // connect traceback to the policy
+    super::getPolicy ().template get<1> ().set_traced_callback (&m_willRemoveEntry);
+  }
+  
+  static TypeId
+  GetTypeId ();
+  
+private:
+  static LogComponent g_log; ///< @brief Logging variable
+
+  /// @brief trace of for entry removal: first parameter is pointer to the CS entry, second is how long entry was in the cache
+  TracedCallback< Ptr<const Entry>, Time > m_willRemoveEntry; 
+};
+
+//////////////////////////////////////////
+////////// Implementation ////////////////
+//////////////////////////////////////////
+
+
+template<class Policy>
+LogComponent
+ContentStoreWithStats< Policy >::g_log = LogComponent (("ndn.cs.Stats." + Policy::GetName ()).c_str ());
+
+
+template<class Policy>
+TypeId
+ContentStoreWithStats< Policy >::GetTypeId ()
+{
+  static TypeId tid = TypeId (("ns3::ndn::cs::Stats::"+Policy::GetName ()).c_str ())
+    .SetGroupName ("Ndn")
+    .SetParent<super> ()
+    .template AddConstructor< ContentStoreWithStats< Policy > > ()
+
+    .AddTraceSource ("WillRemoveEntry", "Trace called just before content store entry will be removed",
+                     MakeTraceSourceAccessor (&ContentStoreWithStats< Policy >::m_willRemoveEntry))
+
+    // trace stuff here
+    ;
+
+  return tid;
+}
+
+
+} // namespace cs
+} // namespace ndn
+} // namespace ns3
+
+#endif // NDN_CONTENT_STORE_IMPL_H_
diff --git a/model/fib/ndn-fib-entry.h b/model/fib/ndn-fib-entry.h
index a98dc66..214b0eb 100644
--- a/model/fib/ndn-fib-entry.h
+++ b/model/fib/ndn-fib-entry.h
@@ -171,6 +171,9 @@
 class Entry : public Object
 {
 public:
+  typedef Entry base_type;
+  
+public:
   class NoFaces {}; ///< @brief Exception class for the case when FIB entry is not found
   
   /**
diff --git a/model/pit/ndn-pit-entry-impl.h b/model/pit/ndn-pit-entry-impl.h
index 6af9cc5..025ef54 100644
--- a/model/pit/ndn-pit-entry-impl.h
+++ b/model/pit/ndn-pit-entry-impl.h
@@ -31,6 +31,9 @@
 template<class Pit>
 class EntryImpl : public Entry
 {
+public:
+  typedef Entry base_type;
+
   typedef Entry super;
   #define CONTAINER static_cast<Pit&> (m_container)
   
diff --git a/utils/trie/detail/multi-policy-container.h b/utils/trie/detail/multi-policy-container.h
index 35119cb..c1251e9 100644
--- a/utils/trie/detail/multi-policy-container.h
+++ b/utils/trie/detail/multi-policy-container.h
@@ -113,6 +113,17 @@
                                                 boost::mpl::_1/*empty/previous*/,
                                                 policy_wrap<Base, boost::mpl::_2>/*element in vector*/>
                               >::type super;
+
+  typedef typename boost::mpl::at_c<Vector, 0>::type::iterator iterator;
+  typedef typename boost::mpl::at_c<Vector, 0>::type::const_iterator const_iterator;
+
+  iterator begin ()             { return this->get<0> ().begin (); }
+  const_iterator begin () const { return this->get<0> ().begin (); }
+
+  iterator end ()             { return this->get<0> ().end (); }
+  const_iterator end () const { return this->get<0> ().end (); }
+
+  size_t size () const { return this->get<0> ().size (); }
   
   multi_policy_container (Base &base)
   : super (base)
diff --git a/utils/trie/lifetime-stats-policy.h b/utils/trie/lifetime-stats-policy.h
new file mode 100644
index 0000000..87a5891
--- /dev/null
+++ b/utils/trie/lifetime-stats-policy.h
@@ -0,0 +1,159 @@
+/* -*-  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>
+ */
+
+#ifndef LIFETIME_STATS_POLICY_H_
+#define LIFETIME_STATS_POLICY_H_
+
+#include <boost/intrusive/options.hpp>
+#include <boost/intrusive/list.hpp>
+
+#include <ns3/nstime.h>
+#include <ns3/simulator.h>
+#include <ns3/traced-callback.h>
+
+namespace ns3 {
+namespace ndn {
+namespace ndnSIM {
+
+/**
+ * @brief Traits for lifetime stats policy
+ */
+struct lifetime_stats_policy_traits
+{
+  /// @brief Name that can be used to identify the policy (for NS-3 object model and logging)
+  static std::string GetName () { return "LifetimeStats"; }
+
+  struct policy_hook_type : public boost::intrusive::list_member_hook<> { Time timeWhenAdded; };
+
+  template<class Container>
+  struct container_hook
+  {
+    typedef boost::intrusive::member_hook< Container,
+                                           policy_hook_type,
+                                           &Container::policy_hook_ > type;
+  };
+
+  template<class Base,
+           class Container,
+           class Hook>
+  struct policy 
+  {
+    typedef typename boost::intrusive::list< Container, Hook > policy_container;
+    
+    static Time& get_time (typename Container::iterator item)
+    {
+      return static_cast<typename policy_container::value_traits::hook_type*>
+        (policy_container::value_traits::to_node_ptr(*item))->timeWhenAdded;
+    }
+      
+    static const Time& get_time (typename Container::const_iterator item)
+    {
+      return static_cast<const typename policy_container::value_traits::hook_type*>
+        (policy_container::value_traits::to_node_ptr(*item))->timeWhenAdded;
+    }
+
+    class type : public policy_container
+    {
+    public:
+      typedef Container parent_trie;
+
+      type (Base &base)
+        : base_ (base)
+        , max_size_ (100)
+        , m_willRemoveEntry (0)
+      {
+      }
+
+      inline void
+      update (typename parent_trie::iterator item)
+      {
+        // do nothing. it's random policy
+      }
+  
+      inline bool
+      insert (typename parent_trie::iterator item)
+      {
+        get_time (item) = Simulator::Now ();
+
+        policy_container::push_back (*item);
+        return true;
+      }
+  
+      inline void
+      lookup (typename parent_trie::iterator item)
+      {
+        // do nothing. it's random policy
+      }
+  
+      inline void
+      erase (typename parent_trie::iterator item)
+      {
+        Time lifetime = Simulator::Now () - get_time (item);
+
+        if (m_willRemoveEntry != 0)
+          {
+            (*m_willRemoveEntry) (item->payload (), lifetime);
+          }
+        
+        policy_container::erase (policy_container::s_iterator_to (*item));
+      }
+
+      inline void
+      clear ()
+      {
+        policy_container::clear ();
+      }
+
+      inline void
+      set_max_size (size_t max_size)
+      {
+        max_size_ = max_size;
+      }
+
+      inline size_t
+      get_max_size () const
+      {
+        return max_size_;
+      }
+
+      void
+      set_traced_callback (TracedCallback< typename parent_trie::payload_traits::const_base_type, Time > *callback)
+      {
+        std::cout << Simulator::GetContext () << " " << callback << std::endl;
+        m_willRemoveEntry = callback;
+      }
+      
+    private:
+      type () : base_(*((Base*)0)) { };
+      
+    private:
+      Base &base_;
+      size_t max_size_;
+
+      TracedCallback< typename parent_trie::payload_traits::const_base_type, Time > *m_willRemoveEntry;
+    };
+  };
+};
+
+} // ndnSIM
+} // ndn
+} // ns3
+
+#endif // LIFETIME_STATS_POLICY_H
diff --git a/utils/trie/multi-policy.h b/utils/trie/multi-policy.h
index 386cb2e..0745cd3 100644
--- a/utils/trie/multi-policy.h
+++ b/utils/trie/multi-policy.h
@@ -31,6 +31,7 @@
 #include <boost/mpl/transform.hpp>
 #include <boost/mpl/back_inserter.hpp>
 #include <boost/mpl/vector.hpp>
+#include <boost/mpl/for_each.hpp>
 
 #include <boost/intrusive/options.hpp>
 
@@ -122,8 +123,60 @@
       {
         policy_container::clear ();
       }
+
+      struct max_size_setter
+      {
+        max_size_setter (policy_container &container, size_t size) : m_container (container), m_size (size) { }
+        
+        template< typename U > void operator() (U index)
+        {
+          m_container.template get<U::value> ().set_max_size (m_size);
+        }
+
+      private:
+        policy_container &m_container;
+        size_t m_size;
+      };
+      
+      inline void
+      set_max_size (size_t max_size)
+      {
+        boost::mpl::for_each< boost::mpl::range_c<int, 0, boost::mpl::size<policy_traits>::type::value> >
+          (max_size_setter (*this, max_size));
+      }
+
+      inline size_t
+      get_max_size () const
+      {
+        // as max size should be the same everywhere, get the value from the first available policy
+        return policy_container::template get<0> ().get_max_size ();
+      }
+      
     };
   };
+
+
+  struct name_getter
+  {
+    name_getter (std::string &name) : m_name (name) { }
+    
+    template< typename U > void operator() (U index)
+    {
+      m_name += boost::mpl::at_c< policy_traits, U::value >::type::GetName ();
+    }
+
+    std::string &m_name;
+  };
+
+  /// @brief Name that can be used to identify the policy (for NS-3 object model and logging)
+  static std::string GetName ()
+  {
+    // combine names of all internal policies
+    std::string name;
+    boost::mpl::for_each< boost::mpl::range_c<int, 0, boost::mpl::size<policy_traits>::type::value> > (name_getter (name));
+    
+    return name;
+  }
 };
 
 } // ndnSIM
diff --git a/utils/trie/trie.h b/utils/trie/trie.h
index bcffdc3..a38ac28 100644
--- a/utils/trie/trie.h
+++ b/utils/trie/trie.h
@@ -39,7 +39,7 @@
 /////////////////////////////////////////////////////
 // Allow customization for payload
 //
-template<typename Payload>
+template<typename Payload, typename BasePayload = Payload>
 struct pointer_payload_traits
 {
   typedef Payload         payload_type; // general type of the payload
@@ -49,14 +49,17 @@
   typedef Payload*        return_type;  // what is returned on access
   typedef const Payload*  const_return_type; // what is returned on const access
 
+  typedef typename Payload::base_type*       base_type;       // base type of the entry (when implementation details need to be hidden)
+  typedef const typename Payload::base_type* const_base_type; // const base type of the entry (when implementation details need to be hidden)
+  
   static Payload* empty_payload;
 };
 
-template<typename Payload>
+template<typename Payload, typename BasePayload>
 Payload*
-pointer_payload_traits<Payload>::empty_payload = 0;
+pointer_payload_traits<Payload, BasePayload>::empty_payload = 0;
 
-template<typename Payload>
+template<typename Payload, typename BasePayload = Payload>
 struct smart_pointer_payload_traits
 {
   typedef Payload                 payload_type;
@@ -65,15 +68,18 @@
   
   typedef ns3::Ptr<Payload>       return_type;
   typedef ns3::Ptr<const Payload> const_return_type;
+
+  typedef ns3::Ptr<BasePayload> base_type;
+  typedef ns3::Ptr<const BasePayload> const_base_type;
   
   static ns3::Ptr<Payload> empty_payload;
 };
 
-template<typename Payload>
+template<typename Payload, typename BasePayload>
 ns3::Ptr<Payload>
-smart_pointer_payload_traits<Payload>::empty_payload = 0;
+smart_pointer_payload_traits<Payload, BasePayload>::empty_payload = 0;
 
-template<typename Payload>
+template<typename Payload, typename BasePayload = Payload>
 struct non_pointer_traits
 {
   typedef Payload         payload_type;
@@ -83,12 +89,15 @@
   typedef Payload&        return_type;
   typedef const Payload & const_return_type;
   
+  typedef typename Payload::base_type&       base_type;
+  typedef const typename Payload::base_type& const_base_type;
+  
   static Payload empty_payload;
 };
 
-template<typename Payload>
+template<typename Payload, typename BasePayload>
 Payload 
-non_pointer_traits<Payload>::empty_payload = Payload ();
+non_pointer_traits<Payload, BasePayload>::empty_payload = Payload ();
 
 
 ////////////////////////////////////////////////////
