diff --git a/model/ccnx-content-store-impl.h b/model/ccnx-content-store-impl.h
new file mode 100644
index 0000000..e2ee632
--- /dev/null
+++ b/model/ccnx-content-store-impl.h
@@ -0,0 +1,104 @@
+/* -*-  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 CCNX_CONTENT_STORE_IMPL_H_
+#define CCNX_CONTENT_STORE_IMPL_H_
+
+#include "ccnx-content-store.h"
+#include "ns3/packet.h"
+#include "ns3/ccnx-interest-header.h"
+#include "ns3/ccnx-content-object-header.h"
+#include <boost/foreach.hpp>
+
+namespace ns3
+{
+
+template<class Container>
+class CcnxContentStoreImpl : public CcnxContentStore,
+                             protected Container
+{
+public:
+  // from CcnxContentStore
+  
+  virtual inline boost::tuple<Ptr<Packet>, Ptr<const CcnxContentObjectHeader>, Ptr<const Packet> >
+  Lookup (Ptr<const CcnxInterestHeader> interest);
+            
+  virtual inline bool
+  Add (Ptr<CcnxContentObjectHeader> header, Ptr<const Packet> packet);
+
+  // virtual bool
+  // Remove (Ptr<CcnxInterestHeader> header);
+  
+  virtual inline void
+  Print (std::ostream &os) const;  
+};
+
+
+template<class Container>
+boost::tuple<Ptr<Packet>, Ptr<const CcnxContentObjectHeader>, Ptr<const Packet> >
+CcnxContentStoreImpl<Container>::Lookup (Ptr<const CcnxInterestHeader> interest)
+{
+  // NS_LOG_FUNCTION (this << interest->GetName ());
+
+  /// @todo Change to search with predicate
+  typename Container::iterator node = this->deepest_prefix_match (interest->GetName ());
+  
+  if (node != this->end ())
+    {
+      this->m_cacheHitsTrace (interest, node->payload ()->GetHeader ());
+
+      // NS_LOG_DEBUG ("cache hit with " << node->payload ()->GetHeader ()->GetName ());
+      return boost::make_tuple (node->payload ()->GetFullyFormedCcnxPacket (),
+                                node->payload ()->GetHeader (),
+                                node->payload ()->GetPacket ());
+    }
+  else
+    {
+      // NS_LOG_DEBUG ("cache miss for " << interest->GetName ());
+      this->m_cacheMissesTrace (interest);
+      return boost::tuple<Ptr<Packet>, Ptr<CcnxContentObjectHeader>, Ptr<Packet> > (0, 0, 0);
+    }
+}   
+    
+template<class Container>
+bool 
+CcnxContentStoreImpl<Container>::Add (Ptr<CcnxContentObjectHeader> header, Ptr<const Packet> packet)
+{
+  // NS_LOG_FUNCTION (this << header->GetName ());
+
+  return
+    this->insert (header->GetName (), Create<CcnxContentStoreEntry> (header, packet))
+    .second;
+}
+    
+template<class Container>
+void 
+CcnxContentStoreImpl<Container>::Print (std::ostream &os) const
+{
+  BOOST_FOREACH (const typename Container::parent_trie &item, this->getPolicy ())
+    {
+      os << item.payload ()->GetName () << std::endl;
+    }
+}
+
+
+} // namespace ns3
+
+#endif // CCNX_CONTENT_STORE_IMPL_H_
diff --git a/model/ccnx-content-store-lru.cc b/model/ccnx-content-store-lru.cc
index 5546d84..a8d00b6 100644
--- a/model/ccnx-content-store-lru.cc
+++ b/model/ccnx-content-store-lru.cc
@@ -15,22 +15,24 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
- *         Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
 #include "ccnx-content-store-lru.h"
 #include "ns3/log.h"
-#include "ns3/packet.h"
-#include "ns3/ccnx-interest-header.h"
-#include "ns3/ccnx-content-object-header.h"
 #include "ns3/uinteger.h"
 
-NS_LOG_COMPONENT_DEFINE ("CcnxContentStoreLru");
+NS_LOG_COMPONENT_DEFINE ("CcnxContentStorePolicies");
 
 namespace ns3
 {
 
+////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////
+// LRU policy
+////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////
+
 NS_OBJECT_ENSURE_REGISTERED (CcnxContentStoreLru);
 
 TypeId 
@@ -38,7 +40,7 @@
 {
   static TypeId tid = TypeId ("ns3::CcnxContentStoreLru")
     .SetGroupName ("Ccnx")
-    .SetParent<CcnxContentStore> ()
+    .SetParent< CcnxContentStore > ()
     .AddConstructor<CcnxContentStoreLru> ()
     .AddAttribute ("Size",
                    "Maximum number of packets that content storage can hold",
@@ -54,77 +56,118 @@
 void
 CcnxContentStoreLru::SetMaxSize (uint32_t maxSize)
 {
-  m_maxSize = maxSize;
-  m_contentStore.getPolicy ().set_max_size (maxSize);
+  getPolicy ().set_max_size (maxSize);
 }
 
 uint32_t
 CcnxContentStoreLru::GetMaxSize () const
 {
-  return m_maxSize;
+  return getPolicy ().get_max_size ();
 }
 
-
-//////////////////////////////////////////////////////////////////////
-// Helper classes
-//////////////////////////////////////////////////////////////////////
-/**
- * \ingroup ccnx
- * \brief Typedef for hash index of content store container
- */
-
 CcnxContentStoreLru::CcnxContentStoreLru ()
