diff --git a/utils/trie/aggregate-stats-policy.h b/utils/trie/aggregate-stats-policy.h
new file mode 100644
index 0000000..c8d9dea
--- /dev/null
+++ b/utils/trie/aggregate-stats-policy.h
@@ -0,0 +1,146 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011-2013 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 AGGREGATE_STATS_POLICY_H_
+#define AGGREGATE_STATS_POLICY_H_
+
+#include <boost/intrusive/options.hpp>
+#include <boost/intrusive/list.hpp>
+
+namespace ns3 {
+namespace ndn {
+namespace ndnSIM {
+
+/**
+ * @brief Traits for policy that just keeps track of number of elements
+ * It's doing a rather expensive job, but just in case it needs to be extended later
+ */
+struct aggregate_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 "AggregateStats"; }
+  struct policy_hook_type { };
+
+  template<class Container>
+  struct container_hook
+  {
+    struct type { };
+  };
+
+  template<class Base,
+           class Container,
+           class Hook>
+  struct policy
+  {
+    // typedef typename boost::intrusive::list< Container, Hook > policy_container;
+
+    // could be just typedef
+    class type
+    {
+    public:
+      typedef Container parent_trie;
+
+      type (Base &base)
+        : base_ (base)
+        , m_updates (0)
+        , m_inserts (0)
+        , m_lookups (0)
+        , m_erases (0)
+      {
+      }
+
+      inline void
+      update (typename parent_trie::iterator item)
+      {
+        m_updates ++;
+        // do nothing
+      }
+
+      inline bool
+      insert (typename parent_trie::iterator item)
+      {
+        m_inserts ++;
+        return true;
+      }
+
+      inline void
+      lookup (typename parent_trie::iterator item)
+      {
+        m_lookups ++;
+      }
+
+      inline void
+      erase (typename parent_trie::iterator item)
+      {
+        m_erases ++;
+      }
+
+      inline void
+      set_max_size (uint32_t) {}
+
+      inline uint32_t
+      get_max_size () const { return 0; }
+
+      inline void
+      clear ()
+      {
+        // is called only at the end of simulation
+      }
+
+      inline void
+      resetStats ()
+      {
+        m_updates = 0;
+        m_inserts = 0;
+        m_lookups = 0;
+        m_erases = 0;
+      }
+
+      inline uint64_t
+      GetUpdates () const { return m_updates; }
+
+      inline uint64_t
+      GetInserts () const { return m_inserts; }
+
+      inline uint64_t
+      GetLookups () const { return m_lookups; }
+
+      inline uint64_t
+      GetErases () const { return m_erases; }
+
+    private:
+      type () : base_(*((Base*)0)) { };
+
+    private:
+      Base &base_;
+      
+      uint64_t m_updates;
+      uint64_t m_inserts;
+      uint64_t m_lookups;
+      uint64_t m_erases;
+    };
+  };
+};
+
+} // ndnSIM
+} // ndn
+} // ns3
+
+#endif // AGGREGATE_STATS_POLICY_H_
