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 ();
 
 
 ////////////////////////////////////////////////////