-  : m_maxSize (100)
-{ } // this value shouldn't matter, NS-3 should call SetSize with default value specified in AddAttribute earlier
+{
+}
         
 CcnxContentStoreLru::~CcnxContentStoreLru () 
-{ }
-
-
-boost::tuple<Ptr<Packet>, Ptr<const CcnxContentObjectHeader>, Ptr<const Packet> >
-CcnxContentStoreLru::Lookup (Ptr<const CcnxInterestHeader> interest)
 {
-  NS_LOG_FUNCTION (this << interest->GetName ());
-
-  /// @todo Change to search with predicate
-  CcnxContentStoreLruContainer::iterator node =
-    m_contentStore.deepest_prefix_match (interest->GetName ());
-  
-  if (node != m_contentStore.end ())
-    {
-      m_cacheHitsTrace (interest, node->payload ()->GetHeader ());
-
-      NS_LOG_DEBUG ("cache hit with " << node->payload ()->GetHeader ()->GetName ());
-      return boost::make_tuple (node->payload ()->GetFullyFormedCcnxPacket (),
-                                node->payload ()->GetHeader (),
-                                node->payload ()->GetPacket ());
-    }
-  else
-    {
-      NS_LOG_DEBUG ("cache miss for " << interest->GetName ());
-      m_cacheMissesTrace (interest);
-      return boost::tuple<Ptr<Packet>, Ptr<CcnxContentObjectHeader>, Ptr<Packet> > (0, 0, 0);
-    }
-}   
-    
-bool 
-CcnxContentStoreLru::Add (Ptr<CcnxContentObjectHeader> header, Ptr<const Packet> packet)
-{
-  NS_LOG_FUNCTION (this << header->GetName ());
-
-  return
-    m_contentStore
-    .insert (header->GetName (), Create<CcnxContentStoreEntry> (header, packet))
-    .second;
 }
-    
-void 
-CcnxContentStoreLru::Print () const
+
+////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////
+// RANDOM policy
+////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////
+
+NS_OBJECT_ENSURE_REGISTERED (CcnxContentStoreRandom);
+
+TypeId 
+CcnxContentStoreRandom::GetTypeId (void)
 {
-  BOOST_FOREACH (const CcnxContentStoreLruContainer::parent_trie &item, m_contentStore.getPolicy ())
-    {
-      NS_LOG_INFO (item.payload ()->GetName ());
-    }
+  static TypeId tid = TypeId ("ns3::CcnxContentStoreRandom")
+    .SetGroupName ("Ccnx")
+    .SetParent< CcnxContentStore > ()
+    .AddConstructor<CcnxContentStoreRandom> ()
+    
+    .AddAttribute ("Size",
+                   "Maximum number of packets that content storage can hold",
+                   UintegerValue (100),
+                   MakeUintegerAccessor (&CcnxContentStoreRandom::SetMaxSize,
+                                         &CcnxContentStoreRandom::GetMaxSize),
+                   MakeUintegerChecker<uint32_t> ())
+    ;
+
+  return tid;
 }
 
+void
+CcnxContentStoreRandom::SetMaxSize (uint32_t maxSize)
+{
+  getPolicy ().set_max_size (maxSize);
+}
+
+uint32_t
+CcnxContentStoreRandom::GetMaxSize () const
+{
+  return getPolicy ().get_max_size ();
+}
+
+CcnxContentStoreRandom::CcnxContentStoreRandom ()
+{
+}
+        
+CcnxContentStoreRandom::~CcnxContentStoreRandom () 
+{
+}
+
+
+////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////
+// FIFO policy
+////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////
+
+NS_OBJECT_ENSURE_REGISTERED (CcnxContentStoreFifo);
+
+TypeId 
+CcnxContentStoreFifo::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::CcnxContentStoreFifo")
+    .SetGroupName ("Ccnx")
+    .SetParent< CcnxContentStore > ()
+    .AddConstructor<CcnxContentStoreFifo> ()
+    
+    .AddAttribute ("Size",
+                   "Maximum number of packets that content storage can hold",
+                   UintegerValue (100),
+                   MakeUintegerAccessor (&CcnxContentStoreFifo::SetMaxSize,
+                                         &CcnxContentStoreFifo::GetMaxSize),
+                   MakeUintegerChecker<uint32_t> ())
+    ;
+
+  return tid;
+}
+
+void
+CcnxContentStoreFifo::SetMaxSize (uint32_t maxSize)
+{
+  getPolicy ().set_max_size (maxSize);
+}
+
+uint32_t
+CcnxContentStoreFifo::GetMaxSize () const
+{
+  return getPolicy ().get_max_size ();
+}
+
+CcnxContentStoreFifo::CcnxContentStoreFifo ()
+{
+}
+        
+CcnxContentStoreFifo::~CcnxContentStoreFifo () 
+{
+}
+
+
 } // namespace ns3
