diff --git a/model/cs/content-store-impl.h b/model/cs/content-store-impl.h
index 7ed8ae3..ffe8038 100644
--- a/model/cs/content-store-impl.h
+++ b/model/cs/content-store-impl.h
@@ -44,7 +44,7 @@
   typedef Entry base_type;
 
 public:
-  EntryImpl (Ptr<ContentStore> cs, Ptr<const ContentObjectHeader> header, Ptr<const Packet> packet)
+  EntryImpl (Ptr<ContentStore> cs, Ptr<const ContentObject> header, Ptr<const Packet> packet)
     : Entry (cs, header, packet)
     , item_ (0)
   {
@@ -86,14 +86,14 @@
 
   // from ContentStore
 
-  virtual inline boost::tuple<Ptr<Packet>, Ptr<const ContentObjectHeader>, Ptr<const Packet> >
-  Lookup (Ptr<const InterestHeader> interest);
+  virtual inline boost::tuple<Ptr<Packet>, Ptr<const ContentObject>, Ptr<const Packet> >
+  Lookup (Ptr<const Interest> interest);
 
   virtual inline bool
-  Add (Ptr<const ContentObjectHeader> header, Ptr<const Packet> packet);
+  Add (Ptr<const ContentObject> header, Ptr<const Packet> packet);
 
   // virtual bool
-  // Remove (Ptr<InterestHeader> header);
+  // Remove (Ptr<Interest> header);
 
   virtual inline void
   Print (std::ostream &os) const;
@@ -156,8 +156,8 @@
 }
 
 template<class Policy>
-boost::tuple<Ptr<Packet>, Ptr<const ContentObjectHeader>, Ptr<const Packet> >
-ContentStoreImpl<Policy>::Lookup (Ptr<const InterestHeader> interest)
+boost::tuple<Ptr<Packet>, Ptr<const ContentObject>, Ptr<const Packet> >
+ContentStoreImpl<Policy>::Lookup (Ptr<const Interest> interest)
 {
   NS_LOG_FUNCTION (this << interest->GetName ());
 
@@ -177,13 +177,13 @@
     {
       // NS_LOG_DEBUG ("cache miss for " << interest->GetName ());
       this->m_cacheMissesTrace (interest);
-      return boost::tuple<Ptr<Packet>, Ptr<ContentObjectHeader>, Ptr<Packet> > (0, 0, 0);
+      return boost::tuple<Ptr<Packet>, Ptr<ContentObject>, Ptr<Packet> > (0, 0, 0);
     }
 }
 
 template<class Policy>
 bool
