diff --git a/model/content-store/ndn-content-store.h b/model/content-store/ndn-content-store.h
new file mode 100644
index 0000000..2d4ada6
--- /dev/null
+++ b/model/content-store/ndn-content-store.h
@@ -0,0 +1,174 @@
+/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011,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>
+ *         Ilya Moiseenko <iliamo@cs.ucla.edu>
+ */
+
+#ifndef NDN_CONTENT_STORE_H
+#define	NDN_CONTENT_STORE_H
+
+#include "ns3/object.h"
+#include "ns3/ptr.h"
+#include "ns3/traced-callback.h"
+
+#include <boost/tuple/tuple.hpp>
+
+namespace  ns3
+{
+
+class Packet;
+class NdnContentObjectHeader;
+class NdnInterestHeader;
+class NdnNameComponents;
+
+/**
+ * \ingroup ndn
+ * \brief NDN content store entry
+ *
+ * Content store entry stores separately pseudo header and content of
+ * ContentObject packet.  It is responsibility of the caller to
+ * construct a fully formed NdnPacket by calling Copy(), AddHeader(),
+ * AddTail() on the packet received by GetPacket() method.
+ *
+ * GetFullyFormedNdnPacket method provided as a convenience
+ */
+class NdnContentStoreEntry : public SimpleRefCount<NdnContentStoreEntry>
+{
+public:
+  /**
+   * \brief Construct content store entry
+   *
+   * \param header Parsed NdnContentObject header
+   * \param packet Original Ndn packet
+   *
+   * The constructor will make a copy of the supplied packet and calls
+   * RemoveHeader and RemoveTail on the copy.
+   */
+  NdnContentStoreEntry (Ptr<const NdnContentObjectHeader> header, Ptr<const Packet> packet);
+
+  /**
+   * \brief Get prefix of the stored entry
+   * \returns prefix of the stored entry
+   */
+  const NdnNameComponents&
+  GetName () const;
+
+  /**
+   * \brief Get NdnContentObjectHeader of the stored entry
+   * \returns NdnContentObjectHeader of the stored entry
+   */
+  Ptr<const NdnContentObjectHeader>
+  GetHeader () const;
+
+  /**
+   * \brief Get content of the stored entry
+   * \returns content of the stored entry
+   */
+  Ptr<const Packet>
+  GetPacket () const;
+
+  /**
+   * \brief Convenience method to create a fully formed Ndn packet from stored header and content
+   * \returns A read-write copy of the packet with NdnContentObjectHeader and CcxnContentObjectTail
+   */
+  Ptr<Packet>
+  GetFullyFormedNdnPacket () const;
+
+private:
+  Ptr<const NdnContentObjectHeader> m_header; ///< \brief non-modifiable NdnContentObjectHeader
+  Ptr<Packet> m_packet; ///< \brief non-modifiable content of the ContentObject packet
+};
+
+
+/**
+ * \ingroup ndn
+ * \brief Base class for NDN content store
+ *
+ * Particular implementations should implement Lookup, Add, and Print methods
+ */
+class NdnContentStore : public Object
+{
+public:
+  /**
+   * \brief Interface ID
+   *
+   * \return interface ID
+   */
+  static
+  TypeId GetTypeId ();
+
+  /**
+   * @brief Virtual destructor
+   */
+  virtual ~NdnContentStore ();
+            
+  /**
+   * \brief Find corresponding CS entry for the given interest
+   *
+   * \param interest Interest for which matching content store entry
+   * will be searched
+   *
+   * If an entry is found, it is promoted to the top of most recent
+   * used entries index, \see m_contentStore
+   */
+  virtual boost::tuple<Ptr<Packet>, Ptr<const NdnContentObjectHeader>, Ptr<const Packet> >
+  Lookup (Ptr<const NdnInterestHeader> interest) = 0;
+            
+  /**
+   * \brief Add a new content to the content store.
+   *
+   * \param header Fully parsed NdnContentObjectHeader
+   * \param packet Fully formed Ndn packet to add to content store
+   * (will be copied and stripped down of headers)
+   * @returns true if an existing entry was updated, false otherwise
+   */
+  virtual bool
+  Add (Ptr<const NdnContentObjectHeader> header, Ptr<const Packet> packet) = 0;
+
+  // /**
+  //  * \brief Add a new content to the content store.
+  //  *
+  //  * \param header Interest header for which an entry should be removed
+  //  * @returns true if an existing entry was removed, false otherwise
+  //  */
+  // virtual bool
+  // Remove (Ptr<NdnInterestHeader> header) = 0;
+  
+  /**
+   * \brief Print out content store entries
+   */
+  virtual void
+  Print (std::ostream &os) const = 0;
+
+protected:
+  TracedCallback<Ptr<const NdnInterestHeader>,
+                 Ptr<const NdnContentObjectHeader> > m_cacheHitsTrace; ///< @brief trace of cache hits
+    
+  TracedCallback<Ptr<const NdnInterestHeader> > m_cacheMissesTrace; ///< @brief trace of cache misses
+};
+
+inline std::ostream&
+operator<< (std::ostream &os, const NdnContentStore &cs)
+{
+  cs.Print (os);
+  return os;
+}
+
+} // namespace ns3
+
+#endif // NDN_CONTENT_STORE_H