+
diff --git a/model/ccnx-content-store-lru.h b/model/ccnx-content-store-lru.h
index 277290a..f863aae 100644
--- a/model/ccnx-content-store-lru.h
+++ b/model/ccnx-content-store-lru.h
@@ -15,36 +15,41 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
- * Author: Ilya Moiseenko <iliamo@cs.ucla.edu>
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ *         Ilya Moiseenko <iliamo@cs.ucla.edu>
  */
 
 #ifndef CCNX_CONTENT_STORE_LRU_H
 #define	CCNX_CONTENT_STORE_LRU_H
 
-#include "ccnx-content-store.h"
+#include "ccnx-content-store-impl.h"
 
 #include "ccnx.h"
 #include "ccnx-name-components-hash-helper.h"
 
 #include "../utils/trie.h"
+#include "../utils/trie-with-policy.h"
+
+#include "../utils/lru-policy.h"
+#include "../utils/random-policy.h"
+#include "../utils/fifo-policy.h"
 
 namespace  ns3
 {
-/**
- * \ingroup ccnx
- * \brief Typedef for content store container implemented as trie with configurable replacement policy
- */
-typedef indexed_trie<CcnxNameComponents,
-                     CcnxContentStoreEntry, smart_pointer_payload_traits<CcnxContentStoreEntry>,
-                     lru_policy_traits<CcnxNameComponents,
-                                       CcnxContentStoreEntry,
-                                       smart_pointer_payload_traits<CcnxContentStoreEntry> > > CcnxContentStoreLruContainer;
 
 /**
  * \ingroup ccnx
- * \brief NDN content store entry
+ * \brief Content Store with LRU replacement policy
  */
-class CcnxContentStoreLru : public CcnxContentStore
+class CcnxContentStoreLru :
+    public CcnxContentStoreImpl<
+      trie_with_policy<CcnxNameComponents,
+                       CcnxContentStoreEntry,
+                       smart_pointer_payload_traits<CcnxContentStoreEntry>,
+                       lru_policy_traits<CcnxNameComponents,
+                                         CcnxContentStoreEntry,
+                                         smart_pointer_payload_traits<CcnxContentStoreEntry> > >
+      >
 {
 public:
   /**
@@ -60,42 +65,88 @@
   CcnxContentStoreLru ();
   virtual ~CcnxContentStoreLru ();
 
-  /**
-   * \brief Set maximum size of content store
-   *
-   * \param size size in packets
-   */
+private:
   void
   SetMaxSize (uint32_t maxSize);
 
-  /**
-   * \brief Get maximum size of content store
-   *
-   * \returns size in packets
-   */
   uint32_t
   GetMaxSize () const;
-  
-  // from CcnxContentStore
-  virtual boost::tuple<Ptr<Packet>, Ptr<const CcnxContentObjectHeader>, Ptr<const Packet> >
-  Lookup (Ptr<const CcnxInterestHeader> interest);
-            
-  virtual bool
-  Add (Ptr<CcnxContentObjectHeader> header, Ptr<const Packet> packet);
+};
 
-  virtual void
-  Print () const;
-  
-private:
-  size_t m_maxSize; ///< \brief maximum number of entries in cache
+
+/**
+ * \ingroup ccnx
+ * \brief Content Store with RANDOM replacement policy
+ */
+class CcnxContentStoreRandom :
+    public CcnxContentStoreImpl<
+      trie_with_policy<CcnxNameComponents,
+                       CcnxContentStoreEntry,
+                       smart_pointer_payload_traits<CcnxContentStoreEntry>,
+                       random_policy_traits<CcnxNameComponents,
+                                            CcnxContentStoreEntry,
+                                            smart_pointer_payload_traits<CcnxContentStoreEntry> > >
+      >
+{
+public:
+  /**
+   * \brief Interface ID
+   *
+   * \return interface ID
+   */
+  static TypeId GetTypeId ();
 
   /**
-   * \brief Content store implemented as a Boost.MultiIndex container
-   * \internal
+   * Default constructor
    */
-  CcnxContentStoreLruContainer m_contentStore;
+  CcnxContentStoreRandom ();
+  virtual ~CcnxContentStoreRandom ();
+
+private:
+  void
+  SetMaxSize (uint32_t maxSize);
+
+  uint32_t
+  GetMaxSize () const;
 };
 
+/**
+ * \ingroup ccnx
+ * \brief Content Store with FIFO replacement policy
+ */
+class CcnxContentStoreFifo :
+    public CcnxContentStoreImpl<
+      trie_with_policy<CcnxNameComponents,
+                       CcnxContentStoreEntry,
+                       smart_pointer_payload_traits<CcnxContentStoreEntry>,
+                       fifo_policy_traits<CcnxNameComponents,
+                                          CcnxContentStoreEntry,
+                                          smart_pointer_payload_traits<CcnxContentStoreEntry> > >
+      >
+{
+public:
+  /**
+   * \brief Interface ID
+   *
+   * \return interface ID
+   */
+  static TypeId GetTypeId ();
+
+  /**
+   * Default constructor
+   */
+  CcnxContentStoreFifo ();
+  virtual ~CcnxContentStoreFifo ();
+
+private:
+  void
+  SetMaxSize (uint32_t maxSize);
+
+  uint32_t
+  GetMaxSize () const;
+};
+
+
 } //namespace ns3
 
 #endif // CCNX_CONTENT_STORE_LRU_H