-ContentStoreImpl<Policy>::Add (Ptr<const ContentObjectHeader> header, Ptr<const Packet> packet)
+ContentStoreImpl<Policy>::Add (Ptr<const ContentObject> header, Ptr<const Packet> packet)
 {
   NS_LOG_FUNCTION (this << header->GetName ());
 
diff --git a/model/cs/content-store-with-freshness.h b/model/cs/content-store-with-freshness.h
index 6858f97..dab654c 100644
--- a/model/cs/content-store-with-freshness.h
+++ b/model/cs/content-store-with-freshness.h
@@ -43,7 +43,7 @@
   GetTypeId ();
 
   virtual inline bool
-  Add (Ptr<const ContentObjectHeader> header, Ptr<const Packet> packet);
+  Add (Ptr<const ContentObject> header, Ptr<const Packet> packet);
 
 private:
   inline void
@@ -87,7 +87,7 @@
 
 template<class Policy>
 inline bool
-ContentStoreWithFreshness< Policy >::Add (Ptr<const ContentObjectHeader> header, Ptr<const Packet> packet)
+ContentStoreWithFreshness< Policy >::Add (Ptr<const ContentObject> header, Ptr<const Packet> packet)
 {
   bool ok = super::Add (header, packet);
   if (!ok) return false;
diff --git a/model/cs/ndn-content-store.cc b/model/cs/ndn-content-store.cc
index 98e118d..c99d7ed 100644
--- a/model/cs/ndn-content-store.cc
+++ b/model/cs/ndn-content-store.cc
@@ -60,7 +60,7 @@
 
 //////////////////////////////////////////////////////////////////////
 
-Entry::Entry (Ptr<ContentStore> cs, Ptr<const ContentObjectHeader> header, Ptr<const Packet> packet)
+Entry::Entry (Ptr<ContentStore> cs, Ptr<const ContentObject> header, Ptr<const Packet> packet)
   : m_cs (cs)
   , m_header (header)
   , m_packet (packet->Copy ())
@@ -84,7 +84,7 @@
   return m_header->GetName ();
 }
 
-Ptr<const ContentObjectHeader>
+Ptr<const ContentObject>
 Entry::GetHeader () const
 {
   return m_header;
diff --git a/model/cs/ndn-content-store.h b/model/cs/ndn-content-store.h
index 1e01a6e..9edfb52 100644
--- a/model/cs/ndn-content-store.h
+++ b/model/cs/ndn-content-store.h
@@ -34,8 +34,8 @@
 
 namespace ndn {
 
-class ContentObjectHeader;
-class InterestHeader;
+class ContentObject;
+class Interest;
 class Name;
 
 class ContentStore;
@@ -65,7 +65,7 @@
    * The constructor will make a copy of the supplied packet and calls
    * RemoveHeader and RemoveTail on the copy.
    */
-  Entry (Ptr<ContentStore> cs, Ptr<const ContentObjectHeader> header, Ptr<const Packet> packet);
+  Entry (Ptr<ContentStore> cs, Ptr<const ContentObject> header, Ptr<const Packet> packet);
 
   /**
    * \brief Get prefix of the stored entry
@@ -75,10 +75,10 @@
   GetName () const;
 
   /**
-   * \brief Get ContentObjectHeader of the stored entry
-   * \returns ContentObjectHeader of the stored entry
+   * \brief Get ContentObject of the stored entry
+   * \returns ContentObject of the stored entry
    */
-  Ptr<const ContentObjectHeader>
+  Ptr<const ContentObject>
   GetHeader () const;
 
   /**
@@ -90,7 +90,7 @@
 
   /**
    * \brief Convenience method to create a fully formed Ndn packet from stored header and content
-   * \returns A read-write copy of the packet with ContentObjectHeader and ContentObjectTail
+   * \returns A read-write copy of the packet with ContentObject and ContentObjectTail
    */
   Ptr<Packet>
   GetFullyFormedNdnPacket () const;
@@ -103,7 +103,7 @@
 
 private:
   Ptr<ContentStore> m_cs; ///< \brief content store to which entry is added
-  Ptr<const ContentObjectHeader> m_header; ///< \brief non-modifiable ContentObjectHeader
+  Ptr<const ContentObject> m_header; ///< \brief non-modifiable ContentObject
   Ptr<Packet> m_packet; ///< \brief non-modifiable content of the ContentObject packet
 };
 
@@ -142,19 +142,19 @@
    * 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 ContentObjectHeader>, Ptr<const Packet> >
-  Lookup (Ptr<const InterestHeader> interest) = 0;
+  virtual boost::tuple<Ptr<Packet>, Ptr<const ContentObject>, Ptr<const Packet> >
+  Lookup (Ptr<const Interest> interest) = 0;
 
   /**
    * \brief Add a new content to the content store.
    *
-   * \param header Fully parsed ContentObjectHeader
+   * \param header Fully parsed ContentObject
    * \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 ContentObjectHeader> header, Ptr<const Packet> packet) = 0;
+  Add (Ptr<const ContentObject> header, Ptr<const Packet> packet) = 0;
 
   // /*
   //  * \brief Add a new content to the content store.
@@ -163,7 +163,7 @@
   //  * @returns true if an existing entry was removed, false otherwise
   //  */
   // virtual bool
-  // Remove (Ptr<InterestHeader> header) = 0;
+  // Remove (Ptr<Interest> header) = 0;
 
   /**
    * \brief Print out content store entries
@@ -207,10 +207,10 @@
   GetContentStore (Ptr<Object> node);
 
 protected:
-  TracedCallback<Ptr<const InterestHeader>,
-                 Ptr<const ContentObjectHeader> > m_cacheHitsTrace; ///< @brief trace of cache hits
+  TracedCallback<Ptr<const Interest>,
+                 Ptr<const ContentObject> > m_cacheHitsTrace; ///< @brief trace of cache hits
 
-  TracedCallback<Ptr<const InterestHeader> > m_cacheMissesTrace; ///< @brief trace of cache misses
+  TracedCallback<Ptr<const Interest> > m_cacheMissesTrace; ///< @brief trace of cache misses
 };
 
 inline std::ostream&