diff --git a/model/ccnx-content-store.h b/model/ccnx-content-store.h
index 27bcda4..34d209d 100644
--- a/model/ccnx-content-store.h
+++ b/model/ccnx-content-store.h
@@ -153,7 +153,7 @@
    * \brief Print out content store entries
    */
   virtual void
-  Print () const = 0;
+  Print (std::ostream &os) const = 0;
 
 protected:
   TracedCallback<Ptr<const CcnxInterestHeader>,
@@ -165,7 +165,7 @@
 inline std::ostream&
 operator<< (std::ostream &os, const CcnxContentStore &cs)
 {
-  cs.Print ();
+  cs.Print (os);
   return os;
 }
 
diff --git a/model/ccnx-pit-entry.h b/model/ccnx-pit-entry.h
index bc81c89..1ab4f65 100644
--- a/model/ccnx-pit-entry.h
+++ b/model/ccnx-pit-entry.h
@@ -30,14 +30,12 @@
 #include <boost/multi_index_container.hpp>
 #include <boost/multi_index/tag.hpp>
 #include <boost/multi_index/ordered_index.hpp>
-#include <boost/multi_index/composite_key.hpp>
-#include <boost/multi_index/hashed_index.hpp>
+// #include <boost/multi_index/composite_key.hpp>
+// #include <boost/multi_index/hashed_index.hpp>
 #include <boost/multi_index/member.hpp>
-#include <boost/multi_index/mem_fun.hpp>
+// #include <boost/multi_index/mem_fun.hpp>
 #include <set>
 
-#include <iostream>
-
 namespace ns3 {
 
 class CcnxFace;
diff --git a/model/ccnx-pit.h b/model/ccnx-pit.h
index be9c80f..8bb746e 100644
--- a/model/ccnx-pit.h
+++ b/model/ccnx-pit.h
@@ -120,7 +120,7 @@
    * \brief Destructor
    */
   virtual ~CcnxPit ();
-  
+
   /**
    * \brief Find corresponding PIT entry for the given content name
    * \param prefix Prefix for which to lookup the entry
@@ -167,15 +167,16 @@
    */
   void
   MarkErased (iterator entry);
-    
+
 protected:
   // inherited from Object class                                                                                                                                                        
   virtual void NotifyNewAggregate (); ///< @brief Even when object is aggregated to another Object
   virtual void DoDispose (); ///< @brief Do cleanup
-  	
+
 private:
   /** \brief Remove expired records from PIT */
-  void CleanExpired ();
+  void
+  CleanExpired ();
 
   /**
    * \brief Set cleanup timeout
@@ -184,16 +185,19 @@
    *
    * \param timeout cleanup timeout
    */
-  void SetCleanupTimeout (const Time &timeout);
+  void
+  SetCleanupTimeout (const Time &timeout);
 
   /**
    * \brief Get cleanup timeout
    *
    * \returns cleanup timeout
    */
-  Time GetCleanupTimeout () const;
+  Time
+  GetCleanupTimeout () const;
 
-  friend std::ostream& operator<< (std::ostream& os, const CcnxPit &fib);
+  friend std::ostream&
+  operator<< (std::ostream& os, const CcnxPit &fib);
   
 private:
   Time    m_cleanupTimeout; ///< \brief Configurable timeout of how often cleanup events are working
