diff --git a/apps/ndn-app.cc b/apps/ndn-app.cc
index 35db66e..ec4377e 100644
--- a/apps/ndn-app.cc
+++ b/apps/ndn-app.cc
@@ -51,14 +51,14 @@
     .AddTraceSource ("ReceivedNacks", "ReceivedNacks",
                     MakeTraceSourceAccessor (&App::m_receivedNacks))
     
-    .AddTraceSource ("ReceivedContentObjects", "ReceivedContentObjects",
-                    MakeTraceSourceAccessor (&App::m_receivedContentObjects))
+    .AddTraceSource ("ReceivedDatas", "ReceivedDatas",
+                    MakeTraceSourceAccessor (&App::m_receivedDatas))
 
     .AddTraceSource ("TransmittedInterests", "TransmittedInterests",
                     MakeTraceSourceAccessor (&App::m_transmittedInterests))
 
-    .AddTraceSource ("TransmittedContentObjects", "TransmittedContentObjects",
-                    MakeTraceSourceAccessor (&App::m_transmittedContentObjects))
+    .AddTraceSource ("TransmittedDatas", "TransmittedDatas",
+                    MakeTraceSourceAccessor (&App::m_transmittedDatas))
     ;
   return tid;
 }
@@ -108,10 +108,10 @@
 }
 
 void
-App::OnContentObject (Ptr<const ContentObject> contentObject)
+App::OnData (Ptr<const Data> contentObject)
 {
   NS_LOG_FUNCTION (this << contentObject);
-  m_receivedContentObjects (contentObject, this, m_face);
+  m_receivedDatas (contentObject, this, m_face);
 }
 
 // Application Methods
diff --git a/apps/ndn-app.h b/apps/ndn-app.h
index bbe5668..2157a7f 100644
--- a/apps/ndn-app.h
+++ b/apps/ndn-app.h
@@ -33,7 +33,7 @@
 namespace ndn {
 
 class Interest;
-class ContentObject;
+class Data;
 
 class Face;
 
@@ -45,7 +45,7 @@
  * @ingroup ndn-apps
  * @brief Base class that all NDN applications should be derived from.
  * 
- * The class implements virtual calls onInterest, onNack, and onContentObject
+ * The class implements virtual calls onInterest, onNack, and onData
  */
 class App: public Application
 {
@@ -81,12 +81,12 @@
   OnNack (Ptr<const Interest> interest);
   
   /**
-   * @brief Method that will be called every time new ContentObject arrives
-   * @param contentObject ContentObject header
-   * @param payload payload (potentially virtual) of the ContentObject packet (may include packet tags of original packet)
+   * @brief Method that will be called every time new Data arrives
+   * @param contentObject Data header
+   * @param payload payload (potentially virtual) of the Data packet (may include packet tags of original packet)
    */
   virtual void
-  OnContentObject (Ptr<const ContentObject> contentObject);
+  OnData (Ptr<const Data> contentObject);
   
 protected:
   /**
@@ -112,15 +112,15 @@
   TracedCallback<Ptr<const Interest>,
                  Ptr<App>, Ptr<Face> > m_receivedNacks; ///< @brief App-level trace of received NACKs
 
-  TracedCallback<Ptr<const ContentObject>,
-                 Ptr<App>, Ptr<Face> > m_receivedContentObjects; ///< @brief App-level trace of received Data
+  TracedCallback<Ptr<const Data>,
+                 Ptr<App>, Ptr<Face> > m_receivedDatas; ///< @brief App-level trace of received Data
 
 
   TracedCallback<Ptr<const Interest>,
                  Ptr<App>, Ptr<Face> > m_transmittedInterests; ///< @brief App-level trace of transmitted Interests
 
-  TracedCallback<Ptr<const ContentObject>,
-                 Ptr<App>, Ptr<Face> > m_transmittedContentObjects; ///< @brief App-level trace of transmitted Data
+  TracedCallback<Ptr<const Data>,
+                 Ptr<App>, Ptr<Face> > m_transmittedDatas; ///< @brief App-level trace of transmitted Data
 };
 
 } // namespace ndn
diff --git a/apps/ndn-consumer-batches.h b/apps/ndn-consumer-batches.h
index 23a75c9..2871bf2 100644
--- a/apps/ndn-consumer-batches.h
+++ b/apps/ndn-consumer-batches.h
@@ -50,7 +50,7 @@
   // OnNack (const Ptr<const Interest> &interest);
 
   // virtual void
-  // OnContentObject (const Ptr<const ContentObject> &contentObject,
+  // OnData (const Ptr<const Data> &contentObject,
   //                  const Ptr<const Packet> &payload);
 
   // virtual void
diff --git a/apps/ndn-consumer-cbr.cc b/apps/ndn-consumer-cbr.cc
index 9a0a638..77fe130 100644
--- a/apps/ndn-consumer-cbr.cc
+++ b/apps/ndn-consumer-cbr.cc
@@ -138,10 +138,10 @@
 ///////////////////////////////////////////////////
 
 // void
-// Consumer::OnContentObject (const Ptr<const ContentObject> &contentObject,
+// Consumer::OnData (const Ptr<const Data> &contentObject,
 //                                const Ptr<const Packet> &payload)
 // {
-//   Consumer::OnContentObject (contentObject, payload); // tracing inside
+//   Consumer::OnData (contentObject, payload); // tracing inside
 // }
 
 // void
diff --git a/apps/ndn-consumer-cbr.h b/apps/ndn-consumer-cbr.h
index 7076e7d..0f875c8 100644
--- a/apps/ndn-consumer-cbr.h
+++ b/apps/ndn-consumer-cbr.h
@@ -51,7 +51,7 @@
   // OnNack (const Ptr<const Interest> &interest);
 
   // virtual void
-  // OnContentObject (const Ptr<const ContentObject> &contentObject,
+  // OnData (const Ptr<const Data> &contentObject,
   //                  const Ptr<const Packet> &payload);
 
 protected:
diff --git a/apps/ndn-consumer-window.cc b/apps/ndn-consumer-window.cc
index ae4a0c9..2a87ef6 100644
--- a/apps/ndn-consumer-window.cc
+++ b/apps/ndn-consumer-window.cc
@@ -186,9 +186,9 @@
 ///////////////////////////////////////////////////
 
 void
-ConsumerWindow::OnContentObject (Ptr<const ContentObject> contentObject)
+ConsumerWindow::OnData (Ptr<const Data> contentObject)
 {
-  Consumer::OnContentObject (contentObject);
+  Consumer::OnData (contentObject);
 
   m_window = m_window + 1;
 
diff --git a/apps/ndn-consumer-window.h b/apps/ndn-consumer-window.h
index 1064f54..79211e5 100644
--- a/apps/ndn-consumer-window.h
+++ b/apps/ndn-consumer-window.h
@@ -53,7 +53,7 @@
   OnNack (Ptr<const Interest> interest);
 
   virtual void
-  OnContentObject (Ptr<const ContentObject> contentObject);
+  OnData (Ptr<const Data> contentObject);
 
   virtual void
   OnTimeout (uint32_t sequenceNumber);
diff --git a/apps/ndn-consumer.cc b/apps/ndn-consumer.cc
index 619e2f1..d6eb389 100644
--- a/apps/ndn-consumer.cc
+++ b/apps/ndn-consumer.cc
@@ -223,11 +223,11 @@
 
 
 void
-Consumer::OnContentObject (Ptr<const ContentObject> data)
+Consumer::OnData (Ptr<const Data> data)
 {
   if (!m_active) return;
 
-  App::OnContentObject (data); // tracing inside
+  App::OnData (data); // tracing inside
 
   NS_LOG_FUNCTION (this << data);
 
diff --git a/apps/ndn-consumer.h b/apps/ndn-consumer.h
index baa6ba3..eea5fda 100644
--- a/apps/ndn-consumer.h
+++ b/apps/ndn-consumer.h
@@ -64,7 +64,7 @@
   OnNack (Ptr<const Interest> interest);
 
   virtual void
-  OnContentObject (Ptr<const ContentObject> contentObject);
+  OnData (Ptr<const Data> contentObject);
 
   /**
    * @brief Timeout event
diff --git a/apps/ndn-producer.cc b/apps/ndn-producer.cc
index e224841..e8bf98c 100644
--- a/apps/ndn-producer.cc
+++ b/apps/ndn-producer.cc
@@ -127,7 +127,7 @@
 
   if (!m_active) return;
 
-  Ptr<ContentObject> data = Create<ContentObject> (Create<Packet> (m_virtualPayloadSize));
+  Ptr<Data> data = Create<Data> (Create<Packet> (m_virtualPayloadSize));
   Ptr<Name> dataName = Create<Name> (interest->GetName ());
   dataName->append (m_postfix);
   data->SetName (dataName);
@@ -139,7 +139,7 @@
       data->SetKeyLocator (Create<Name> (m_keyLocator));
     }
 
-  NS_LOG_INFO ("node("<< GetNode()->GetId() <<") respodning with ContentObject: " << data->GetName ());
+  NS_LOG_INFO ("node("<< GetNode()->GetId() <<") respodning with Data: " << data->GetName ());
 
   // Echo back FwHopCountTag if exists
   FwHopCountTag hopCountTag;
@@ -149,7 +149,7 @@
     }
 
   m_face->ReceiveData (data);
-  m_transmittedContentObjects (data, this, m_face);
+  m_transmittedDatas (data, this, m_face);
 }
 
 } // namespace ndn
diff --git a/bindings/callbacks_list.py b/bindings/callbacks_list.py
index 9a15f16..e485155 100644
--- a/bindings/callbacks_list.py
+++ b/bindings/callbacks_list.py
@@ -2,8 +2,8 @@
     ['void', 'ns3::Ptr<ns3::ndn::Name const>', 'ns3::Ptr<ns3::ndn::Interest const>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::ndn::Interest const>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'ns3::Ptr<ns3::ndn::Interest const>', 'ns3::Ptr<ns3::ndn::ContentObject const>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
-    ['void', 'ns3::Ptr<ns3::ndn::Face>', 'ns3::Ptr<ns3::ndn::ContentObject>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::ndn::Interest const>', 'ns3::Ptr<ns3::ndn::Data const>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
+    ['void', 'ns3::Ptr<ns3::ndn::Face>', 'ns3::Ptr<ns3::ndn::Data>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::ndn::Face>', 'ns3::Ptr<ns3::ndn::Interest>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::Application>', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
     ['void', 'ns3::Ptr<ns3::NetDevice>', 'ns3::Ptr<ns3::Packet const>', 'unsigned short', 'ns3::Address const&', 'ns3::Address const&', 'ns3::NetDevice::PacketType', 'ns3::empty', 'ns3::empty', 'ns3::empty'],
diff --git a/bindings/modulegen__gcc_ILP32.py b/bindings/modulegen__gcc_ILP32.py
index 83bd1ad..94f3f2a 100644
--- a/bindings/modulegen__gcc_ILP32.py
+++ b/bindings/modulegen__gcc_ILP32.py
@@ -178,8 +178,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TopologyReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TopologyReader>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::ndn::ContentObject', 'ns3::empty', 'ns3::DefaultDeleter<ns3::ndn::ContentObject>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::ndn::Data', 'ns3::empty', 'ns3::DefaultDeleter<ns3::ndn::Data>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::Exclude, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Exclude> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::ndn::Exclude', 'ns3::empty', 'ns3::DefaultDeleter<ns3::ndn::Exclude>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::FaceContainer, ns3::empty, ns3::DefaultDeleter<ns3::ndn::FaceContainer> > [class]
@@ -374,10 +374,10 @@
     module.add_class('AppHelper')
     ## blob.h (module 'ndnSIM'): ns3::ndn::Blob [class]
     module.add_class('Blob')
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::ContentObject [class]
-    module.add_class('ContentObject', parent=root_module['ns3::SimpleRefCount< ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> >'])
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::ContentObjectException [class]
-    module.add_class('ContentObjectException')
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::Data [class]
+    module.add_class('Data', parent=root_module['ns3::SimpleRefCount< ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> >'])
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::DataException [class]
+    module.add_class('DataException')
     ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::ContentStore [class]
     module.add_class('ContentStore', parent=root_module['ns3::Object'])
     ## exclude.h (module 'ndnSIM'): ns3::ndn::Exclude [class]
@@ -441,10 +441,10 @@
     module.add_container('std::vector< char >', 'char', container_type='vector')
     module.add_container('std::map< ns3::ndn::name::Component, bool, std::greater< ns3::ndn::name::Component >, std::allocator< std::pair< ns3::ndn::name::Component const, bool > > >', ('ns3::ndn::name::Component', 'bool'), container_type='map')
     module.add_container('std::vector< ns3::Ptr< ns3::ndn::Face > >', 'ns3::Ptr< ns3::ndn::Face >', container_type='vector')
-    typehandlers.add_type_alias('ns3::ndn::ContentObject', 'ns3::ndn::ContentObjectHeader')
-    typehandlers.add_type_alias('ns3::ndn::ContentObject*', 'ns3::ndn::ContentObjectHeader*')
-    typehandlers.add_type_alias('ns3::ndn::ContentObject&', 'ns3::ndn::ContentObjectHeader&')
-    module.add_typedef(root_module['ns3::ndn::ContentObject'], 'ContentObjectHeader')
+    typehandlers.add_type_alias('ns3::ndn::Data', 'ns3::ndn::DataHeader')
+    typehandlers.add_type_alias('ns3::ndn::Data*', 'ns3::ndn::DataHeader*')
+    typehandlers.add_type_alias('ns3::ndn::Data&', 'ns3::ndn::DataHeader&')
+    module.add_typedef(root_module['ns3::ndn::Data'], 'DataHeader')
     typehandlers.add_type_alias('std::deque< ns3::ndn::RttHistory, std::allocator< ns3::ndn::RttHistory > >', 'ns3::ndn::RttHistory_t')
     typehandlers.add_type_alias('std::deque< ns3::ndn::RttHistory, std::allocator< ns3::ndn::RttHistory > >*', 'ns3::ndn::RttHistory_t*')
     typehandlers.add_type_alias('std::deque< ns3::ndn::RttHistory, std::allocator< ns3::ndn::RttHistory > >&', 'ns3::ndn::RttHistory_t&')
@@ -628,7 +628,7 @@
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3TopologyReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3TopologyReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
-    register_Ns3SimpleRefCount__Ns3NdnContentObject_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnContentObject__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> >'])
+    register_Ns3SimpleRefCount__Ns3NdnData_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnData__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> >'])
     register_Ns3SimpleRefCount__Ns3NdnExclude_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnExclude__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::ndn::Exclude, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Exclude> >'])
     register_Ns3SimpleRefCount__Ns3NdnFaceContainer_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnFaceContainer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::ndn::FaceContainer, ns3::empty, ns3::DefaultDeleter<ns3::ndn::FaceContainer> >'])
     register_Ns3SimpleRefCount__Ns3NdnInterest_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnInterest__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::ndn::Interest, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Interest> >'])
@@ -688,8 +688,8 @@
     register_Ns3NdnApp_methods(root_module, root_module['ns3::ndn::App'])
     register_Ns3NdnAppHelper_methods(root_module, root_module['ns3::ndn::AppHelper'])
     register_Ns3NdnBlob_methods(root_module, root_module['ns3::ndn::Blob'])
-    register_Ns3NdnContentObject_methods(root_module, root_module['ns3::ndn::ContentObject'])
-    register_Ns3NdnContentObjectException_methods(root_module, root_module['ns3::ndn::ContentObjectException'])
+    register_Ns3NdnData_methods(root_module, root_module['ns3::ndn::Data'])
+    register_Ns3NdnDataException_methods(root_module, root_module['ns3::ndn::DataException'])
     register_Ns3NdnContentStore_methods(root_module, root_module['ns3::ndn::ContentStore'])
     register_Ns3NdnExclude_methods(root_module, root_module['ns3::ndn::Exclude'])
     register_Ns3NdnFace_methods(root_module, root_module['ns3::ndn::Face'])
@@ -3250,12 +3250,12 @@
                    is_static=True)
     return
 
-def register_Ns3SimpleRefCount__Ns3NdnContentObject_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnContentObject__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> >::SimpleRefCount() [constructor]
+def register_Ns3SimpleRefCount__Ns3NdnData_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnData__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> >::SimpleRefCount(ns3::SimpleRefCount<ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter< ns3::ndn::ContentObject > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> >::Cleanup() [member function]
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> >::SimpleRefCount(ns3::SimpleRefCount<ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter< ns3::ndn::Data > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> >::Cleanup() [member function]
     cls.add_method('Cleanup', 
                    'void', 
                    [], 
@@ -5169,10 +5169,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ndn-app.h (module 'ndnSIM'): void ns3::ndn::App::OnContentObject(ns3::Ptr<ns3::ndn::ContentObject const> contentObject) [member function]
-    cls.add_method('OnContentObject', 
+    ## ndn-app.h (module 'ndnSIM'): void ns3::ndn::App::OnData(ns3::Ptr<ns3::ndn::Data const> contentObject) [member function]
+    cls.add_method('OnData', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'contentObject')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'contentObject')], 
                    is_virtual=True)
     ## ndn-app.h (module 'ndnSIM'): void ns3::ndn::App::OnInterest(ns3::Ptr<ns3::ndn::Interest const> interest) [member function]
     cls.add_method('OnInterest', 
@@ -5298,97 +5298,97 @@
                    [param('ns3::ndn::Blob &', 'x')])
     return
 
-def register_Ns3NdnContentObject_methods(root_module, cls):
+def register_Ns3NdnData_methods(root_module, cls):
     cls.add_output_stream_operator()
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::ContentObject::ContentObject(ns3::Ptr<ns3::Packet> payload=ns3::Create( )) [constructor]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::Data::Data(ns3::Ptr<ns3::Packet> payload=ns3::Create( )) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'payload', default_value='ns3::Create( )')])
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::ContentObject::ContentObject(ns3::ndn::ContentObject const & other) [copy constructor]
-    cls.add_constructor([param('ns3::ndn::ContentObject const &', 'other')])
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Time ns3::ndn::ContentObject::GetFreshness() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::Data::Data(ns3::ndn::Data const & other) [copy constructor]
+    cls.add_constructor([param('ns3::ndn::Data const &', 'other')])
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Time ns3::ndn::Data::GetFreshness() const [member function]
     cls.add_method('GetFreshness', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Name const> ns3::ndn::ContentObject::GetKeyLocator() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Name const> ns3::ndn::Data::GetKeyLocator() const [member function]
     cls.add_method('GetKeyLocator', 
                    'ns3::Ptr< ns3::ndn::Name const >', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::ContentObject::GetName() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::Data::GetName() const [member function]
     cls.add_method('GetName', 
                    'ns3::ndn::Name const &', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Name const> ns3::ndn::ContentObject::GetNamePtr() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Name const> ns3::ndn::Data::GetNamePtr() const [member function]
     cls.add_method('GetNamePtr', 
                    'ns3::Ptr< ns3::ndn::Name const >', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::Packet const> ns3::ndn::ContentObject::GetPayload() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::Packet const> ns3::ndn::Data::GetPayload() const [member function]
     cls.add_method('GetPayload', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): uint32_t ns3::ndn::ContentObject::GetSignature() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): uint32_t ns3::ndn::Data::GetSignature() const [member function]
     cls.add_method('GetSignature', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Time ns3::ndn::ContentObject::GetTimestamp() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Time ns3::ndn::Data::GetTimestamp() const [member function]
     cls.add_method('GetTimestamp', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::Packet const> ns3::ndn::ContentObject::GetWire() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::Packet const> ns3::ndn::Data::GetWire() const [member function]
     cls.add_method('GetWire', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::Print(std::ostream & os) const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetFreshness(ns3::Time const & freshness) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetFreshness(ns3::Time const & freshness) [member function]
     cls.add_method('SetFreshness', 
                    'void', 
                    [param('ns3::Time const &', 'freshness')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetKeyLocator(ns3::Ptr<ns3::ndn::Name> keyLocator) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetKeyLocator(ns3::Ptr<ns3::ndn::Name> keyLocator) [member function]
     cls.add_method('SetKeyLocator', 
                    'void', 
                    [param('ns3::Ptr< ns3::ndn::Name >', 'keyLocator')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetName(ns3::Ptr<ns3::ndn::Name> name) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetName(ns3::Ptr<ns3::ndn::Name> name) [member function]
     cls.add_method('SetName', 
                    'void', 
                    [param('ns3::Ptr< ns3::ndn::Name >', 'name')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetName(ns3::ndn::Name const & name) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetName(ns3::ndn::Name const & name) [member function]
     cls.add_method('SetName', 
                    'void', 
                    [param('ns3::ndn::Name const &', 'name')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetPayload(ns3::Ptr<ns3::Packet> payload) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetPayload(ns3::Ptr<ns3::Packet> payload) [member function]
     cls.add_method('SetPayload', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'payload')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetSignature(uint32_t signature) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetSignature(uint32_t signature) [member function]
     cls.add_method('SetSignature', 
                    'void', 
                    [param('uint32_t', 'signature')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetTimestamp(ns3::Time const & timestamp) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetTimestamp(ns3::Time const & timestamp) [member function]
     cls.add_method('SetTimestamp', 
                    'void', 
                    [param('ns3::Time const &', 'timestamp')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetWire(ns3::Ptr<ns3::Packet const> packet) const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetWire(ns3::Ptr<ns3::Packet const> packet) const [member function]
     cls.add_method('SetWire', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
                    is_const=True)
     return
 
-def register_Ns3NdnContentObjectException_methods(root_module, cls):
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::ContentObjectException::ContentObjectException() [constructor]
+def register_Ns3NdnDataException_methods(root_module, cls):
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::DataException::DataException() [constructor]
     cls.add_constructor([])
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::ContentObjectException::ContentObjectException(ns3::ndn::ContentObjectException const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ndn::ContentObjectException const &', 'arg0')])
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::DataException::DataException(ns3::ndn::DataException const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ndn::DataException const &', 'arg0')])
     return
 
 def register_Ns3NdnContentStore_methods(root_module, cls):
@@ -5397,10 +5397,10 @@
     cls.add_constructor([])
     ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::ContentStore::ContentStore(ns3::ndn::ContentStore const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ndn::ContentStore const &', 'arg0')])
-    ## ndn-content-store.h (module 'ndnSIM'): bool ns3::ndn::ContentStore::Add(ns3::Ptr<ns3::ndn::ContentObject const> data) [member function]
+    ## ndn-content-store.h (module 'ndnSIM'): bool ns3::ndn::ContentStore::Add(ns3::Ptr<ns3::ndn::Data const> data) [member function]
     cls.add_method('Add', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'data')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::cs::Entry> ns3::ndn::ContentStore::Begin() [member function]
     cls.add_method('Begin', 
@@ -5427,9 +5427,9 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::ContentObject> ns3::ndn::ContentStore::Lookup(ns3::Ptr<ns3::ndn::Interest const> interest) [member function]
+    ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Data> ns3::ndn::ContentStore::Lookup(ns3::Ptr<ns3::ndn::Interest const> interest) [member function]
     cls.add_method('Lookup', 
-                   'ns3::Ptr< ns3::ndn::ContentObject >', 
+                   'ns3::Ptr< ns3::ndn::Data >', 
                    [param('ns3::Ptr< ns3::ndn::Interest const >', 'interest')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::cs::Entry> ns3::ndn::ContentStore::Next(ns3::Ptr<ns3::ndn::cs::Entry> arg0) [member function]
@@ -5544,25 +5544,25 @@
                    'std::ostream &', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## ndn-face.h (module 'ndnSIM'): bool ns3::ndn::Face::ReceiveData(ns3::Ptr<ns3::ndn::ContentObject> data) [member function]
+    ## ndn-face.h (module 'ndnSIM'): bool ns3::ndn::Face::ReceiveData(ns3::Ptr<ns3::ndn::Data> data) [member function]
     cls.add_method('ReceiveData', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject >', 'data')], 
+                   [param('ns3::Ptr< ns3::ndn::Data >', 'data')], 
                    is_virtual=True)
     ## ndn-face.h (module 'ndnSIM'): bool ns3::ndn::Face::ReceiveInterest(ns3::Ptr<ns3::ndn::Interest> interest) [member function]
     cls.add_method('ReceiveInterest', 
                    'bool', 
                    [param('ns3::Ptr< ns3::ndn::Interest >', 'interest')], 
                    is_virtual=True)
-    ## ndn-face.h (module 'ndnSIM'): void ns3::ndn::Face::RegisterProtocolHandlers(ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::Interest>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & interestHandler, ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::ContentObject>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & dataHandler) [member function]
+    ## ndn-face.h (module 'ndnSIM'): void ns3::ndn::Face::RegisterProtocolHandlers(ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::Interest>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & interestHandler, ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::Data>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & dataHandler) [member function]
     cls.add_method('RegisterProtocolHandlers', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::Interest >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'interestHandler'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::ContentObject >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'dataHandler')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::Interest >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'interestHandler'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::Data >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'dataHandler')], 
                    is_virtual=True)
-    ## ndn-face.h (module 'ndnSIM'): bool ns3::ndn::Face::SendData(ns3::Ptr<ns3::ndn::ContentObject const> data) [member function]
+    ## ndn-face.h (module 'ndnSIM'): bool ns3::ndn::Face::SendData(ns3::Ptr<ns3::ndn::Data const> data) [member function]
     cls.add_method('SendData', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'data')], 
                    is_virtual=True)
     ## ndn-face.h (module 'ndnSIM'): bool ns3::ndn::Face::SendInterest(ns3::Ptr<ns3::ndn::Interest const> interest) [member function]
     cls.add_method('SendInterest', 
@@ -5759,10 +5759,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::OnData(ns3::Ptr<ns3::ndn::Face> face, ns3::Ptr<ns3::ndn::ContentObject> data) [member function]
+    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::OnData(ns3::Ptr<ns3::ndn::Face> face, ns3::Ptr<ns3::ndn::Data> data) [member function]
     cls.add_method('OnData', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::Face >', 'face'), param('ns3::Ptr< ns3::ndn::ContentObject >', 'data')], 
+                   [param('ns3::Ptr< ns3::ndn::Face >', 'face'), param('ns3::Ptr< ns3::ndn::Data >', 'data')], 
                    is_virtual=True)
     ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::OnInterest(ns3::Ptr<ns3::ndn::Face> face, ns3::Ptr<ns3::ndn::Interest> interest) [member function]
     cls.add_method('OnInterest', 
@@ -5814,20 +5814,20 @@
                    'void', 
                    [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Interest const >', 'interest'), param('ns3::Ptr< ns3::ndn::pit::Entry >', 'pitEntry')], 
                    visibility='protected', is_virtual=True)
-    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidReceiveSolicitedData(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::ContentObject const> data, bool didCreateCacheEntry) [member function]
+    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidReceiveSolicitedData(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Data const> data, bool didCreateCacheEntry) [member function]
     cls.add_method('DidReceiveSolicitedData', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data'), param('bool', 'didCreateCacheEntry')], 
+                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Data const >', 'data'), param('bool', 'didCreateCacheEntry')], 
                    visibility='protected', is_virtual=True)
-    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidReceiveUnsolicitedData(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::ContentObject const> data, bool didCreateCacheEntry) [member function]
+    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidReceiveUnsolicitedData(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Data const> data, bool didCreateCacheEntry) [member function]
     cls.add_method('DidReceiveUnsolicitedData', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data'), param('bool', 'didCreateCacheEntry')], 
+                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Data const >', 'data'), param('bool', 'didCreateCacheEntry')], 
                    visibility='protected', is_virtual=True)
-    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidSendOutData(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Face> outFace, ns3::Ptr<ns3::ndn::ContentObject const> data, ns3::Ptr<ns3::ndn::pit::Entry> pitEntry) [member function]
+    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidSendOutData(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Face> outFace, ns3::Ptr<ns3::ndn::Data const> data, ns3::Ptr<ns3::ndn::pit::Entry> pitEntry) [member function]
     cls.add_method('DidSendOutData', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Face >', 'outFace'), param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data'), param('ns3::Ptr< ns3::ndn::pit::Entry >', 'pitEntry')], 
+                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Face >', 'outFace'), param('ns3::Ptr< ns3::ndn::Data const >', 'data'), param('ns3::Ptr< ns3::ndn::pit::Entry >', 'pitEntry')], 
                    visibility='protected', is_virtual=True)
     ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidSendOutInterest(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Face> outFace, ns3::Ptr<ns3::ndn::Interest const> interest, ns3::Ptr<ns3::ndn::pit::Entry> pitEntry) [member function]
     cls.add_method('DidSendOutInterest', 
@@ -5864,10 +5864,10 @@
                    'void', 
                    [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Interest const >', 'interest'), param('ns3::Ptr< ns3::ndn::pit::Entry >', 'pitEntry')], 
                    visibility='protected', is_virtual=True)
-    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::SatisfyPendingInterest(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::ContentObject const> data, ns3::Ptr<ns3::ndn::pit::Entry> pitEntry) [member function]
+    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::SatisfyPendingInterest(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Data const> data, ns3::Ptr<ns3::ndn::pit::Entry> pitEntry) [member function]
     cls.add_method('SatisfyPendingInterest', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data'), param('ns3::Ptr< ns3::ndn::pit::Entry >', 'pitEntry')], 
+                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Data const >', 'data'), param('ns3::Ptr< ns3::ndn::pit::Entry >', 'pitEntry')], 
                    visibility='protected', is_virtual=True)
     ## ndn-forwarding-strategy.h (module 'ndnSIM'): bool ns3::ndn::ForwardingStrategy::ShouldSuppressIncomingInterest(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Interest const> interest, ns3::Ptr<ns3::ndn::pit::Entry> pitEntry) [member function]
     cls.add_method('ShouldSuppressIncomingInterest', 
@@ -6444,10 +6444,10 @@
                    is_static=True)
     ## ndn-net-device-face.h (module 'ndnSIM'): ns3::ndn::NetDeviceFace::NetDeviceFace(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> const & netDevice) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice > const &', 'netDevice')])
-    ## ndn-net-device-face.h (module 'ndnSIM'): void ns3::ndn::NetDeviceFace::RegisterProtocolHandlers(ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::Interest>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & interestHandler, ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::ContentObject>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & dataHandler) [member function]
+    ## ndn-net-device-face.h (module 'ndnSIM'): void ns3::ndn::NetDeviceFace::RegisterProtocolHandlers(ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::Interest>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & interestHandler, ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::Data>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & dataHandler) [member function]
     cls.add_method('RegisterProtocolHandlers', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::Interest >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'interestHandler'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::ContentObject >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'dataHandler')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::Interest >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'interestHandler'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::Data >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'dataHandler')], 
                    is_virtual=True)
     ## ndn-net-device-face.h (module 'ndnSIM'): void ns3::ndn::NetDeviceFace::UnRegisterProtocolHandlers() [member function]
     cls.add_method('UnRegisterProtocolHandlers', 
@@ -6517,10 +6517,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ndn-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::pit::Entry> ns3::ndn::Pit::Lookup(ns3::ndn::ContentObject const & header) [member function]
+    ## ndn-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::pit::Entry> ns3::ndn::Pit::Lookup(ns3::ndn::Data const & header) [member function]
     cls.add_method('Lookup', 
                    'ns3::Ptr< ns3::ndn::pit::Entry >', 
-                   [param('ns3::ndn::ContentObject const &', 'header')], 
+                   [param('ns3::ndn::Data const &', 'header')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ndn-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::pit::Entry> ns3::ndn::Pit::Lookup(ns3::ndn::Interest const & header) [member function]
     cls.add_method('Lookup', 
@@ -6687,10 +6687,10 @@
     cls.add_method('RemoveNetDeviceFaceCreateCallback', 
                    'void', 
                    [param('ns3::TypeId', 'netDeviceType'), param('ns3::Callback< ns3::Ptr< ns3::ndn::NetDeviceFace >, ns3::Ptr< ns3::Node >, ns3::Ptr< ns3::ndn::L3Protocol >, ns3::Ptr< ns3::NetDevice >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## ndn-stack-helper.h (module 'ndnSIM'): void ns3::ndn::StackHelper::EnableLimits(bool enable=true, ns3::Time avgRtt=ns3::Seconds( ), uint32_t avgContentObject=1100, uint32_t avgInterest=40) [member function]
+    ## ndn-stack-helper.h (module 'ndnSIM'): void ns3::ndn::StackHelper::EnableLimits(bool enable=true, ns3::Time avgRtt=ns3::Seconds( ), uint32_t avgData=1100, uint32_t avgInterest=40) [member function]
     cls.add_method('EnableLimits', 
                    'void', 
-                   [param('bool', 'enable', default_value='true'), param('ns3::Time', 'avgRtt', default_value='ns3::Seconds(0)'), param('uint32_t', 'avgContentObject', default_value='1100'), param('uint32_t', 'avgInterest', default_value='40')])
+                   [param('bool', 'enable', default_value='true'), param('ns3::Time', 'avgRtt', default_value='ns3::Seconds(0)'), param('uint32_t', 'avgData', default_value='1100'), param('uint32_t', 'avgInterest', default_value='40')])
     ## ndn-stack-helper.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::FaceContainer> ns3::ndn::StackHelper::Install(std::string const & nodeName) const [member function]
     cls.add_method('Install', 
                    'ns3::Ptr< ns3::ndn::FaceContainer >', 
@@ -6754,15 +6754,15 @@
     cls.add_constructor([])
     ## ndn-wire.h (module 'ndnSIM'): ns3::ndn::Wire::Wire(ns3::ndn::Wire const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ndn::Wire const &', 'arg0')])
-    ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::Packet> ns3::ndn::Wire::FromData(ns3::Ptr<ns3::ndn::ContentObject const> data, int8_t wireFormat=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)) [member function]
+    ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::Packet> ns3::ndn::Wire::FromData(ns3::Ptr<ns3::ndn::Data const> data, int8_t wireFormat=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)) [member function]
     cls.add_method('FromData', 
                    'ns3::Ptr< ns3::Packet >', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data'), param('int8_t', 'wireFormat', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'data'), param('int8_t', 'wireFormat', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)')], 
                    is_static=True)
-    ## ndn-wire.h (module 'ndnSIM'): static std::string ns3::ndn::Wire::FromDataStr(ns3::Ptr<ns3::ndn::ContentObject const> data, int8_t wireFormat=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)) [member function]
+    ## ndn-wire.h (module 'ndnSIM'): static std::string ns3::ndn::Wire::FromDataStr(ns3::Ptr<ns3::ndn::Data const> data, int8_t wireFormat=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)) [member function]
     cls.add_method('FromDataStr', 
                    'std::string', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data'), param('int8_t', 'wireFormat', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'data'), param('int8_t', 'wireFormat', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)')], 
                    is_static=True)
     ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::Packet> ns3::ndn::Wire::FromInterest(ns3::Ptr<ns3::ndn::Interest const> interest, int8_t wireFormat=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)) [member function]
     cls.add_method('FromInterest', 
@@ -6779,14 +6779,14 @@
                    'std::string', 
                    [param('ns3::Ptr< ns3::ndn::Name const >', 'name'), param('int8_t', 'wireFormat', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)')], 
                    is_static=True)
-    ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::ndn::ContentObject> ns3::ndn::Wire::ToData(ns3::Ptr<ns3::Packet> packet, int8_t type=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)) [member function]
+    ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::ndn::Data> ns3::ndn::Wire::ToData(ns3::Ptr<ns3::Packet> packet, int8_t type=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)) [member function]
     cls.add_method('ToData', 
-                   'ns3::Ptr< ns3::ndn::ContentObject >', 
+                   'ns3::Ptr< ns3::ndn::Data >', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('int8_t', 'type', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)')], 
                    is_static=True)
-    ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::ndn::ContentObject> ns3::ndn::Wire::ToDataStr(std::string const & wire, int8_t type=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)) [member function]
+    ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::ndn::Data> ns3::ndn::Wire::ToDataStr(std::string const & wire, int8_t type=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)) [member function]
     cls.add_method('ToDataStr', 
-                   'ns3::Ptr< ns3::ndn::ContentObject >', 
+                   'ns3::Ptr< ns3::ndn::Data >', 
                    [param('std::string const &', 'wire'), param('int8_t', 'type', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)')], 
                    is_static=True)
     ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::ndn::Interest> ns3::ndn::Wire::ToInterest(ns3::Ptr<ns3::Packet> packet, int8_t type=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)) [member function]
@@ -6814,10 +6814,10 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## ndn-api-face.h (module 'ndnSIM'): void ns3::ndn::ApiFace::ExpressInterest(ns3::Ptr<ns3::ndn::Interest> interest, ns3::Callback<void, ns3::Ptr<ns3::ndn::Interest const>, ns3::Ptr<ns3::ndn::ContentObject const>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> onData, ns3::Callback<void, ns3::Ptr<ns3::ndn::Interest const>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> onTimeout) [member function]
+    ## ndn-api-face.h (module 'ndnSIM'): void ns3::ndn::ApiFace::ExpressInterest(ns3::Ptr<ns3::ndn::Interest> interest, ns3::Callback<void, ns3::Ptr<ns3::ndn::Interest const>, ns3::Ptr<ns3::ndn::Data const>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> onData, ns3::Callback<void, ns3::Ptr<ns3::ndn::Interest const>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> onTimeout) [member function]
     cls.add_method('ExpressInterest', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::Interest >', 'interest'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Interest const >, ns3::Ptr< ns3::ndn::ContentObject const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'onData'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Interest const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'onTimeout')])
+                   [param('ns3::Ptr< ns3::ndn::Interest >', 'interest'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Interest const >, ns3::Ptr< ns3::ndn::Data const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'onData'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Interest const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'onTimeout')])
     ## ndn-api-face.h (module 'ndnSIM'): void ns3::ndn::ApiFace::SetInterestFilter(ns3::Ptr<ns3::ndn::Name const> prefix, ns3::Callback<void, ns3::Ptr<ns3::ndn::Name const>, ns3::Ptr<ns3::ndn::Interest const>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> onInterest) [member function]
     cls.add_method('SetInterestFilter', 
                    'void', 
@@ -6826,19 +6826,19 @@
     cls.add_method('ClearInterestFilter', 
                    'void', 
                    [param('ns3::Ptr< ns3::ndn::Name const >', 'prefix')])
-    ## ndn-api-face.h (module 'ndnSIM'): void ns3::ndn::ApiFace::Put(ns3::Ptr<ns3::ndn::ContentObject> data) [member function]
+    ## ndn-api-face.h (module 'ndnSIM'): void ns3::ndn::ApiFace::Put(ns3::Ptr<ns3::ndn::Data> data) [member function]
     cls.add_method('Put', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject >', 'data')])
+                   [param('ns3::Ptr< ns3::ndn::Data >', 'data')])
     ## ndn-api-face.h (module 'ndnSIM'): bool ns3::ndn::ApiFace::SendInterest(ns3::Ptr<ns3::ndn::Interest const> interest) [member function]
     cls.add_method('SendInterest', 
                    'bool', 
                    [param('ns3::Ptr< ns3::ndn::Interest const >', 'interest')], 
                    is_virtual=True)
-    ## ndn-api-face.h (module 'ndnSIM'): bool ns3::ndn::ApiFace::SendData(ns3::Ptr<ns3::ndn::ContentObject const> data) [member function]
+    ## ndn-api-face.h (module 'ndnSIM'): bool ns3::ndn::ApiFace::SendData(ns3::Ptr<ns3::ndn::Data const> data) [member function]
     cls.add_method('SendData', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'data')], 
                    is_virtual=True)
     ## ndn-api-face.h (module 'ndnSIM'): std::ostream & ns3::ndn::ApiFace::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
@@ -6860,10 +6860,10 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::ndn::Interest const >', 'interest')], 
                    is_virtual=True)
-    ## ndn-app-face.h (module 'ndnSIM'): bool ns3::ndn::AppFace::SendData(ns3::Ptr<ns3::ndn::ContentObject const> data) [member function]
+    ## ndn-app-face.h (module 'ndnSIM'): bool ns3::ndn::AppFace::SendData(ns3::Ptr<ns3::ndn::Data const> data) [member function]
     cls.add_method('SendData', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'data')], 
                    is_virtual=True)
     ## ndn-app-face.h (module 'ndnSIM'): std::ostream & ns3::ndn::AppFace::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
@@ -6875,15 +6875,15 @@
 def register_Ns3NdnCsEntry_methods(root_module, cls):
     ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::cs::Entry::Entry(ns3::ndn::cs::Entry const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ndn::cs::Entry const &', 'arg0')])
-    ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::cs::Entry::Entry(ns3::Ptr<ns3::ndn::ContentStore> cs, ns3::Ptr<ns3::ndn::ContentObject const> data) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::ndn::ContentStore >', 'cs'), param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data')])
+    ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::cs::Entry::Entry(ns3::Ptr<ns3::ndn::ContentStore> cs, ns3::Ptr<ns3::ndn::Data const> data) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::ndn::ContentStore >', 'cs'), param('ns3::Ptr< ns3::ndn::Data const >', 'data')])
     ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::ContentStore> ns3::ndn::cs::Entry::GetContentStore() [member function]
     cls.add_method('GetContentStore', 
                    'ns3::Ptr< ns3::ndn::ContentStore >', 
                    [])
-    ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::ContentObject const> ns3::ndn::cs::Entry::GetData() const [member function]
+    ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Data const> ns3::ndn::cs::Entry::GetData() const [member function]
     cls.add_method('GetData', 
-                   'ns3::Ptr< ns3::ndn::ContentObject const >', 
+                   'ns3::Ptr< ns3::ndn::Data const >', 
                    [], 
                    is_const=True)
     ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::cs::Entry::GetName() const [member function]
diff --git a/bindings/modulegen__gcc_LP64.py b/bindings/modulegen__gcc_LP64.py
index 83bd1ad..94f3f2a 100644
--- a/bindings/modulegen__gcc_LP64.py
+++ b/bindings/modulegen__gcc_LP64.py
@@ -178,8 +178,8 @@
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TopologyReader', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TopologyReader>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::TraceSourceAccessor', 'ns3::empty', 'ns3::DefaultDeleter<ns3::TraceSourceAccessor>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> > [class]
-    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::ndn::ContentObject', 'ns3::empty', 'ns3::DefaultDeleter<ns3::ndn::ContentObject>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> > [class]
+    module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::ndn::Data', 'ns3::empty', 'ns3::DefaultDeleter<ns3::ndn::Data>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::Exclude, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Exclude> > [class]
     module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::ndn::Exclude', 'ns3::empty', 'ns3::DefaultDeleter<ns3::ndn::Exclude>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
     ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::FaceContainer, ns3::empty, ns3::DefaultDeleter<ns3::ndn::FaceContainer> > [class]
@@ -374,10 +374,10 @@
     module.add_class('AppHelper')
     ## blob.h (module 'ndnSIM'): ns3::ndn::Blob [class]
     module.add_class('Blob')
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::ContentObject [class]
-    module.add_class('ContentObject', parent=root_module['ns3::SimpleRefCount< ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> >'])
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::ContentObjectException [class]
-    module.add_class('ContentObjectException')
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::Data [class]
+    module.add_class('Data', parent=root_module['ns3::SimpleRefCount< ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> >'])
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::DataException [class]
+    module.add_class('DataException')
     ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::ContentStore [class]
     module.add_class('ContentStore', parent=root_module['ns3::Object'])
     ## exclude.h (module 'ndnSIM'): ns3::ndn::Exclude [class]
@@ -441,10 +441,10 @@
     module.add_container('std::vector< char >', 'char', container_type='vector')
     module.add_container('std::map< ns3::ndn::name::Component, bool, std::greater< ns3::ndn::name::Component >, std::allocator< std::pair< ns3::ndn::name::Component const, bool > > >', ('ns3::ndn::name::Component', 'bool'), container_type='map')
     module.add_container('std::vector< ns3::Ptr< ns3::ndn::Face > >', 'ns3::Ptr< ns3::ndn::Face >', container_type='vector')
-    typehandlers.add_type_alias('ns3::ndn::ContentObject', 'ns3::ndn::ContentObjectHeader')
-    typehandlers.add_type_alias('ns3::ndn::ContentObject*', 'ns3::ndn::ContentObjectHeader*')
-    typehandlers.add_type_alias('ns3::ndn::ContentObject&', 'ns3::ndn::ContentObjectHeader&')
-    module.add_typedef(root_module['ns3::ndn::ContentObject'], 'ContentObjectHeader')
+    typehandlers.add_type_alias('ns3::ndn::Data', 'ns3::ndn::DataHeader')
+    typehandlers.add_type_alias('ns3::ndn::Data*', 'ns3::ndn::DataHeader*')
+    typehandlers.add_type_alias('ns3::ndn::Data&', 'ns3::ndn::DataHeader&')
+    module.add_typedef(root_module['ns3::ndn::Data'], 'DataHeader')
     typehandlers.add_type_alias('std::deque< ns3::ndn::RttHistory, std::allocator< ns3::ndn::RttHistory > >', 'ns3::ndn::RttHistory_t')
     typehandlers.add_type_alias('std::deque< ns3::ndn::RttHistory, std::allocator< ns3::ndn::RttHistory > >*', 'ns3::ndn::RttHistory_t*')
     typehandlers.add_type_alias('std::deque< ns3::ndn::RttHistory, std::allocator< ns3::ndn::RttHistory > >&', 'ns3::ndn::RttHistory_t&')
@@ -628,7 +628,7 @@
     register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
     register_Ns3SimpleRefCount__Ns3TopologyReader_Ns3Empty_Ns3DefaultDeleter__lt__ns3TopologyReader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TopologyReader, ns3::empty, ns3::DefaultDeleter<ns3::TopologyReader> >'])
     register_Ns3SimpleRefCount__Ns3TraceSourceAccessor_Ns3Empty_Ns3DefaultDeleter__lt__ns3TraceSourceAccessor__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::TraceSourceAccessor, ns3::empty, ns3::DefaultDeleter<ns3::TraceSourceAccessor> >'])
-    register_Ns3SimpleRefCount__Ns3NdnContentObject_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnContentObject__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> >'])
+    register_Ns3SimpleRefCount__Ns3NdnData_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnData__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> >'])
     register_Ns3SimpleRefCount__Ns3NdnExclude_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnExclude__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::ndn::Exclude, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Exclude> >'])
     register_Ns3SimpleRefCount__Ns3NdnFaceContainer_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnFaceContainer__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::ndn::FaceContainer, ns3::empty, ns3::DefaultDeleter<ns3::ndn::FaceContainer> >'])
     register_Ns3SimpleRefCount__Ns3NdnInterest_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnInterest__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::ndn::Interest, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Interest> >'])
@@ -688,8 +688,8 @@
     register_Ns3NdnApp_methods(root_module, root_module['ns3::ndn::App'])
     register_Ns3NdnAppHelper_methods(root_module, root_module['ns3::ndn::AppHelper'])
     register_Ns3NdnBlob_methods(root_module, root_module['ns3::ndn::Blob'])
-    register_Ns3NdnContentObject_methods(root_module, root_module['ns3::ndn::ContentObject'])
-    register_Ns3NdnContentObjectException_methods(root_module, root_module['ns3::ndn::ContentObjectException'])
+    register_Ns3NdnData_methods(root_module, root_module['ns3::ndn::Data'])
+    register_Ns3NdnDataException_methods(root_module, root_module['ns3::ndn::DataException'])
     register_Ns3NdnContentStore_methods(root_module, root_module['ns3::ndn::ContentStore'])
     register_Ns3NdnExclude_methods(root_module, root_module['ns3::ndn::Exclude'])
     register_Ns3NdnFace_methods(root_module, root_module['ns3::ndn::Face'])
@@ -3250,12 +3250,12 @@
                    is_static=True)
     return
 
-def register_Ns3SimpleRefCount__Ns3NdnContentObject_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnContentObject__gt___methods(root_module, cls):
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> >::SimpleRefCount() [constructor]
+def register_Ns3SimpleRefCount__Ns3NdnData_Ns3Empty_Ns3DefaultDeleter__lt__ns3NdnData__gt___methods(root_module, cls):
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> >::SimpleRefCount() [constructor]
     cls.add_constructor([])
-    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> >::SimpleRefCount(ns3::SimpleRefCount<ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> > const & o) [copy constructor]
-    cls.add_constructor([param('ns3::SimpleRefCount< ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter< ns3::ndn::ContentObject > > const &', 'o')])
-    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::ndn::ContentObject, ns3::empty, ns3::DefaultDeleter<ns3::ndn::ContentObject> >::Cleanup() [member function]
+    ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> >::SimpleRefCount(ns3::SimpleRefCount<ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> > const & o) [copy constructor]
+    cls.add_constructor([param('ns3::SimpleRefCount< ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter< ns3::ndn::Data > > const &', 'o')])
+    ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::ndn::Data, ns3::empty, ns3::DefaultDeleter<ns3::ndn::Data> >::Cleanup() [member function]
     cls.add_method('Cleanup', 
                    'void', 
                    [], 
@@ -5169,10 +5169,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ndn-app.h (module 'ndnSIM'): void ns3::ndn::App::OnContentObject(ns3::Ptr<ns3::ndn::ContentObject const> contentObject) [member function]
-    cls.add_method('OnContentObject', 
+    ## ndn-app.h (module 'ndnSIM'): void ns3::ndn::App::OnData(ns3::Ptr<ns3::ndn::Data const> contentObject) [member function]
+    cls.add_method('OnData', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'contentObject')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'contentObject')], 
                    is_virtual=True)
     ## ndn-app.h (module 'ndnSIM'): void ns3::ndn::App::OnInterest(ns3::Ptr<ns3::ndn::Interest const> interest) [member function]
     cls.add_method('OnInterest', 
@@ -5298,97 +5298,97 @@
                    [param('ns3::ndn::Blob &', 'x')])
     return
 
-def register_Ns3NdnContentObject_methods(root_module, cls):
+def register_Ns3NdnData_methods(root_module, cls):
     cls.add_output_stream_operator()
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::ContentObject::ContentObject(ns3::Ptr<ns3::Packet> payload=ns3::Create( )) [constructor]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::Data::Data(ns3::Ptr<ns3::Packet> payload=ns3::Create( )) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::Packet >', 'payload', default_value='ns3::Create( )')])
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::ContentObject::ContentObject(ns3::ndn::ContentObject const & other) [copy constructor]
-    cls.add_constructor([param('ns3::ndn::ContentObject const &', 'other')])
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Time ns3::ndn::ContentObject::GetFreshness() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::Data::Data(ns3::ndn::Data const & other) [copy constructor]
+    cls.add_constructor([param('ns3::ndn::Data const &', 'other')])
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Time ns3::ndn::Data::GetFreshness() const [member function]
     cls.add_method('GetFreshness', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Name const> ns3::ndn::ContentObject::GetKeyLocator() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Name const> ns3::ndn::Data::GetKeyLocator() const [member function]
     cls.add_method('GetKeyLocator', 
                    'ns3::Ptr< ns3::ndn::Name const >', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::ContentObject::GetName() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::Data::GetName() const [member function]
     cls.add_method('GetName', 
                    'ns3::ndn::Name const &', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Name const> ns3::ndn::ContentObject::GetNamePtr() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Name const> ns3::ndn::Data::GetNamePtr() const [member function]
     cls.add_method('GetNamePtr', 
                    'ns3::Ptr< ns3::ndn::Name const >', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::Packet const> ns3::ndn::ContentObject::GetPayload() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::Packet const> ns3::ndn::Data::GetPayload() const [member function]
     cls.add_method('GetPayload', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): uint32_t ns3::ndn::ContentObject::GetSignature() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): uint32_t ns3::ndn::Data::GetSignature() const [member function]
     cls.add_method('GetSignature', 
                    'uint32_t', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Time ns3::ndn::ContentObject::GetTimestamp() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Time ns3::ndn::Data::GetTimestamp() const [member function]
     cls.add_method('GetTimestamp', 
                    'ns3::Time', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::Packet const> ns3::ndn::ContentObject::GetWire() const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::Ptr<ns3::Packet const> ns3::ndn::Data::GetWire() const [member function]
     cls.add_method('GetWire', 
                    'ns3::Ptr< ns3::Packet const >', 
                    [], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::Print(std::ostream & os) const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
                    'void', 
                    [param('std::ostream &', 'os')], 
                    is_const=True)
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetFreshness(ns3::Time const & freshness) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetFreshness(ns3::Time const & freshness) [member function]
     cls.add_method('SetFreshness', 
                    'void', 
                    [param('ns3::Time const &', 'freshness')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetKeyLocator(ns3::Ptr<ns3::ndn::Name> keyLocator) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetKeyLocator(ns3::Ptr<ns3::ndn::Name> keyLocator) [member function]
     cls.add_method('SetKeyLocator', 
                    'void', 
                    [param('ns3::Ptr< ns3::ndn::Name >', 'keyLocator')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetName(ns3::Ptr<ns3::ndn::Name> name) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetName(ns3::Ptr<ns3::ndn::Name> name) [member function]
     cls.add_method('SetName', 
                    'void', 
                    [param('ns3::Ptr< ns3::ndn::Name >', 'name')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetName(ns3::ndn::Name const & name) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetName(ns3::ndn::Name const & name) [member function]
     cls.add_method('SetName', 
                    'void', 
                    [param('ns3::ndn::Name const &', 'name')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetPayload(ns3::Ptr<ns3::Packet> payload) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetPayload(ns3::Ptr<ns3::Packet> payload) [member function]
     cls.add_method('SetPayload', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet >', 'payload')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetSignature(uint32_t signature) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetSignature(uint32_t signature) [member function]
     cls.add_method('SetSignature', 
                    'void', 
                    [param('uint32_t', 'signature')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetTimestamp(ns3::Time const & timestamp) [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetTimestamp(ns3::Time const & timestamp) [member function]
     cls.add_method('SetTimestamp', 
                    'void', 
                    [param('ns3::Time const &', 'timestamp')])
-    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::ContentObject::SetWire(ns3::Ptr<ns3::Packet const> packet) const [member function]
+    ## ndn-content-object.h (module 'ndnSIM'): void ns3::ndn::Data::SetWire(ns3::Ptr<ns3::Packet const> packet) const [member function]
     cls.add_method('SetWire', 
                    'void', 
                    [param('ns3::Ptr< ns3::Packet const >', 'packet')], 
                    is_const=True)
     return
 
-def register_Ns3NdnContentObjectException_methods(root_module, cls):
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::ContentObjectException::ContentObjectException() [constructor]
+def register_Ns3NdnDataException_methods(root_module, cls):
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::DataException::DataException() [constructor]
     cls.add_constructor([])
-    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::ContentObjectException::ContentObjectException(ns3::ndn::ContentObjectException const & arg0) [copy constructor]
-    cls.add_constructor([param('ns3::ndn::ContentObjectException const &', 'arg0')])
+    ## ndn-content-object.h (module 'ndnSIM'): ns3::ndn::DataException::DataException(ns3::ndn::DataException const & arg0) [copy constructor]
+    cls.add_constructor([param('ns3::ndn::DataException const &', 'arg0')])
     return
 
 def register_Ns3NdnContentStore_methods(root_module, cls):
@@ -5397,10 +5397,10 @@
     cls.add_constructor([])
     ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::ContentStore::ContentStore(ns3::ndn::ContentStore const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ndn::ContentStore const &', 'arg0')])
-    ## ndn-content-store.h (module 'ndnSIM'): bool ns3::ndn::ContentStore::Add(ns3::Ptr<ns3::ndn::ContentObject const> data) [member function]
+    ## ndn-content-store.h (module 'ndnSIM'): bool ns3::ndn::ContentStore::Add(ns3::Ptr<ns3::ndn::Data const> data) [member function]
     cls.add_method('Add', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'data')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::cs::Entry> ns3::ndn::ContentStore::Begin() [member function]
     cls.add_method('Begin', 
@@ -5427,9 +5427,9 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::ContentObject> ns3::ndn::ContentStore::Lookup(ns3::Ptr<ns3::ndn::Interest const> interest) [member function]
+    ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Data> ns3::ndn::ContentStore::Lookup(ns3::Ptr<ns3::ndn::Interest const> interest) [member function]
     cls.add_method('Lookup', 
-                   'ns3::Ptr< ns3::ndn::ContentObject >', 
+                   'ns3::Ptr< ns3::ndn::Data >', 
                    [param('ns3::Ptr< ns3::ndn::Interest const >', 'interest')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::cs::Entry> ns3::ndn::ContentStore::Next(ns3::Ptr<ns3::ndn::cs::Entry> arg0) [member function]
@@ -5544,25 +5544,25 @@
                    'std::ostream &', 
                    [param('std::ostream &', 'os')], 
                    is_const=True, is_virtual=True)
-    ## ndn-face.h (module 'ndnSIM'): bool ns3::ndn::Face::ReceiveData(ns3::Ptr<ns3::ndn::ContentObject> data) [member function]
+    ## ndn-face.h (module 'ndnSIM'): bool ns3::ndn::Face::ReceiveData(ns3::Ptr<ns3::ndn::Data> data) [member function]
     cls.add_method('ReceiveData', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject >', 'data')], 
+                   [param('ns3::Ptr< ns3::ndn::Data >', 'data')], 
                    is_virtual=True)
     ## ndn-face.h (module 'ndnSIM'): bool ns3::ndn::Face::ReceiveInterest(ns3::Ptr<ns3::ndn::Interest> interest) [member function]
     cls.add_method('ReceiveInterest', 
                    'bool', 
                    [param('ns3::Ptr< ns3::ndn::Interest >', 'interest')], 
                    is_virtual=True)
-    ## ndn-face.h (module 'ndnSIM'): void ns3::ndn::Face::RegisterProtocolHandlers(ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::Interest>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & interestHandler, ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::ContentObject>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & dataHandler) [member function]
+    ## ndn-face.h (module 'ndnSIM'): void ns3::ndn::Face::RegisterProtocolHandlers(ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::Interest>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & interestHandler, ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::Data>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & dataHandler) [member function]
     cls.add_method('RegisterProtocolHandlers', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::Interest >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'interestHandler'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::ContentObject >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'dataHandler')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::Interest >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'interestHandler'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::Data >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'dataHandler')], 
                    is_virtual=True)
-    ## ndn-face.h (module 'ndnSIM'): bool ns3::ndn::Face::SendData(ns3::Ptr<ns3::ndn::ContentObject const> data) [member function]
+    ## ndn-face.h (module 'ndnSIM'): bool ns3::ndn::Face::SendData(ns3::Ptr<ns3::ndn::Data const> data) [member function]
     cls.add_method('SendData', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'data')], 
                    is_virtual=True)
     ## ndn-face.h (module 'ndnSIM'): bool ns3::ndn::Face::SendInterest(ns3::Ptr<ns3::ndn::Interest const> interest) [member function]
     cls.add_method('SendInterest', 
@@ -5759,10 +5759,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::OnData(ns3::Ptr<ns3::ndn::Face> face, ns3::Ptr<ns3::ndn::ContentObject> data) [member function]
+    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::OnData(ns3::Ptr<ns3::ndn::Face> face, ns3::Ptr<ns3::ndn::Data> data) [member function]
     cls.add_method('OnData', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::Face >', 'face'), param('ns3::Ptr< ns3::ndn::ContentObject >', 'data')], 
+                   [param('ns3::Ptr< ns3::ndn::Face >', 'face'), param('ns3::Ptr< ns3::ndn::Data >', 'data')], 
                    is_virtual=True)
     ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::OnInterest(ns3::Ptr<ns3::ndn::Face> face, ns3::Ptr<ns3::ndn::Interest> interest) [member function]
     cls.add_method('OnInterest', 
@@ -5814,20 +5814,20 @@
                    'void', 
                    [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Interest const >', 'interest'), param('ns3::Ptr< ns3::ndn::pit::Entry >', 'pitEntry')], 
                    visibility='protected', is_virtual=True)
-    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidReceiveSolicitedData(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::ContentObject const> data, bool didCreateCacheEntry) [member function]
+    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidReceiveSolicitedData(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Data const> data, bool didCreateCacheEntry) [member function]
     cls.add_method('DidReceiveSolicitedData', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data'), param('bool', 'didCreateCacheEntry')], 
+                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Data const >', 'data'), param('bool', 'didCreateCacheEntry')], 
                    visibility='protected', is_virtual=True)
-    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidReceiveUnsolicitedData(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::ContentObject const> data, bool didCreateCacheEntry) [member function]
+    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidReceiveUnsolicitedData(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Data const> data, bool didCreateCacheEntry) [member function]
     cls.add_method('DidReceiveUnsolicitedData', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data'), param('bool', 'didCreateCacheEntry')], 
+                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Data const >', 'data'), param('bool', 'didCreateCacheEntry')], 
                    visibility='protected', is_virtual=True)
-    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidSendOutData(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Face> outFace, ns3::Ptr<ns3::ndn::ContentObject const> data, ns3::Ptr<ns3::ndn::pit::Entry> pitEntry) [member function]
+    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidSendOutData(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Face> outFace, ns3::Ptr<ns3::ndn::Data const> data, ns3::Ptr<ns3::ndn::pit::Entry> pitEntry) [member function]
     cls.add_method('DidSendOutData', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Face >', 'outFace'), param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data'), param('ns3::Ptr< ns3::ndn::pit::Entry >', 'pitEntry')], 
+                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Face >', 'outFace'), param('ns3::Ptr< ns3::ndn::Data const >', 'data'), param('ns3::Ptr< ns3::ndn::pit::Entry >', 'pitEntry')], 
                    visibility='protected', is_virtual=True)
     ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::DidSendOutInterest(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Face> outFace, ns3::Ptr<ns3::ndn::Interest const> interest, ns3::Ptr<ns3::ndn::pit::Entry> pitEntry) [member function]
     cls.add_method('DidSendOutInterest', 
@@ -5864,10 +5864,10 @@
                    'void', 
                    [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Interest const >', 'interest'), param('ns3::Ptr< ns3::ndn::pit::Entry >', 'pitEntry')], 
                    visibility='protected', is_virtual=True)
-    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::SatisfyPendingInterest(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::ContentObject const> data, ns3::Ptr<ns3::ndn::pit::Entry> pitEntry) [member function]
+    ## ndn-forwarding-strategy.h (module 'ndnSIM'): void ns3::ndn::ForwardingStrategy::SatisfyPendingInterest(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Data const> data, ns3::Ptr<ns3::ndn::pit::Entry> pitEntry) [member function]
     cls.add_method('SatisfyPendingInterest', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data'), param('ns3::Ptr< ns3::ndn::pit::Entry >', 'pitEntry')], 
+                   [param('ns3::Ptr< ns3::ndn::Face >', 'inFace'), param('ns3::Ptr< ns3::ndn::Data const >', 'data'), param('ns3::Ptr< ns3::ndn::pit::Entry >', 'pitEntry')], 
                    visibility='protected', is_virtual=True)
     ## ndn-forwarding-strategy.h (module 'ndnSIM'): bool ns3::ndn::ForwardingStrategy::ShouldSuppressIncomingInterest(ns3::Ptr<ns3::ndn::Face> inFace, ns3::Ptr<ns3::ndn::Interest const> interest, ns3::Ptr<ns3::ndn::pit::Entry> pitEntry) [member function]
     cls.add_method('ShouldSuppressIncomingInterest', 
@@ -6444,10 +6444,10 @@
                    is_static=True)
     ## ndn-net-device-face.h (module 'ndnSIM'): ns3::ndn::NetDeviceFace::NetDeviceFace(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> const & netDevice) [constructor]
     cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice > const &', 'netDevice')])
-    ## ndn-net-device-face.h (module 'ndnSIM'): void ns3::ndn::NetDeviceFace::RegisterProtocolHandlers(ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::Interest>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & interestHandler, ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::ContentObject>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & dataHandler) [member function]
+    ## ndn-net-device-face.h (module 'ndnSIM'): void ns3::ndn::NetDeviceFace::RegisterProtocolHandlers(ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::Interest>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & interestHandler, ns3::Callback<void, ns3::Ptr<ns3::ndn::Face>, ns3::Ptr<ns3::ndn::Data>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> const & dataHandler) [member function]
     cls.add_method('RegisterProtocolHandlers', 
                    'void', 
-                   [param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::Interest >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'interestHandler'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::ContentObject >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'dataHandler')], 
+                   [param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::Interest >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'interestHandler'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Face >, ns3::Ptr< ns3::ndn::Data >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty > const &', 'dataHandler')], 
                    is_virtual=True)
     ## ndn-net-device-face.h (module 'ndnSIM'): void ns3::ndn::NetDeviceFace::UnRegisterProtocolHandlers() [member function]
     cls.add_method('UnRegisterProtocolHandlers', 
@@ -6517,10 +6517,10 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
-    ## ndn-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::pit::Entry> ns3::ndn::Pit::Lookup(ns3::ndn::ContentObject const & header) [member function]
+    ## ndn-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::pit::Entry> ns3::ndn::Pit::Lookup(ns3::ndn::Data const & header) [member function]
     cls.add_method('Lookup', 
                    'ns3::Ptr< ns3::ndn::pit::Entry >', 
-                   [param('ns3::ndn::ContentObject const &', 'header')], 
+                   [param('ns3::ndn::Data const &', 'header')], 
                    is_pure_virtual=True, is_virtual=True)
     ## ndn-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::pit::Entry> ns3::ndn::Pit::Lookup(ns3::ndn::Interest const & header) [member function]
     cls.add_method('Lookup', 
@@ -6687,10 +6687,10 @@
     cls.add_method('RemoveNetDeviceFaceCreateCallback', 
                    'void', 
                    [param('ns3::TypeId', 'netDeviceType'), param('ns3::Callback< ns3::Ptr< ns3::ndn::NetDeviceFace >, ns3::Ptr< ns3::Node >, ns3::Ptr< ns3::ndn::L3Protocol >, ns3::Ptr< ns3::NetDevice >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')])
-    ## ndn-stack-helper.h (module 'ndnSIM'): void ns3::ndn::StackHelper::EnableLimits(bool enable=true, ns3::Time avgRtt=ns3::Seconds( ), uint32_t avgContentObject=1100, uint32_t avgInterest=40) [member function]
+    ## ndn-stack-helper.h (module 'ndnSIM'): void ns3::ndn::StackHelper::EnableLimits(bool enable=true, ns3::Time avgRtt=ns3::Seconds( ), uint32_t avgData=1100, uint32_t avgInterest=40) [member function]
     cls.add_method('EnableLimits', 
                    'void', 
-                   [param('bool', 'enable', default_value='true'), param('ns3::Time', 'avgRtt', default_value='ns3::Seconds(0)'), param('uint32_t', 'avgContentObject', default_value='1100'), param('uint32_t', 'avgInterest', default_value='40')])
+                   [param('bool', 'enable', default_value='true'), param('ns3::Time', 'avgRtt', default_value='ns3::Seconds(0)'), param('uint32_t', 'avgData', default_value='1100'), param('uint32_t', 'avgInterest', default_value='40')])
     ## ndn-stack-helper.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::FaceContainer> ns3::ndn::StackHelper::Install(std::string const & nodeName) const [member function]
     cls.add_method('Install', 
                    'ns3::Ptr< ns3::ndn::FaceContainer >', 
@@ -6754,15 +6754,15 @@
     cls.add_constructor([])
     ## ndn-wire.h (module 'ndnSIM'): ns3::ndn::Wire::Wire(ns3::ndn::Wire const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ndn::Wire const &', 'arg0')])
-    ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::Packet> ns3::ndn::Wire::FromData(ns3::Ptr<ns3::ndn::ContentObject const> data, int8_t wireFormat=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)) [member function]
+    ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::Packet> ns3::ndn::Wire::FromData(ns3::Ptr<ns3::ndn::Data const> data, int8_t wireFormat=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)) [member function]
     cls.add_method('FromData', 
                    'ns3::Ptr< ns3::Packet >', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data'), param('int8_t', 'wireFormat', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'data'), param('int8_t', 'wireFormat', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)')], 
                    is_static=True)
-    ## ndn-wire.h (module 'ndnSIM'): static std::string ns3::ndn::Wire::FromDataStr(ns3::Ptr<ns3::ndn::ContentObject const> data, int8_t wireFormat=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)) [member function]
+    ## ndn-wire.h (module 'ndnSIM'): static std::string ns3::ndn::Wire::FromDataStr(ns3::Ptr<ns3::ndn::Data const> data, int8_t wireFormat=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)) [member function]
     cls.add_method('FromDataStr', 
                    'std::string', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data'), param('int8_t', 'wireFormat', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'data'), param('int8_t', 'wireFormat', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)')], 
                    is_static=True)
     ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::Packet> ns3::ndn::Wire::FromInterest(ns3::Ptr<ns3::ndn::Interest const> interest, int8_t wireFormat=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)) [member function]
     cls.add_method('FromInterest', 
@@ -6779,14 +6779,14 @@
                    'std::string', 
                    [param('ns3::Ptr< ns3::ndn::Name const >', 'name'), param('int8_t', 'wireFormat', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_DEFAULT)')], 
                    is_static=True)
-    ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::ndn::ContentObject> ns3::ndn::Wire::ToData(ns3::Ptr<ns3::Packet> packet, int8_t type=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)) [member function]
+    ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::ndn::Data> ns3::ndn::Wire::ToData(ns3::Ptr<ns3::Packet> packet, int8_t type=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)) [member function]
     cls.add_method('ToData', 
-                   'ns3::Ptr< ns3::ndn::ContentObject >', 
+                   'ns3::Ptr< ns3::ndn::Data >', 
                    [param('ns3::Ptr< ns3::Packet >', 'packet'), param('int8_t', 'type', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)')], 
                    is_static=True)
-    ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::ndn::ContentObject> ns3::ndn::Wire::ToDataStr(std::string const & wire, int8_t type=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)) [member function]
+    ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::ndn::Data> ns3::ndn::Wire::ToDataStr(std::string const & wire, int8_t type=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)) [member function]
     cls.add_method('ToDataStr', 
-                   'ns3::Ptr< ns3::ndn::ContentObject >', 
+                   'ns3::Ptr< ns3::ndn::Data >', 
                    [param('std::string const &', 'wire'), param('int8_t', 'type', default_value='::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)')], 
                    is_static=True)
     ## ndn-wire.h (module 'ndnSIM'): static ns3::Ptr<ns3::ndn::Interest> ns3::ndn::Wire::ToInterest(ns3::Ptr<ns3::Packet> packet, int8_t type=::int8_t(::ns3::ndn::Wire::WIRE_FORMAT_AUTODETECT)) [member function]
@@ -6814,10 +6814,10 @@
                    'void', 
                    [], 
                    is_virtual=True)
-    ## ndn-api-face.h (module 'ndnSIM'): void ns3::ndn::ApiFace::ExpressInterest(ns3::Ptr<ns3::ndn::Interest> interest, ns3::Callback<void, ns3::Ptr<ns3::ndn::Interest const>, ns3::Ptr<ns3::ndn::ContentObject const>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> onData, ns3::Callback<void, ns3::Ptr<ns3::ndn::Interest const>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> onTimeout) [member function]
+    ## ndn-api-face.h (module 'ndnSIM'): void ns3::ndn::ApiFace::ExpressInterest(ns3::Ptr<ns3::ndn::Interest> interest, ns3::Callback<void, ns3::Ptr<ns3::ndn::Interest const>, ns3::Ptr<ns3::ndn::Data const>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> onData, ns3::Callback<void, ns3::Ptr<ns3::ndn::Interest const>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> onTimeout) [member function]
     cls.add_method('ExpressInterest', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::Interest >', 'interest'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Interest const >, ns3::Ptr< ns3::ndn::ContentObject const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'onData'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Interest const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'onTimeout')])
+                   [param('ns3::Ptr< ns3::ndn::Interest >', 'interest'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Interest const >, ns3::Ptr< ns3::ndn::Data const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'onData'), param('ns3::Callback< void, ns3::Ptr< ns3::ndn::Interest const >, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'onTimeout')])
     ## ndn-api-face.h (module 'ndnSIM'): void ns3::ndn::ApiFace::SetInterestFilter(ns3::Ptr<ns3::ndn::Name const> prefix, ns3::Callback<void, ns3::Ptr<ns3::ndn::Name const>, ns3::Ptr<ns3::ndn::Interest const>, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> onInterest) [member function]
     cls.add_method('SetInterestFilter', 
                    'void', 
@@ -6826,19 +6826,19 @@
     cls.add_method('ClearInterestFilter', 
                    'void', 
                    [param('ns3::Ptr< ns3::ndn::Name const >', 'prefix')])
-    ## ndn-api-face.h (module 'ndnSIM'): void ns3::ndn::ApiFace::Put(ns3::Ptr<ns3::ndn::ContentObject> data) [member function]
+    ## ndn-api-face.h (module 'ndnSIM'): void ns3::ndn::ApiFace::Put(ns3::Ptr<ns3::ndn::Data> data) [member function]
     cls.add_method('Put', 
                    'void', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject >', 'data')])
+                   [param('ns3::Ptr< ns3::ndn::Data >', 'data')])
     ## ndn-api-face.h (module 'ndnSIM'): bool ns3::ndn::ApiFace::SendInterest(ns3::Ptr<ns3::ndn::Interest const> interest) [member function]
     cls.add_method('SendInterest', 
                    'bool', 
                    [param('ns3::Ptr< ns3::ndn::Interest const >', 'interest')], 
                    is_virtual=True)
-    ## ndn-api-face.h (module 'ndnSIM'): bool ns3::ndn::ApiFace::SendData(ns3::Ptr<ns3::ndn::ContentObject const> data) [member function]
+    ## ndn-api-face.h (module 'ndnSIM'): bool ns3::ndn::ApiFace::SendData(ns3::Ptr<ns3::ndn::Data const> data) [member function]
     cls.add_method('SendData', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'data')], 
                    is_virtual=True)
     ## ndn-api-face.h (module 'ndnSIM'): std::ostream & ns3::ndn::ApiFace::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
@@ -6860,10 +6860,10 @@
                    'bool', 
                    [param('ns3::Ptr< ns3::ndn::Interest const >', 'interest')], 
                    is_virtual=True)
-    ## ndn-app-face.h (module 'ndnSIM'): bool ns3::ndn::AppFace::SendData(ns3::Ptr<ns3::ndn::ContentObject const> data) [member function]
+    ## ndn-app-face.h (module 'ndnSIM'): bool ns3::ndn::AppFace::SendData(ns3::Ptr<ns3::ndn::Data const> data) [member function]
     cls.add_method('SendData', 
                    'bool', 
-                   [param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data')], 
+                   [param('ns3::Ptr< ns3::ndn::Data const >', 'data')], 
                    is_virtual=True)
     ## ndn-app-face.h (module 'ndnSIM'): std::ostream & ns3::ndn::AppFace::Print(std::ostream & os) const [member function]
     cls.add_method('Print', 
@@ -6875,15 +6875,15 @@
 def register_Ns3NdnCsEntry_methods(root_module, cls):
     ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::cs::Entry::Entry(ns3::ndn::cs::Entry const & arg0) [copy constructor]
     cls.add_constructor([param('ns3::ndn::cs::Entry const &', 'arg0')])
-    ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::cs::Entry::Entry(ns3::Ptr<ns3::ndn::ContentStore> cs, ns3::Ptr<ns3::ndn::ContentObject const> data) [constructor]
-    cls.add_constructor([param('ns3::Ptr< ns3::ndn::ContentStore >', 'cs'), param('ns3::Ptr< ns3::ndn::ContentObject const >', 'data')])
+    ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::cs::Entry::Entry(ns3::Ptr<ns3::ndn::ContentStore> cs, ns3::Ptr<ns3::ndn::Data const> data) [constructor]
+    cls.add_constructor([param('ns3::Ptr< ns3::ndn::ContentStore >', 'cs'), param('ns3::Ptr< ns3::ndn::Data const >', 'data')])
     ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::ContentStore> ns3::ndn::cs::Entry::GetContentStore() [member function]
     cls.add_method('GetContentStore', 
                    'ns3::Ptr< ns3::ndn::ContentStore >', 
                    [])
-    ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::ContentObject const> ns3::ndn::cs::Entry::GetData() const [member function]
+    ## ndn-content-store.h (module 'ndnSIM'): ns3::Ptr<ns3::ndn::Data const> ns3::ndn::cs::Entry::GetData() const [member function]
     cls.add_method('GetData', 
-                   'ns3::Ptr< ns3::ndn::ContentObject const >', 
+                   'ns3::Ptr< ns3::ndn::Data const >', 
                    [], 
                    is_const=True)
     ## ndn-content-store.h (module 'ndnSIM'): ns3::ndn::Name const & ns3::ndn::cs::Entry::GetName() const [member function]
diff --git a/bindings/scan-header.h b/bindings/scan-header.h
index 7d35e18..72d8771 100644
--- a/bindings/scan-header.h
+++ b/bindings/scan-header.h
@@ -19,7 +19,7 @@
 }
 
 static inline void
-__dummy_function_on_data_callback_instantiation (Ptr<const Interest>, Ptr<const ContentObject>)
+__dummy_function_on_data_callback_instantiation (Ptr<const Interest>, Ptr<const Data>)
 {
 }
 
@@ -51,7 +51,7 @@
 // /// @cond include_hidden
 // #ifdef PYTHON_SCAN
 // struct CallbackVoidNameInterest : public Callback<void, Ptr<const Name>, Ptr<const Interest> > { };
-// struct CallbackVoidInterestContentObject : public Callback<void, Ptr<const Interest>, Ptr<const ContentObject> > { };
+// struct CallbackVoidInterestData : public Callback<void, Ptr<const Interest>, Ptr<const Data> > { };
 // struct CallbackVoidInterest : public Callback<void, Ptr<const Interest> > { };
 // #endif
 // /// @endcond
diff --git a/docs/source/ndnsim-research-papers.rst b/docs/source/ndnsim-research-papers.rst
index 732d97b..d619e36 100644
--- a/docs/source/ndnsim-research-papers.rst
+++ b/docs/source/ndnsim-research-papers.rst
@@ -102,7 +102,7 @@
     Moreover, it also shows the performance under different sizes of content store.
     The effectiveness of the CCP strategy is proved during the simulation.
 
-- **M. Wahlisch, T.C. Schmidt, and M. Vahlenkamp, "Backscatter from the Data Plane--Threats to Stability and Security in Information-Centric Network Infrastructure", in Computer Networks, 2013** (`DOI 10.1016/j.comnet.2013.07.009 <http://dx.doi.org/10.1016/j.comnet.2013.07.009>`)
+- **M. Wahlisch, T.C. Schmidt, and M. Vahlenkamp, "Backscatter from the Data Plane--Threats to Stability and Security in Information-Centric Network Infrastructure", in Computer Networks, 2013** (`DOI 10.1016/j.comnet.2013.07.009 <http://dx.doi.org/10.1016/j.comnet.2013.07.009>`_)
 
     Information-centric networking (ICN) raises data objects to first class routable entities in the network and changes the Internet paradigm from host-centric connectivity to data-oriented delivery.
     However, current approaches to content routing heavily rely on data-driven protocol events and thereby introduce a strong coupling of the control to the data plane in the underlying routing infrastructure.
diff --git a/examples/custom-apps/custom-app.cc b/examples/custom-apps/custom-app.cc
index 4e83095..bc2fb2e 100644
--- a/examples/custom-apps/custom-app.cc
+++ b/examples/custom-apps/custom-app.cc
@@ -116,27 +116,27 @@
   
   NS_LOG_DEBUG ("Received Interest packet for " << interest->GetName ());
 
-  // Create and configure ndn::ContentObject and ndn::ContentObjectTail
+  // Create and configure ndn::Data and ndn::DataTail
   // (header is added in front of the packet, tail is added at the end of the packet)
 
   // Note that Interests send out by the app will not be sent back to the app !
   
-  Ptr<ndn::ContentObject> data = Create<ndn::ContentObject> (Create<Packet> (1024));
+  Ptr<ndn::Data> data = Create<ndn::Data> (Create<Packet> (1024));
   data->SetName (Create<ndn::Name> (interest->GetName ())); // data will have the same name as Interests
 
-  NS_LOG_DEBUG ("Sending ContentObject packet for " << data->GetName ());  
+  NS_LOG_DEBUG ("Sending Data packet for " << data->GetName ());  
 
   // Call trace (for logging purposes)
-  m_transmittedContentObjects (data, this, m_face);
+  m_transmittedDatas (data, this, m_face);
 
   m_face->ReceiveData (data); 
 }
 
 // Callback that will be called when Data arrives
 void
-CustomApp::OnContentObject (Ptr<const ndn::ContentObject> contentObject)
+CustomApp::OnData (Ptr<const ndn::Data> contentObject)
 {
-  NS_LOG_DEBUG ("Receiving ContentObject packet for " << contentObject->GetName ());
+  NS_LOG_DEBUG ("Receiving Data packet for " << contentObject->GetName ());
 
   std::cout << "DATA received for name " << contentObject->GetName () << std::endl;
 }
diff --git a/examples/custom-apps/custom-app.h b/examples/custom-apps/custom-app.h
index ed21a2c..d1f85f7 100644
--- a/examples/custom-apps/custom-app.h
+++ b/examples/custom-apps/custom-app.h
@@ -30,12 +30,12 @@
 /**
  * @brief A simple custom application
  *
- * This applications demonstrates how to send Interests and respond with ContentObjects to incoming interests
+ * This applications demonstrates how to send Interests and respond with Datas to incoming interests
  *
  * When application starts it "sets interest filter" (install FIB entry) for /prefix/sub, as well as
  * sends Interest for this prefix
  *
- * When an Interest is received, it is replied with a ContentObject with 1024-byte fake payload
+ * When an Interest is received, it is replied with a Data with 1024-byte fake payload
  */
 class CustomApp : public ndn::App
 {
@@ -58,7 +58,7 @@
 
   // (overridden from ndn::App) Callback that will be called when Data arrives
   virtual void
-  OnContentObject (Ptr<const ndn::ContentObject> contentObject);
+  OnData (Ptr<const ndn::Data> contentObject);
 
 private:
   void
diff --git a/examples/custom-apps/dumb-requester.cc b/examples/custom-apps/dumb-requester.cc
index b1a0592..574eb7c 100644
--- a/examples/custom-apps/dumb-requester.cc
+++ b/examples/custom-apps/dumb-requester.cc
@@ -110,9 +110,9 @@
 }
 
 void
-DumbRequester::OnContentObject (Ptr<const ndn::ContentObject> contentObject)
+DumbRequester::OnData (Ptr<const ndn::Data> contentObject)
 {
-  NS_LOG_DEBUG ("Receiving ContentObject packet for " << contentObject->GetName ());
+  NS_LOG_DEBUG ("Receiving Data packet for " << contentObject->GetName ());
 }
 
 
diff --git a/examples/custom-apps/dumb-requester.h b/examples/custom-apps/dumb-requester.h
index c2340e0..7b728c7 100644
--- a/examples/custom-apps/dumb-requester.h
+++ b/examples/custom-apps/dumb-requester.h
@@ -52,7 +52,7 @@
 
   // (overridden from ndn::App) Callback that will be called when Data arrives
   virtual void
-  OnContentObject (Ptr<const ndn::ContentObject> contentObject);
+  OnData (Ptr<const ndn::Data> contentObject);
   
 private:
   void
diff --git a/examples/custom-apps/ndn-api-app.cc b/examples/custom-apps/ndn-api-app.cc
index db55bb6..bb7a9b6 100644
--- a/examples/custom-apps/ndn-api-app.cc
+++ b/examples/custom-apps/ndn-api-app.cc
@@ -72,7 +72,7 @@
 }
 
 void
-ApiApp::GotData (Ptr<const Interest> origInterest, Ptr<const ContentObject> data)
+ApiApp::GotData (Ptr<const Interest> origInterest, Ptr<const Data> data)
 {
   NS_LOG_FUNCTION (this << origInterest->GetName () << data->GetName ());
   // do nothing else
diff --git a/examples/custom-apps/ndn-api-app.h b/examples/custom-apps/ndn-api-app.h
index 7709b80..8345a99 100644
--- a/examples/custom-apps/ndn-api-app.h
+++ b/examples/custom-apps/ndn-api-app.h
@@ -43,7 +43,7 @@
   RequestData ();
 
   void
-  GotData (Ptr<const Interest> origInterest, Ptr<const ContentObject> data);
+  GotData (Ptr<const Interest> origInterest, Ptr<const Data> data);
   
 protected:
   // inherited from Application base class.
diff --git a/examples/ndn-simple-with-content-freshness.cc b/examples/ndn-simple-with-content-freshness.cc
index cefb232..23db4cb 100644
--- a/examples/ndn-simple-with-content-freshness.cc
+++ b/examples/ndn-simple-with-content-freshness.cc
@@ -33,7 +33,7 @@
  *      | consumer | <------------> | router | <------------> | producer |
  *      +----------+         10ms   +--------+          10ms  +----------+
  *
- * This scenario demonstrates how to use content store that responds to Freshness parameter set in ContentObjects.
+ * This scenario demonstrates how to use content store that responds to Freshness parameter set in Datas.
  * That is, if producer set Freshness field to 2 seconds, the corresponding content object will not be cached
  * more than 2 seconds (can be cached for a shorter time, if entry is evicted earlier)
  * 
diff --git a/examples/ndn-simple-with-cs-lfu.cc b/examples/ndn-simple-with-cs-lfu.cc
index c184863..0ed9079 100644
--- a/examples/ndn-simple-with-cs-lfu.cc
+++ b/examples/ndn-simple-with-cs-lfu.cc
@@ -36,7 +36,7 @@
  *      | consumer | <------------> | router | <------------> | producer |
  *      +----------+         10ms   +--------+          10ms  +----------+
  *
- * This scenario demonstrates how to use content store that responds to Freshness parameter set in ContentObjects.
+ * This scenario demonstrates how to use content store that responds to Freshness parameter set in Datas.
  * That is, if producer set Freshness field to 2 seconds, the corresponding content object will not be cached
  * more than 2 seconds (can be cached for a shorter time, if entry is evicted earlier)
  *
diff --git a/examples/ndn-simple-with-different-sizes-content-store.cc b/examples/ndn-simple-with-different-sizes-content-store.cc
index b25d452..d6da309 100644
--- a/examples/ndn-simple-with-different-sizes-content-store.cc
+++ b/examples/ndn-simple-with-different-sizes-content-store.cc
@@ -33,7 +33,7 @@
  *      | consumer | <------------> | router | <------------> | producer |
  *      +----------+         10ms   +--------+          10ms  +----------+
  *
- * This scenario demonstrates how to use content store that responds to Freshness parameter set in ContentObjects.
+ * This scenario demonstrates how to use content store that responds to Freshness parameter set in Datas.
  * That is, if producer set Freshness field to 2 seconds, the corresponding content object will not be cached
  * more than 2 seconds (can be cached for a shorter time, if entry is evicted earlier)
  *
diff --git a/helper/ndn-header-helper.h b/helper/ndn-header-helper.h
index 1e3e086..376cdb7 100644
--- a/helper/ndn-header-helper.h
+++ b/helper/ndn-header-helper.h
@@ -41,7 +41,7 @@
  *
  * Ndn doesn't really have a header, so we need this class to
  * determine type of Ndn packet and return corresponent header class,
- * Interest or ContentObject
+ * Interest or Data
  *
  * Throws UnknownHeaderException if header type couldn't be determined
  */
@@ -57,7 +57,7 @@
   /**
    *	Packet ::= Version
    *		   PacketType
-   *		   (Interest | ContentObject)
+   *		   (Interest | Data)
    *
    *        0                   1
    *        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
@@ -68,7 +68,7 @@
    * For ccnb-encoding compatibility, ``Version`` / ``PacketType`` has two reserved values to denote ccnb-encoded packet:
    *
    * Version 0x01, PacketType 0xD2 --- ccnb-encoded ``Interest`` packet
-   * Version 0x04, PacketType 0x82 --- ccnb-encoded ``ContentObject`` packet
+   * Version 0x04, PacketType 0x82 --- ccnb-encoded ``Data`` packet
    *
    *
    * It peeks first 2 bytes of a packet.
diff --git a/helper/ndn-stack-helper.cc b/helper/ndn-stack-helper.cc
index e0bf401..085078b 100644
--- a/helper/ndn-stack-helper.cc
+++ b/helper/ndn-stack-helper.cc
@@ -179,13 +179,13 @@
 void
 StackHelper::EnableLimits (bool enable/* = true*/,
                            Time avgRtt/*=Seconds(0.1)*/,
-                           uint32_t avgContentObject/*=1100*/,
+                           uint32_t avgData/*=1100*/,
                            uint32_t avgInterest/*=40*/)
 {
   NS_LOG_INFO ("EnableLimits: " << enable);
   m_limitsEnabled = enable;
   m_avgRtt = avgRtt;
-  m_avgContentObjectSize = avgContentObject;
+  m_avgDataSize = avgData;
   m_avgInterestSize = avgInterest;
 }
 
@@ -355,7 +355,7 @@
 
           NS_LOG_INFO("DataRate for this link is " << dataRate.Get());
 
-          double maxInterestPackets = 1.0  * dataRate.Get ().GetBitRate () / 8.0 / (m_avgContentObjectSize + m_avgInterestSize);
+          double maxInterestPackets = 1.0  * dataRate.Get ().GetBitRate () / 8.0 / (m_avgDataSize + m_avgInterestSize);
           // NS_LOG_INFO ("Max packets per second: " << maxInterestPackets);
           // NS_LOG_INFO ("Max burst: " << m_avgRtt.ToDouble (Time::S) * maxInterestPackets);
           NS_LOG_INFO ("MaxLimit: " << (int)(m_avgRtt.ToDouble (Time::S) * maxInterestPackets));
diff --git a/helper/ndn-stack-helper.h b/helper/ndn-stack-helper.h
index 8303440..dc11bcf 100644
--- a/helper/ndn-stack-helper.h
+++ b/helper/ndn-stack-helper.h
@@ -166,11 +166,11 @@
    *
    * @param enable           Enable or disable limits
    * @param avgRtt           Average RTT
-   * @param avgContentObject Average size of contentObject packets (including all headers)
+   * @param avgData Average size of contentObject packets (including all headers)
    * @param avgInterest      Average size of interest packets (including all headers)
    */
   void
-  EnableLimits (bool enable = true, Time avgRtt=Seconds(0.1), uint32_t avgContentObject=1100, uint32_t avgInterest=40);
+  EnableLimits (bool enable = true, Time avgRtt=Seconds(0.1), uint32_t avgData=1100, uint32_t avgInterest=40);
 
   /**
    * \brief Install Ndn stack on the node
@@ -305,7 +305,7 @@
 
   bool     m_limitsEnabled;
   Time     m_avgRtt;
-  uint32_t m_avgContentObjectSize;
+  uint32_t m_avgDataSize;
   uint32_t m_avgInterestSize;
   bool     m_needSetDefaultRoutes;
 
diff --git a/model/cs/content-store-impl.h b/model/cs/content-store-impl.h
index 7058009..48786d7 100644
--- a/model/cs/content-store-impl.h
+++ b/model/cs/content-store-impl.h
@@ -48,7 +48,7 @@
   typedef Entry base_type;
 
 public:
-  EntryImpl (Ptr<ContentStore> cs, Ptr<const ContentObject> data)
+  EntryImpl (Ptr<ContentStore> cs, Ptr<const Data> data)
     : Entry (cs, data)
     , item_ (0)
   {
@@ -94,11 +94,11 @@
 
   // from ContentStore
 
-  virtual inline Ptr<ContentObject>
+  virtual inline Ptr<Data>
   Lookup (Ptr<const Interest> interest);
 
   virtual inline bool
-  Add (Ptr<const ContentObject> data);
+  Add (Ptr<const Data> data);
 
   // virtual bool
   // Remove (Ptr<Interest> header);
@@ -182,7 +182,7 @@
 };
 
 template<class Policy>
-Ptr<ContentObject>
+Ptr<Data>
 ContentStoreImpl<Policy>::Lookup (Ptr<const Interest> interest)
 {
   NS_LOG_FUNCTION (this << interest->GetName ());
@@ -202,7 +202,7 @@
     {
       this->m_cacheHitsTrace (interest, node->payload ()->GetData ());
 
-      Ptr<ContentObject> copy = Create<ContentObject> (*node->payload ()->GetData ());
+      Ptr<Data> copy = Create<Data> (*node->payload ()->GetData ());
       ConstCast<Packet> (copy->GetPayload ())->RemoveAllPacketTags ();
       return copy;
     }
@@ -215,7 +215,7 @@
 
 template<class Policy>
 bool
-ContentStoreImpl<Policy>::Add (Ptr<const ContentObject> data)
+ContentStoreImpl<Policy>::Add (Ptr<const Data> data)
 {
   NS_LOG_FUNCTION (this << data->GetName ());
 
diff --git a/model/cs/content-store-nocache.cc b/model/cs/content-store-nocache.cc
index c5749e2..b2b8fbf 100644
--- a/model/cs/content-store-nocache.cc
+++ b/model/cs/content-store-nocache.cc
@@ -55,7 +55,7 @@
 {
 }
 
-Ptr<ContentObject>
+Ptr<Data>
 Nocache::Lookup (Ptr<const Interest> interest)
 {
   this->m_cacheMissesTrace (interest);
@@ -63,7 +63,7 @@
 }
 
 bool
-Nocache::Add (Ptr<const ContentObject> data)
+Nocache::Add (Ptr<const Data> data)
 {
   return false;
 }
diff --git a/model/cs/content-store-nocache.h b/model/cs/content-store-nocache.h
index 98c1850..ca3afe2 100644
--- a/model/cs/content-store-nocache.h
+++ b/model/cs/content-store-nocache.h
@@ -54,11 +54,11 @@
   virtual
   ~Nocache ();
 
-  virtual Ptr<ContentObject>
+  virtual Ptr<Data>
   Lookup (Ptr<const Interest> interest);
 
   virtual bool
-  Add (Ptr<const ContentObject> data);
+  Add (Ptr<const Data> data);
 
   virtual void
   Print (std::ostream &os) const;
diff --git a/model/cs/content-store-with-freshness.h b/model/cs/content-store-with-freshness.h
index d9fa1ba..e53cbba 100644
--- a/model/cs/content-store-with-freshness.h
+++ b/model/cs/content-store-with-freshness.h
@@ -50,7 +50,7 @@
   Print (std::ostream &os) const;
 
   virtual inline bool
-  Add (Ptr<const ContentObject> data);
+  Add (Ptr<const Data> data);
 
 private:
   inline void
@@ -94,7 +94,7 @@
 
 template<class Policy>
 inline bool
-ContentStoreWithFreshness< Policy >::Add (Ptr<const ContentObject> data)
+ContentStoreWithFreshness< Policy >::Add (Ptr<const Data> data)
 {
   bool ok = super::Add (data);
   if (!ok) return false;
diff --git a/model/cs/ndn-content-store.cc b/model/cs/ndn-content-store.cc
index f1c25b7..38215dc 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 ContentObject> data)
+Entry::Entry (Ptr<ContentStore> cs, Ptr<const Data> data)
   : m_cs (cs)
   , m_data (data)
 {
@@ -72,7 +72,7 @@
   return m_data->GetName ();
 }
 
-Ptr<const ContentObject>
+Ptr<const Data>
 Entry::GetData () const
 {
   return m_data;
diff --git a/model/cs/ndn-content-store.h b/model/cs/ndn-content-store.h
index 10a7bd3..ae7c059 100644
--- a/model/cs/ndn-content-store.h
+++ b/model/cs/ndn-content-store.h
@@ -34,7 +34,7 @@
 
 namespace ndn {
 
-class ContentObject;
+class Data;
 class Interest;
 class Name;
 class ContentStore;
@@ -60,13 +60,13 @@
   /**
    * \brief Construct content store entry
    *
-   * \param header Parsed ContentObject header
+   * \param header Parsed Data header
    * \param packet Original Ndn packet
    *
    * The constructor will make a copy of the supplied packet and calls
    * RemoveHeader and RemoveTail on the copy.
    */
-  Entry (Ptr<ContentStore> cs, Ptr<const ContentObject> data);
+  Entry (Ptr<ContentStore> cs, Ptr<const Data> data);
 
   /**
    * \brief Get prefix of the stored entry
@@ -76,10 +76,10 @@
   GetName () const;
 
   /**
-   * \brief Get ContentObject of the stored entry
-   * \returns ContentObject of the stored entry
+   * \brief Get Data of the stored entry
+   * \returns Data of the stored entry
    */
-  Ptr<const ContentObject>
+  Ptr<const Data>
   GetData () const;
 
   /**
@@ -90,7 +90,7 @@
 
 private:
   Ptr<ContentStore> m_cs; ///< \brief content store to which entry is added
-  Ptr<const ContentObject> m_data; ///< \brief non-modifiable ContentObject
+  Ptr<const Data> m_data; ///< \brief non-modifiable Data
 };
 
 } // namespace cs
@@ -128,19 +128,19 @@
    * If an entry is found, it is promoted to the top of most recent
    * used entries index, \see m_contentStore
    */
-  virtual Ptr<ContentObject>
+  virtual Ptr<Data>
   Lookup (Ptr<const Interest> interest) = 0;
 
   /**
    * \brief Add a new content to the content store.
    *
-   * \param header Fully parsed ContentObject
+   * \param header Fully parsed Data
    * \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 ContentObject> data) = 0;
+  Add (Ptr<const Data> data) = 0;
 
   // /*
   //  * \brief Add a new content to the content store.
@@ -194,7 +194,7 @@
 
 protected:
   TracedCallback<Ptr<const Interest>,
-                 Ptr<const ContentObject> > m_cacheHitsTrace; ///< @brief trace of cache hits
+                 Ptr<const Data> > m_cacheHitsTrace; ///< @brief trace of cache hits
 
   TracedCallback<Ptr<const Interest> > m_cacheMissesTrace; ///< @brief trace of cache misses
 };
diff --git a/model/fw/ndn-forwarding-strategy.cc b/model/fw/ndn-forwarding-strategy.cc
index 2275a8c..f439fd4 100644
--- a/model/fw/ndn-forwarding-strategy.cc
+++ b/model/fw/ndn-forwarding-strategy.cc
@@ -178,7 +178,7 @@
       return;
     }
 
-  Ptr<ContentObject> contentObject;
+  Ptr<Data> contentObject;
   contentObject = m_contentStore->Lookup (interest);
   if (contentObject != 0)
     {
@@ -222,7 +222,7 @@
 
 void
 ForwardingStrategy::OnData (Ptr<Face> inFace,
-                            Ptr<ContentObject> data)
+                            Ptr<Data> data)
 {
   NS_LOG_FUNCTION (inFace << data->GetName ());
   m_inData (data, inFace);
@@ -354,7 +354,7 @@
 
 void
 ForwardingStrategy::SatisfyPendingInterest (Ptr<Face> inFace,
-                                            Ptr<const ContentObject> data,
+                                            Ptr<const Data> data,
                                             Ptr<pit::Entry> pitEntry)
 {
   if (inFace != 0)
@@ -387,7 +387,7 @@
 
 void
 ForwardingStrategy::DidReceiveSolicitedData (Ptr<Face> inFace,
-                                             Ptr<const ContentObject> data,
+                                             Ptr<const Data> data,
                                              bool didCreateCacheEntry)
 {
   // do nothing
@@ -395,7 +395,7 @@
 
 void
 ForwardingStrategy::DidReceiveUnsolicitedData (Ptr<Face> inFace,
-                                               Ptr<const ContentObject> data,
+                                               Ptr<const Data> data,
                                                bool didCreateCacheEntry)
 {
   // do nothing
@@ -556,7 +556,7 @@
 void
 ForwardingStrategy::DidSendOutData (Ptr<Face> inFace,
                                     Ptr<Face> outFace,
-                                    Ptr<const ContentObject> data,
+                                    Ptr<const Data> data,
                                     Ptr<pit::Entry> pitEntry)
 {
   m_outData (data, inFace == 0, outFace);
diff --git a/model/fw/ndn-forwarding-strategy.h b/model/fw/ndn-forwarding-strategy.h
index bfed748..05078d6 100644
--- a/model/fw/ndn-forwarding-strategy.h
+++ b/model/fw/ndn-forwarding-strategy.h
@@ -45,7 +45,7 @@
 class Face;
 
 class Interest;
-class ContentObject;
+class Data;
 
 class Pit;
 namespace pit { class Entry; }
@@ -89,13 +89,13 @@
   /**
    * \brief Actual processing of incoming Ndn content objects
    *
-   * Processing ContentObject packets
+   * Processing Data packets
    * @param face    incoming face
    * @param data    Data packet
    */
   virtual void
   OnData (Ptr<Face> face,
-          Ptr<ContentObject> data);
+          Ptr<Data> data);
 
   /**
    * @brief Event fired just before PIT entry is removed by timeout
@@ -274,13 +274,13 @@
    */
   virtual void
   SatisfyPendingInterest (Ptr<Face> inFace, // 0 allowed (from cache)
-                          Ptr<const ContentObject> data,
+                          Ptr<const Data> data,
                           Ptr<pit::Entry> pitEntry);
 
   /**
    * @brief Event which is fired just after data was send out on the face
    *
-   * @param inFace   incoming face of the ContentObject
+   * @param inFace   incoming face of the Data
    * @param outFace  outgoing face
    * @param data     Data packet
    * @param pitEntry an existing PIT entry, corresponding to the duplicated Interest
@@ -288,7 +288,7 @@
   virtual void
   DidSendOutData (Ptr<Face> inFace,
                   Ptr<Face> outFace,
-                  Ptr<const ContentObject> data,
+                  Ptr<const Data> data,
                   Ptr<pit::Entry> pitEntry);
 
   /**
@@ -300,7 +300,7 @@
    */
   virtual void
   DidReceiveSolicitedData (Ptr<Face> inFace,
-                           Ptr<const ContentObject> data,
+                           Ptr<const Data> data,
                            bool didCreateCacheEntry);
 
   /**
@@ -315,7 +315,7 @@
    */
   virtual void
   DidReceiveUnsolicitedData (Ptr<Face> inFace,
-                             Ptr<const ContentObject> data,
+                             Ptr<const Data> data,
                              bool didCreateCacheEntry);
 
   /**
@@ -328,7 +328,7 @@
    *
    * @param inFace  incoming face
    * @param interest Interest packet
-   * @param payload ContentObject payload
+   * @param payload Data payload
    */
   virtual bool
   ShouldSuppressIncomingInterest (Ptr<Face> inFace,
@@ -455,14 +455,14 @@
   ////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////
 
-  TracedCallback<Ptr<const ContentObject>,
+  TracedCallback<Ptr<const Data>,
                  bool /*from cache*/,
                  Ptr<const Face> > m_outData; ///< @brief trace of outgoing Data
 
-  TracedCallback<Ptr<const ContentObject>,
+  TracedCallback<Ptr<const Data>,
                  Ptr<const Face> > m_inData; ///< @brief trace of incoming Data
 
-  TracedCallback<Ptr<const ContentObject>,
+  TracedCallback<Ptr<const Data>,
                   Ptr<const Face> > m_dropData;  ///< @brief trace of dropped Data
 
   ////////////////////////////////////////////////////////////////////
diff --git a/model/ndn-app-face.cc b/model/ndn-app-face.cc
index b66fa92..4e5f56e 100644
--- a/model/ndn-app-face.cc
+++ b/model/ndn-app-face.cc
@@ -101,7 +101,7 @@
 }
 
 bool
-AppFace::SendData (Ptr<const ContentObject> data)
+AppFace::SendData (Ptr<const Data> data)
 {
   NS_LOG_FUNCTION (this << data);
 
@@ -110,7 +110,7 @@
       return false;
     }
 
-  m_app->OnContentObject (data);
+  m_app->OnData (data);
   return true;
 }
 
diff --git a/model/ndn-app-face.h b/model/ndn-app-face.h
index 5c88b4e..029dd0a 100644
--- a/model/ndn-app-face.h
+++ b/model/ndn-app-face.h
@@ -32,10 +32,10 @@
 namespace ndn {
 
 class Interest;
-class ContentObject;
+class Data;
 
 typedef Interest InterestHeader;
-typedef ContentObject ContentObjectHeader;
+typedef Data DataHeader;
 
 class App;
 
@@ -67,7 +67,7 @@
   SendInterest (Ptr<const Interest> interest);
 
   virtual bool
-  SendData (Ptr<const ContentObject> data);
+  SendData (Ptr<const Data> data);
 
 public:
   virtual std::ostream&
diff --git a/model/ndn-content-object.cc b/model/ndn-content-object.cc
index 9df1d27..84df61b 100644
--- a/model/ndn-content-object.cc
+++ b/model/ndn-content-object.cc
@@ -25,12 +25,12 @@
 
 #include <boost/foreach.hpp>
 
-NS_LOG_COMPONENT_DEFINE ("ndn.ContentObject");
+NS_LOG_COMPONENT_DEFINE ("ndn.Data");
 
 namespace ns3 {
 namespace ndn {
 
-ContentObject::ContentObject (Ptr<Packet> payload/* = Create<Packet> ()*/)
+Data::Data (Ptr<Packet> payload/* = Create<Packet> ()*/)
   : m_name (Create<Name> ())
   , m_signature (0)
   , m_payload (payload)
@@ -42,7 +42,7 @@
     }
 }
 
-ContentObject::ContentObject (const ContentObject &other)
+Data::Data (const Data &other)
   : m_name (Create<Name> (other.GetName ()))
   , m_freshness (other.GetFreshness ())
   , m_timestamp (other.GetTimestamp ())
@@ -53,48 +53,48 @@
 }
 
 void
-ContentObject::SetName (Ptr<Name> name)
+Data::SetName (Ptr<Name> name)
 {
   m_name = name;
   m_wire = 0;
 }
 
 void
-ContentObject::SetName (const Name &name)
+Data::SetName (const Name &name)
 {
   m_name = Create<Name> (name);
   m_wire = 0;
 }
 
 const Name&
-ContentObject::GetName () const
+Data::GetName () const
 {
-  if (m_name==0) throw ContentObjectException();
+  if (m_name==0) throw DataException();
   return *m_name;
 }
 
 Ptr<const Name>
-ContentObject::GetNamePtr () const
+Data::GetNamePtr () const
 {
   return m_name;
 }
 
 
 void
-ContentObject::SetTimestamp (const Time &timestamp)
+Data::SetTimestamp (const Time &timestamp)
 {
   m_timestamp = timestamp;
   m_wire = 0;
 }
 
 Time
-ContentObject::GetTimestamp () const
+Data::GetTimestamp () const
 {
   return m_timestamp;
 }
     
 void
-ContentObject::SetFreshness (const Time &freshness)
+Data::SetFreshness (const Time &freshness)
 {
   m_freshness = freshness;
   m_wire = 0;
@@ -102,52 +102,52 @@
 
 
 Time
-ContentObject::GetFreshness () const
+Data::GetFreshness () const
 {
   return m_freshness;
 }
 
 void
-ContentObject::SetSignature (uint32_t signature)
+Data::SetSignature (uint32_t signature)
 {
   m_signature = signature;
   m_wire = 0;
 }
 
 uint32_t
-ContentObject::GetSignature () const
+Data::GetSignature () const
 {
   return m_signature;
 }
 
 void
-ContentObject::SetKeyLocator (Ptr<Name> keyLocator)
+Data::SetKeyLocator (Ptr<Name> keyLocator)
 {
   m_keyLocator = keyLocator;
 }
 
 Ptr<const Name>
-ContentObject::GetKeyLocator () const
+Data::GetKeyLocator () const
 {
   return m_keyLocator;
 }
 
 void
-ContentObject::Print (std::ostream &os) const
+Data::Print (std::ostream &os) const
 {
   os << "D: " << GetName ();
-  // os << "<ContentObject><Name>" << GetName () << "</Name><Content>";
+  // os << "<Data><Name>" << GetName () << "</Name><Content>";
 }
 
 void
-ContentObject::SetPayload (Ptr<Packet> payload)
+Data::SetPayload (Ptr<Packet> payload)
 {
   m_payload = payload;
   m_wire = 0;
 }
 
 Ptr<const Packet>
-ContentObject::GetPayload () const
+Data::GetPayload () const
 {
   return m_payload;
 }
diff --git a/model/ndn-content-object.h b/model/ndn-content-object.h
index 859543b..4d51d37 100644
--- a/model/ndn-content-object.h
+++ b/model/ndn-content-object.h
@@ -34,9 +34,9 @@
 
 /**
  * @ingroup ndn
- * @brief ContentObject header
+ * @brief Data header
  */
-class ContentObject : public SimpleRefCount<ContentObject>
+class Data : public SimpleRefCount<Data>
 {
 public:
   /**
@@ -44,12 +44,12 @@
    *
    * Creates a null header
    **/
-  ContentObject (Ptr<Packet> payload = Create<Packet> ());
+  Data (Ptr<Packet> payload = Create<Packet> ());
 
   /**
    * @brief Copy constructor
    */
-  ContentObject (const ContentObject &other);
+  Data (const Data &other);
 
   /**
    * \brief Set content object name
@@ -176,8 +176,8 @@
   
 private:
   // NO_ASSIGN
-  ContentObject &
-  operator = (const ContentObject &other) { return *this; }
+  Data &
+  operator = (const Data &other) { return *this; }
   
 private:
   Ptr<Name> m_name;
@@ -191,25 +191,25 @@
 };
 
 inline std::ostream &
-operator << (std::ostream &os, const ContentObject &d)
+operator << (std::ostream &os, const Data &d)
 {
   d.Print (os);
   return os;
 }
 
 /**
- * @brief Class for ContentObject parsing exception
+ * @brief Class for Data parsing exception
  */
-class ContentObjectException {};
+class DataException {};
 
 inline Ptr<const Packet>
-ContentObject::GetWire () const
+Data::GetWire () const
 {
   return m_wire;
 }
 
 inline void
-ContentObject::SetWire (Ptr<const Packet> packet) const
+Data::SetWire (Ptr<const Packet> packet) const
 {
   m_wire = packet;
 }
diff --git a/model/ndn-face.cc b/model/ndn-face.cc
index 57a8c4d..72b490e 100644
--- a/model/ndn-face.cc
+++ b/model/ndn-face.cc
@@ -69,7 +69,7 @@
 Face::Face (Ptr<Node> node)
   : m_node (node)
   , m_upstreamInterestHandler (MakeNullCallback< void, Ptr<Face>, Ptr<Interest> > ())
-  , m_upstreamDataHandler (MakeNullCallback< void, Ptr<Face>, Ptr<ContentObject> > ())
+  , m_upstreamDataHandler (MakeNullCallback< void, Ptr<Face>, Ptr<Data> > ())
   , m_ifup (false)
   , m_id ((uint32_t)-1)
   , m_metric (0)
@@ -115,7 +115,7 @@
   NS_LOG_FUNCTION_NOARGS ();
 
   m_upstreamInterestHandler = MakeNullCallback< void, Ptr<Face>, Ptr<Interest> > ();
-  m_upstreamDataHandler = MakeNullCallback< void, Ptr<Face>, Ptr<ContentObject> > ();
+  m_upstreamDataHandler = MakeNullCallback< void, Ptr<Face>, Ptr<Data> > ();
 }
 
 
@@ -133,7 +133,7 @@
 }
 
 bool
-Face::SendData (Ptr<const ContentObject> data)
+Face::SendData (Ptr<const Data> data)
 {
   NS_LOG_FUNCTION (this << data);
 
@@ -214,7 +214,7 @@
 }
 
 bool
-Face::ReceiveData (Ptr<ContentObject> data)
+Face::ReceiveData (Ptr<Data> data)
 {
   if (!IsUp ())
     {
diff --git a/model/ndn-face.h b/model/ndn-face.h
index c2e3ca4..a166a7b 100644
--- a/model/ndn-face.h
+++ b/model/ndn-face.h
@@ -39,7 +39,7 @@
 namespace ndn {
 
 class Interest;
-class ContentObject;
+class Data;
 
 /**
  * \ingroup ndn
@@ -69,7 +69,7 @@
    * \param packet Original packet
    */
   typedef Callback<void, Ptr<Face>, Ptr<Interest> > InterestHandler;
-  typedef Callback<void, Ptr<Face>, Ptr<ContentObject> > DataHandler;
+  typedef Callback<void, Ptr<Face>, Ptr<Data> > DataHandler;
 
   /**
    * \brief Default constructor
@@ -119,7 +119,7 @@
    * @returns true if Data packet is considered to be send out (enqueued)
    */
   virtual bool
-  SendData (Ptr<const ContentObject> data);
+  SendData (Ptr<const Data> data);
 
   /**
    * \brief Receive interest from application or another node and forward it up to the NDN stack
@@ -135,7 +135,7 @@
    * By default it is called from inside Receive method, but can be used directly, if appropriate
    */
   virtual bool
-  ReceiveData (Ptr<ContentObject> data);
+  ReceiveData (Ptr<Data> data);
   ////////////////////////////////////////////////////////////////////
 
   /**
diff --git a/model/pit/ndn-pit-impl.h b/model/pit/ndn-pit-impl.h
index 6a8dfcd..85f11c8 100644
--- a/model/pit/ndn-pit-impl.h
+++ b/model/pit/ndn-pit-impl.h
@@ -81,7 +81,7 @@
 
   // inherited from Pit
   virtual Ptr<Entry>
-  Lookup (const ContentObject &header);
+  Lookup (const Data &header);
 
   virtual Ptr<Entry>
   Lookup (const Interest &header);
@@ -300,7 +300,7 @@
 
 template<class Policy>
 Ptr<Entry>
-PitImpl<Policy>::Lookup (const ContentObject &header)
+PitImpl<Policy>::Lookup (const Data &header)
 {
   /// @todo use predicate to search with exclude filters
   typename super::iterator item = super::longest_prefix_match_if (header.GetName (), EntryIsNotEmpty ());
diff --git a/model/pit/ndn-pit.h b/model/pit/ndn-pit.h
index 0699479..1185892 100644
--- a/model/pit/ndn-pit.h
+++ b/model/pit/ndn-pit.h
@@ -44,11 +44,11 @@
 
 class L3Protocol;
 class Face;
-class ContentObject;
+class Data;
 class Interest;
 
 typedef Interest InterestHeader;
-typedef ContentObject ContentObjectHeader;
+typedef Data DataHeader;
 
 ////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////
@@ -89,7 +89,7 @@
    *          returns 0
    */
   virtual Ptr<pit::Entry>
-  Lookup (const ContentObject &header) = 0;
+  Lookup (const Data &header) = 0;
 
   /**
    * \brief Find a PIT entry for the given content interest
diff --git a/model/wire/ccnb.h b/model/wire/ccnb.h
index 9b920b9..a561643 100644
--- a/model/wire/ccnb.h
+++ b/model/wire/ccnb.h
@@ -67,15 +67,15 @@
 {
 public:
   Data ();
-  Data (Ptr<ndn::ContentObject> data);
+  Data (Ptr<ndn::Data> data);
 
-  Ptr<ndn::ContentObject>
+  Ptr<ndn::Data>
   GetData ();
 
   static Ptr<Packet>
-  ToWire (Ptr<const ndn::ContentObject> data);
+  ToWire (Ptr<const ndn::Data> data);
 
-  static Ptr<ndn::ContentObject>
+  static Ptr<ndn::Data>
   FromWire (Ptr<Packet> packet);
   
   // from Header
@@ -87,7 +87,7 @@
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
 private:
-  Ptr<ndn::ContentObject> m_data;  
+  Ptr<ndn::Data> m_data;  
 };
 
 } // ccnb
diff --git a/model/wire/ccnb/ccnb-parser/common.h b/model/wire/ccnb/ccnb-parser/common.h
index 531cd87..1485b96 100644
--- a/model/wire/ccnb/ccnb-parser/common.h
+++ b/model/wire/ccnb/ccnb-parser/common.h
@@ -116,7 +116,7 @@
   CCN_DTAG_PublisherCertificateDigest = 61,
   CCN_DTAG_PublisherIssuerKeyDigest = 62,
   CCN_DTAG_PublisherIssuerCertificateDigest = 63,
-  CCN_DTAG_ContentObject = 64,	/* 20090915 */
+  CCN_DTAG_Data = 64,	/* 20090915 */
   CCN_DTAG_WrappedKey = 65,
   CCN_DTAG_WrappingKeyIdentifier = 66,
   CCN_DTAG_WrapAlgorithm = 67,
diff --git a/model/wire/ccnb/ccnb-parser/syntax-tree/dtag.cc b/model/wire/ccnb/ccnb-parser/syntax-tree/dtag.cc
index 3095747..0bf5296 100644
--- a/model/wire/ccnb/ccnb-parser/syntax-tree/dtag.cc
+++ b/model/wire/ccnb/ccnb-parser/syntax-tree/dtag.cc
@@ -62,7 +62,7 @@
   while (!start.IsEnd () && BufferIteratorPeekU8 (start)!=CCN_CLOSE)
     {
       // hack #2. Stop processing nested blocks if last block was <Content>
-      if (m_dtag == CCN_DTAG_ContentObject && // we are in <ContentObject>
+      if (m_dtag == CCN_DTAG_Data && // we are in <Data>
           DynamicCast<Dtag> (m_nestedTags.back())!=0 && // last block is DTAG
           DynamicCast<Dtag> (m_nestedTags.back())->m_dtag == CCN_DTAG_Content) 
         {
@@ -72,8 +72,8 @@
       m_nestedTags.push_back (Block::ParseBlock (start));
     }
 
-  // hack #3. Stop processing when last tag was <ContentObject>
-  if (m_dtag == CCN_DTAG_ContentObject && // we are in <ContentObject>
+  // hack #3. Stop processing when last tag was <Data>
+  if (m_dtag == CCN_DTAG_Data && // we are in <Data>
       DynamicCast<Dtag> (m_nestedTags.back())!=0 && // last block is DTAG
       DynamicCast<Dtag> (m_nestedTags.back())->m_dtag == CCN_DTAG_Content) 
     {
diff --git a/model/wire/ccnb/wire-ccnb-data.cc b/model/wire/ccnb/wire-ccnb-data.cc
index fb87899..6349971 100644
--- a/model/wire/ccnb/wire-ccnb-data.cc
+++ b/model/wire/ccnb/wire-ccnb-data.cc
@@ -85,7 +85,7 @@
     i.Prev (2); // Trailer interface requires us to go backwards
 
     i.WriteU8 (0x00); // </Content>
-    i.WriteU8 (0x00); // </ContentObject>
+    i.WriteU8 (0x00); // </Data>
   }
 
   virtual uint32_t Deserialize (Buffer::Iterator end)
@@ -97,7 +97,7 @@
     NS_ASSERT_MSG (closing_tag_content==0, "Should be a closing tag </Content> (0x00)");
 
     uint8_t closing_tag_content_object = i.ReadU8 ();
-    NS_ASSERT_MSG (closing_tag_content_object==0, "Should be a closing tag </ContentObject> (0x00)");
+    NS_ASSERT_MSG (closing_tag_content_object==0, "Should be a closing tag </Data> (0x00)");
 
     return 2;
   }
@@ -124,23 +124,23 @@
 }
 
 Data::Data ()
-  : m_data (Create<ndn::ContentObject> ())
+  : m_data (Create<ndn::Data> ())
 {
 }
 
-Data::Data (Ptr<ndn::ContentObject> data)
+Data::Data (Ptr<ndn::Data> data)
   : m_data (data)
 {
 }
 
-Ptr<ndn::ContentObject>
+Ptr<ndn::Data>
 Data::GetData ()
 {
   return m_data;
 }
 
 Ptr<Packet>
-Data::ToWire (Ptr<const ndn::ContentObject> data)
+Data::ToWire (Ptr<const ndn::Data> data)
 {
   static DataTrailer trailer;
 
@@ -148,7 +148,7 @@
   if (!p)
     {
       Ptr<Packet> packet = Create<Packet> (*data->GetPayload ());
-      Data wireEncoding (ConstCast<ndn::ContentObject> (data));
+      Data wireEncoding (ConstCast<ndn::Data> (data));
       packet->AddHeader (wireEncoding);
       packet->AddTrailer (trailer);
       data->SetWire (packet);
@@ -159,12 +159,12 @@
   return p->Copy ();
 }
 
-Ptr<ndn::ContentObject>
+Ptr<ndn::Data>
 Data::FromWire (Ptr<Packet> packet)
 {
   static DataTrailer trailer;
 
-  Ptr<ndn::ContentObject> data = Create<ndn::ContentObject> ();
+  Ptr<ndn::Data> data = Create<ndn::Data> ();
   data->SetWire (packet->Copy ());
 
   Data wireEncoding (data);
@@ -179,7 +179,7 @@
 void
 Data::Serialize (Buffer::Iterator start) const
 {
-  Ccnb::AppendBlockHeader (start, CcnbParser::CCN_DTAG_ContentObject, CcnbParser::CCN_DTAG); // <ContentObject>
+  Ccnb::AppendBlockHeader (start, CcnbParser::CCN_DTAG_Data, CcnbParser::CCN_DTAG); // <Data>
 
   // fake signature
   Ccnb::AppendBlockHeader (start, CcnbParser::CCN_DTAG_Signature, CcnbParser::CCN_DTAG); // <Signature>
@@ -252,14 +252,14 @@
     Ccnb::AppendBlockHeader (start, payloadSize, CcnbParser::CCN_BLOB);
 
   // there are no closing tags !!!
-  // The closing tag is handled by ContentObjectTail
+  // The closing tag is handled by DataTail
 }
 
 uint32_t
 Data::GetSerializedSize () const
 {
   size_t written = 0;
-  written += Ccnb::EstimateBlockHeader (CcnbParser::CCN_DTAG_ContentObject); // <ContentObject>
+  written += Ccnb::EstimateBlockHeader (CcnbParser::CCN_DTAG_Data); // <Data>
 
   // fake signature
   written += Ccnb::EstimateBlockHeader (CcnbParser::CCN_DTAG_Signature); // <Signature>
@@ -331,14 +331,14 @@
     written += Ccnb::EstimateBlockHeader (payloadSize);
 
   // there are no closing tags !!!
-  // The closing tag is handled by ContentObjectTail
+  // The closing tag is handled by DataTail
   return written;
 }
 
-class ContentObjectVisitor : public CcnbParser::VoidDepthFirstVisitor
+class DataVisitor : public CcnbParser::VoidDepthFirstVisitor
 {
 public:
-  virtual void visit (CcnbParser::Dtag &n, boost::any param/*should be ContentObject* */)
+  virtual void visit (CcnbParser::Dtag &n, boost::any param/*should be Data* */)
   {
     // uint32_t n.m_dtag;
     // std::list< Ptr<CcnbParser::Block> > n.m_nestedBlocks;
@@ -349,11 +349,11 @@
     static CcnbParser::Uint32tBlobVisitor uint32tBlobVisitor;
     static CcnbParser::ContentTypeVisitor contentTypeVisitor;
 
-    ndn::ContentObject &contentObject = *(boost::any_cast<ndn::ContentObject*> (param));
+    ndn::Data &contentObject = *(boost::any_cast<ndn::Data*> (param));
 
     switch (n.m_dtag)
       {
-      case CcnbParser::CCN_DTAG_ContentObject:
+      case CcnbParser::CCN_DTAG_Data:
         // process nested blocks
         BOOST_FOREACH (Ptr<CcnbParser::Block> block, n.m_nestedTags)
           {
@@ -482,7 +482,7 @@
 uint32_t
 Data::Deserialize (Buffer::Iterator start)
 {
-  static ContentObjectVisitor contentObjectVisitor;
+  static DataVisitor contentObjectVisitor;
 
   Buffer::Iterator i = start;
   Ptr<CcnbParser::Block> root = CcnbParser::Block::ParseBlock (i);
@@ -495,7 +495,7 @@
 Data::Print (std::ostream &os) const
 {
   os << "D: " << m_data->GetName ();
-  // os << "<ContentObject><Name>" << GetName () << "</Name><Content>";
+  // os << "<Data><Name>" << GetName () << "</Name><Content>";
 }
 
 } // ccnb
diff --git a/model/wire/ndn-wire.cc b/model/wire/ndn-wire.cc
index b9164e4..ad8966f 100644
--- a/model/wire/ndn-wire.cc
+++ b/model/wire/ndn-wire.cc
@@ -113,7 +113,7 @@
 }
 
 Ptr<Packet>
-Wire::FromData (Ptr<const ContentObject> data, int8_t wireFormat/* = WIRE_FORMAT_DEFAULT*/)
+Wire::FromData (Ptr<const Data> data, int8_t wireFormat/* = WIRE_FORMAT_DEFAULT*/)
 {
   if (wireFormat == WIRE_FORMAT_DEFAULT)
     wireFormat = GetWireFormat ();
@@ -129,7 +129,7 @@
     }
 }
 
-Ptr<ContentObject>
+Ptr<Data>
 Wire::ToData (Ptr<Packet> packet, int8_t wireFormat/* = WIRE_FORMAT_AUTODETECT*/)
 {
   if (wireFormat == WIRE_FORMAT_AUTODETECT)
@@ -198,7 +198,7 @@
 }
 
 std::string
-Wire::FromDataStr (Ptr<const ContentObject> data, int8_t wireFormat/* = WIRE_FORMAT_DEFAULT*/)
+Wire::FromDataStr (Ptr<const Data> data, int8_t wireFormat/* = WIRE_FORMAT_DEFAULT*/)
 {
   Ptr<Packet> pkt = FromData (data, wireFormat);
   std::string wire;
@@ -208,7 +208,7 @@
   return wire;
 }
 
-Ptr<ContentObject>
+Ptr<Data>
 Wire::ToDataStr (const std::string &wire, int8_t type/* = WIRE_FORMAT_AUTODETECT*/)
 {
   Ptr<Packet> pkt = Create<Packet> (reinterpret_cast<const uint8_t*> (&wire[0]), wire.size ());
diff --git a/model/wire/ndn-wire.h b/model/wire/ndn-wire.h
index 768ccea..1bfba3d 100644
--- a/model/wire/ndn-wire.h
+++ b/model/wire/ndn-wire.h
@@ -38,9 +38,9 @@
   ToInterest (Ptr<Packet> packet, int8_t type = WIRE_FORMAT_AUTODETECT);
 
   static Ptr<Packet>
-  FromData (Ptr<const ContentObject> data, int8_t wireFormat = WIRE_FORMAT_DEFAULT);
+  FromData (Ptr<const Data> data, int8_t wireFormat = WIRE_FORMAT_DEFAULT);
 
-  static Ptr<ContentObject>
+  static Ptr<Data>
   ToData (Ptr<Packet> packet, int8_t type = WIRE_FORMAT_AUTODETECT);
 
 
@@ -52,9 +52,9 @@
   ToInterestStr (const std::string &wire, int8_t type = WIRE_FORMAT_AUTODETECT);
 
   static std::string
-  FromDataStr (Ptr<const ContentObject> data, int8_t wireFormat = WIRE_FORMAT_DEFAULT);
+  FromDataStr (Ptr<const Data> data, int8_t wireFormat = WIRE_FORMAT_DEFAULT);
 
-  static Ptr<ContentObject>
+  static Ptr<Data>
   ToDataStr (const std::string &wire, int8_t type = WIRE_FORMAT_AUTODETECT);
 
   // /*
diff --git a/model/wire/ndnsim.cc b/model/wire/ndnsim.cc
index 1c2d778..f1bbaf5 100644
--- a/model/wire/ndnsim.cc
+++ b/model/wire/ndnsim.cc
@@ -215,29 +215,29 @@
   
 
 Data::Data ()
-  : m_data (Create<ndn::ContentObject> ())
+  : m_data (Create<ndn::Data> ())
 {
 }
 
-Data::Data (Ptr<ndn::ContentObject> data)
+Data::Data (Ptr<ndn::Data> data)
   : m_data (data)
 {
 }
 
-Ptr<ndn::ContentObject>
+Ptr<ndn::Data>
 Data::GetData ()
 {
   return m_data;
 }
 
 Ptr<Packet>
-Data::ToWire (Ptr<const ndn::ContentObject> data)
+Data::ToWire (Ptr<const ndn::Data> data)
 {
   Ptr<const Packet> p = data->GetWire ();
   if (!p)
     {
       Ptr<Packet> packet = Create<Packet> (*data->GetPayload ());
-      Data wireEncoding (ConstCast<ndn::ContentObject> (data));
+      Data wireEncoding (ConstCast<ndn::Data> (data));
       packet->AddHeader (wireEncoding);
       data->SetWire (packet);
 
@@ -247,10 +247,10 @@
   return p->Copy ();
 }
 
-Ptr<ndn::ContentObject>
+Ptr<ndn::Data>
 Data::FromWire (Ptr<Packet> packet)
 {
-  Ptr<ndn::ContentObject> data = Create<ndn::ContentObject> ();
+  Ptr<ndn::Data> data = Create<ndn::Data> ();
   data->SetWire (packet->Copy ());
 
   Data wireEncoding (data);
@@ -315,10 +315,10 @@
   Buffer::Iterator i = start;
 
   if (i.ReadU8 () != 0x80)
-    throw new ContentObjectException ();
+    throw new DataException ();
 
   if (i.ReadU8 () != 0x01)
-    throw new ContentObjectException ();
+    throw new DataException ();
 
   i.ReadU16 (); // length
 
@@ -326,36 +326,36 @@
   if (signatureLength == 6)
     {
       if (i.ReadU16 () != 0xFF00) // signature type
-        throw new ContentObjectException ();
+        throw new DataException ();
       m_data->SetSignature (i.ReadU32 ());
     }
   else if (signatureLength == 2)
     {
       if (i.ReadU16 () != 0) // signature type
-        throw new ContentObjectException ();
+        throw new DataException ();
       m_data->SetSignature (0);
     }
   else
-    throw new ContentObjectException ();
+    throw new DataException ();
 
   m_data->SetName (NdnSim::DeserializeName (i));
 
   if (i.ReadU16 () != (2 + 4 + 2 + 2 + (2 + 0))) // content length
-    throw new ContentObjectException ();
+    throw new DataException ();
 
   if (i.ReadU16 () != (4 + 2 + 2 + (2 + 0))) // Length (content Info)
-    throw new ContentObjectException ();
+    throw new DataException ();
 
   m_data->SetTimestamp (Seconds (i.ReadU32 ()));
   m_data->SetFreshness (Seconds (i.ReadU16 ()));
 
   if (i.ReadU16 () != 0) // Reserved
-    throw new ContentObjectException ();
+    throw new DataException ();
   if (i.ReadU16 () != 0) // Length (ContentInfoOptions)
-    throw new ContentObjectException ();
+    throw new DataException ();
 
   NS_ASSERT_MSG (i.GetDistanceFrom (start) == GetSerializedSize (),
-                 "Something wrong with ContentObject::Deserialize");
+                 "Something wrong with Data::Deserialize");
   
   return i.GetDistanceFrom (start);
 }
diff --git a/model/wire/ndnsim.h b/model/wire/ndnsim.h
index 417edba..f0be388 100644
--- a/model/wire/ndnsim.h
+++ b/model/wire/ndnsim.h
@@ -105,7 +105,7 @@
  *
  * @see http://ndnsim.net/new-packet-formats.html
  *
- *	ContentObject ::= Signature
+ *	Data ::= Signature
  *                	  Name
  *                   	  Content
  *
@@ -136,15 +136,15 @@
 {
 public:
   Data ();
-  Data (Ptr<ndn::ContentObject> data);
+  Data (Ptr<ndn::Data> data);
 
-  Ptr<ndn::ContentObject>
+  Ptr<ndn::Data>
   GetData ();
 
   static Ptr<Packet>
-  ToWire (Ptr<const ndn::ContentObject> data);
+  ToWire (Ptr<const ndn::Data> data);
 
-  static Ptr<ndn::ContentObject>
+  static Ptr<ndn::Data>
   FromWire (Ptr<Packet> packet);
   
   // from Header
@@ -156,7 +156,7 @@
   virtual uint32_t Deserialize (Buffer::Iterator start);
 
 private:
-  Ptr<ndn::ContentObject> m_data;  
+  Ptr<ndn::Data> m_data;  
 };
 
 } // ndnSIM
diff --git a/ndn.cxx/ndn-api-face.cc b/ndn.cxx/ndn-api-face.cc
index 578f424..6e8ba7f 100644
--- a/ndn.cxx/ndn-api-face.cc
+++ b/ndn.cxx/ndn-api-face.cc
@@ -154,7 +154,7 @@
 }
 
 void
-ApiFace::Put (Ptr<ContentObject> data)
+ApiFace::Put (Ptr<Data> data)
 {
   NS_LOG_INFO (">> D " << data->GetName ());
   
@@ -193,7 +193,7 @@
 }
 
 bool
-ApiFace::SendData (Ptr<const ContentObject> data)
+ApiFace::SendData (Ptr<const Data> data)
 {
   // data has been send out from NDN stack towards the application
   NS_LOG_DEBUG ("<< D " << data->GetName ());
diff --git a/ndn.cxx/ndn-api-face.h b/ndn.cxx/ndn-api-face.h
index ac735c9..4ff7a13 100644
--- a/ndn.cxx/ndn-api-face.h
+++ b/ndn.cxx/ndn-api-face.h
@@ -53,7 +53,7 @@
 {
 public:
   typedef Callback<void, Ptr<const Name>,     Ptr<const Interest> > InterestCallback;
-  typedef Callback<void, Ptr<const Interest>, Ptr<const ContentObject> > DataCallback;
+  typedef Callback<void, Ptr<const Interest>, Ptr<const Data> > DataCallback;
   typedef Callback<void, Ptr<const Interest> > TimeoutCallback;
 
   /**
@@ -103,14 +103,14 @@
    * @param data Data packet to publish
    */
   void
-  Put (Ptr<ContentObject> data);
+  Put (Ptr<Data> data);
 
 public:
   virtual bool
   SendInterest (Ptr<const Interest> interest);
 
   virtual bool
-  SendData (Ptr<const ContentObject> data);
+  SendData (Ptr<const Data> data);
 
   virtual std::ostream&
   Print (std::ostream &os) const;
diff --git a/plugins/ip-faces/ndn-ip-face-stack.h b/plugins/ip-faces/ndn-ip-face-stack.h
index ecb80b6..95ea73d 100644
--- a/plugins/ip-faces/ndn-ip-face-stack.h
+++ b/plugins/ip-faces/ndn-ip-face-stack.h
@@ -44,7 +44,7 @@
  * @ingroup ndn
  * @brief Application that provides functionality of creating IP-based faces on NDN nodes
  *
- * The class implements virtual calls onInterest, onNack, and onContentObject
+ * The class implements virtual calls onInterest, onNack, and onData
  */
 class IpFaceStack: public Object
 {
diff --git a/plugins/tracers-broken/tracers/ccnx-aggregate-app-tracer.cc b/plugins/tracers-broken/tracers/ccnx-aggregate-app-tracer.cc
index ffda6f8..a7f254b 100644
--- a/plugins/tracers-broken/tracers/ccnx-aggregate-app-tracer.cc
+++ b/plugins/tracers-broken/tracers/ccnx-aggregate-app-tracer.cc
@@ -135,7 +135,7 @@
 
 void
 CcnxAggregateAppTracer::OutData (std::string context,
-                                 Ptr<const CcnxContentObject> header, Ptr<const Packet> payload,
+                                 Ptr<const CcnxData> header, Ptr<const Packet> payload,
                                  Ptr<CcnxApp>, Ptr<CcnxFace>)
 {
   m_outData++;
@@ -162,7 +162,7 @@
   
 void
 CcnxAggregateAppTracer::InData (std::string context,
-                                Ptr<const CcnxContentObject> header, Ptr<const Packet> payload,
+                                Ptr<const CcnxData> header, Ptr<const Packet> payload,
                                 Ptr<CcnxApp>, Ptr<CcnxFace>)
 {
   m_inData++;
diff --git a/plugins/tracers-broken/tracers/ccnx-aggregate-app-tracer.h b/plugins/tracers-broken/tracers/ccnx-aggregate-app-tracer.h
index f5931f9..a0e52fb 100644
--- a/plugins/tracers-broken/tracers/ccnx-aggregate-app-tracer.h
+++ b/plugins/tracers-broken/tracers/ccnx-aggregate-app-tracer.h
@@ -52,11 +52,11 @@
 
   virtual void
   OutData (std::string context,
-           Ptr<const CcnxContentObject>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>);
+           Ptr<const CcnxData>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>);
   
   virtual void
   InData  (std::string context,
-           Ptr<const CcnxContentObject>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>);
+           Ptr<const CcnxData>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>);
 
 protected:
   void
diff --git a/plugins/tracers-broken/tracers/ccnx-aggregate-l3-tracer.cc b/plugins/tracers-broken/tracers/ccnx-aggregate-l3-tracer.cc
index 5a98610..030d308 100644
--- a/plugins/tracers-broken/tracers/ccnx-aggregate-l3-tracer.cc
+++ b/plugins/tracers-broken/tracers/ccnx-aggregate-l3-tracer.cc
@@ -173,7 +173,7 @@
 
 void
 CcnxAggregateL3Tracer::OutData  (std::string context,
-                                 Ptr<const CcnxContentObject> header, Ptr<const Packet> payload,
+                                 Ptr<const CcnxData> header, Ptr<const Packet> payload,
                                  bool fromCache, Ptr<const CcnxFace>)
 {
   m_packets.m_outData++;
@@ -182,7 +182,7 @@
 
 void
 CcnxAggregateL3Tracer::InData   (std::string context,
-                                 Ptr<const CcnxContentObject> header, Ptr<const Packet> payload,
+                                 Ptr<const CcnxData> header, Ptr<const Packet> payload,
                                  Ptr<const CcnxFace>)
 {
   m_packets.m_inData++;
@@ -191,7 +191,7 @@
 
 void
 CcnxAggregateL3Tracer::DropData (std::string context,
-                                 Ptr<const CcnxContentObject> header, Ptr<const Packet> payload,
+                                 Ptr<const CcnxData> header, Ptr<const Packet> payload,
                                  Ccnx::DropReason, Ptr<const CcnxFace>)
 {
   m_packets.m_dropData++;
diff --git a/plugins/tracers-broken/tracers/ccnx-aggregate-l3-tracer.h b/plugins/tracers-broken/tracers/ccnx-aggregate-l3-tracer.h
index f9ae117..f64062c 100644
--- a/plugins/tracers-broken/tracers/ccnx-aggregate-l3-tracer.h
+++ b/plugins/tracers-broken/tracers/ccnx-aggregate-l3-tracer.h
@@ -64,15 +64,15 @@
   
   virtual void
   OutData  (std::string context,
-            Ptr<const CcnxContentObject>, Ptr<const Packet>, bool fromCache, Ptr<const CcnxFace>);
+            Ptr<const CcnxData>, Ptr<const Packet>, bool fromCache, Ptr<const CcnxFace>);
 
   virtual void
   InData   (std::string context,
-            Ptr<const CcnxContentObject>, Ptr<const Packet>, Ptr<const CcnxFace>);
+            Ptr<const CcnxData>, Ptr<const Packet>, Ptr<const CcnxFace>);
 
   virtual void
   DropData (std::string context,
-            Ptr<const CcnxContentObject>, Ptr<const Packet>, Ccnx::DropReason, Ptr<const CcnxFace>);
+            Ptr<const CcnxData>, Ptr<const Packet>, Ccnx::DropReason, Ptr<const CcnxFace>);
 
 protected:
   void
diff --git a/plugins/tracers-broken/tracers/ccnx-app-tracer.cc b/plugins/tracers-broken/tracers/ccnx-app-tracer.cc
index a2bbbdd..879e48e 100644
--- a/plugins/tracers-broken/tracers/ccnx-app-tracer.cc
+++ b/plugins/tracers-broken/tracers/ccnx-app-tracer.cc
@@ -74,10 +74,10 @@
   Config::Connect ("/NodeList/"+m_node+"/ApplicationList/"+m_appId+"/$"+m_app+"/ReceivedInterests",
                    MakeCallback (&CcnxAppTracer::InInterests, this));
   
-  Config::Connect ("/NodeList/"+m_node+"/ApplicationList/"+m_appId+"/$"+m_app+"/TransmittedContentObjects",
+  Config::Connect ("/NodeList/"+m_node+"/ApplicationList/"+m_appId+"/$"+m_app+"/TransmittedDatas",
                    MakeCallback (&CcnxAppTracer::OutData, this));
 
-  Config::Connect ("/NodeList/"+m_node+"/ApplicationList/"+m_appId+"/$"+m_app+"/ReceivedContentObjects",
+  Config::Connect ("/NodeList/"+m_node+"/ApplicationList/"+m_appId+"/$"+m_app+"/ReceivedDatas",
                    MakeCallback (&CcnxAppTracer::InData, this));
 }
 
diff --git a/plugins/tracers-broken/tracers/ccnx-app-tracer.h b/plugins/tracers-broken/tracers/ccnx-app-tracer.h
index f642c1b..affb98b 100644
--- a/plugins/tracers-broken/tracers/ccnx-app-tracer.h
+++ b/plugins/tracers-broken/tracers/ccnx-app-tracer.h
@@ -59,11 +59,11 @@
 
   virtual void
   OutData (std::string context,
-           Ptr<const CcnxContentObject>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>) = 0;
+           Ptr<const CcnxData>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>) = 0;
   
   virtual void
   InData  (std::string context,
-           Ptr<const CcnxContentObject>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>) = 0;
+           Ptr<const CcnxData>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>) = 0;
 
 protected:
   std::string m_app;
diff --git a/plugins/tracers-broken/tracers/ccnx-l3-tracer.h b/plugins/tracers-broken/tracers/ccnx-l3-tracer.h
index 967c006..ae4cea1 100644
--- a/plugins/tracers-broken/tracers/ccnx-l3-tracer.h
+++ b/plugins/tracers-broken/tracers/ccnx-l3-tracer.h
@@ -72,15 +72,15 @@
   
   virtual void
   OutData  (std::string context,
-            Ptr<const CcnxContentObject>, Ptr<const Packet>, bool fromCache, Ptr<const CcnxFace>) = 0;
+            Ptr<const CcnxData>, Ptr<const Packet>, bool fromCache, Ptr<const CcnxFace>) = 0;
 
   virtual void
   InData   (std::string context,
-            Ptr<const CcnxContentObject>, Ptr<const Packet>, Ptr<const CcnxFace>) = 0;
+            Ptr<const CcnxData>, Ptr<const Packet>, Ptr<const CcnxFace>) = 0;
 
   virtual void
   DropData (std::string context,
-            Ptr<const CcnxContentObject>, Ptr<const Packet>, Ccnx::DropReason, Ptr<const CcnxFace>) = 0;
+            Ptr<const CcnxData>, Ptr<const Packet>, Ccnx::DropReason, Ptr<const CcnxFace>) = 0;
 
 protected:
   std::string m_node;
diff --git a/plugins/tracers-broken/tracers/ccnx-rate-l3-tracer.cc b/plugins/tracers-broken/tracers/ccnx-rate-l3-tracer.cc
index 80ac391..9d79d72 100644
--- a/plugins/tracers-broken/tracers/ccnx-rate-l3-tracer.cc
+++ b/plugins/tracers-broken/tracers/ccnx-rate-l3-tracer.cc
@@ -185,7 +185,7 @@
 
 void
 CcnxRateL3Tracer::OutData  (std::string context,
-                            Ptr<const CcnxContentObject> header, Ptr<const Packet> payload,
+                            Ptr<const CcnxData> header, Ptr<const Packet> payload,
                             bool fromCache, Ptr<const CcnxFace> face)
 {
   m_stats[face].get<0> ().m_inData ++;
@@ -194,7 +194,7 @@
 
 void
 CcnxRateL3Tracer::InData   (std::string context,
-                            Ptr<const CcnxContentObject> header, Ptr<const Packet> payload,
+                            Ptr<const CcnxData> header, Ptr<const Packet> payload,
                             Ptr<const CcnxFace> face)
 {
   m_stats[face].get<0> ().m_outData ++;
@@ -203,7 +203,7 @@
 
 void
 CcnxRateL3Tracer::DropData (std::string context,
-                            Ptr<const CcnxContentObject> header, Ptr<const Packet> payload,
+                            Ptr<const CcnxData> header, Ptr<const Packet> payload,
                             Ccnx::DropReason, Ptr<const CcnxFace> face)
 {
   m_stats[face].get<0> ().m_dropData ++;
diff --git a/plugins/tracers-broken/tracers/ccnx-rate-l3-tracer.h b/plugins/tracers-broken/tracers/ccnx-rate-l3-tracer.h
index d19a86d..a93a305 100644
--- a/plugins/tracers-broken/tracers/ccnx-rate-l3-tracer.h
+++ b/plugins/tracers-broken/tracers/ccnx-rate-l3-tracer.h
@@ -80,15 +80,15 @@
   
   virtual void
   OutData  (std::string context,
-            Ptr<const CcnxContentObject>, Ptr<const Packet>, bool fromCache, Ptr<const CcnxFace>);
+            Ptr<const CcnxData>, Ptr<const Packet>, bool fromCache, Ptr<const CcnxFace>);
 
   virtual void
   InData   (std::string context,
-            Ptr<const CcnxContentObject>, Ptr<const Packet>, Ptr<const CcnxFace>);
+            Ptr<const CcnxData>, Ptr<const Packet>, Ptr<const CcnxFace>);
 
   virtual void
   DropData (std::string context,
-            Ptr<const CcnxContentObject>, Ptr<const Packet>, Ccnx::DropReason, Ptr<const CcnxFace>);
+            Ptr<const CcnxData>, Ptr<const Packet>, Ccnx::DropReason, Ptr<const CcnxFace>);
 
 private:
   void
diff --git a/plugins/tracers-broken/tracers/ccnx-seqs-app-tracer.cc b/plugins/tracers-broken/tracers/ccnx-seqs-app-tracer.cc
index b8229b2..f974976 100644
--- a/plugins/tracers-broken/tracers/ccnx-seqs-app-tracer.cc
+++ b/plugins/tracers-broken/tracers/ccnx-seqs-app-tracer.cc
@@ -83,7 +83,7 @@
 
 void
 CcnxSeqsAppTracer::OutData (std::string context,
-                            Ptr<const CcnxContentObject> header, Ptr<const Packet>,
+                            Ptr<const CcnxData> header, Ptr<const Packet>,
                             Ptr<CcnxApp>, Ptr<CcnxFace>)
 {
   PRINTER ("OutData");
@@ -107,7 +107,7 @@
   
 void
 CcnxSeqsAppTracer::InData (std::string context,
-                           Ptr<const CcnxContentObject> header, Ptr<const Packet>,
+                           Ptr<const CcnxData> header, Ptr<const Packet>,
                            Ptr<CcnxApp>, Ptr<CcnxFace>)
 {
   PRINTER ("InData");
diff --git a/plugins/tracers-broken/tracers/ccnx-seqs-app-tracer.h b/plugins/tracers-broken/tracers/ccnx-seqs-app-tracer.h
index 59d992f..404c7a2 100644
--- a/plugins/tracers-broken/tracers/ccnx-seqs-app-tracer.h
+++ b/plugins/tracers-broken/tracers/ccnx-seqs-app-tracer.h
@@ -52,11 +52,11 @@
 
   virtual void
   OutData (std::string context,
-           Ptr<const CcnxContentObject>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>);
+           Ptr<const CcnxData>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>);
   
   virtual void
   InData  (std::string context,
-           Ptr<const CcnxContentObject>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>);
+           Ptr<const CcnxData>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>);
 
 protected:
   void
diff --git a/test/ndnSIM-api.cc b/test/ndnSIM-api.cc
index b472850..e1bd2aa 100644
--- a/test/ndnSIM-api.cc
+++ b/test/ndnSIM-api.cc
@@ -59,7 +59,7 @@
 
 private:
   void
-  GotData (Ptr<const ndn::Interest>, Ptr<const ndn::ContentObject>)
+  GotData (Ptr<const ndn::Interest>, Ptr<const ndn::Data>)
   {
     datas++;
   }
diff --git a/test/ndnSIM-serialization.cc b/test/ndnSIM-serialization.cc
index 70a10a7..fee40b1 100644
--- a/test/ndnSIM-serialization.cc
+++ b/test/ndnSIM-serialization.cc
@@ -98,9 +98,9 @@
 }
 
 void
-ContentObjectSerializationTest::DoRun ()
+DataSerializationTest::DoRun ()
 {
-  Ptr<ContentObject> source = Create<ContentObject> (Create<Packet> (1024));
+  Ptr<Data> source = Create<Data> (Create<Packet> (1024));
   
   source->SetName (Create<Name> (boost::lexical_cast<Name> ("/test/test2/1")));
   NS_TEST_ASSERT_MSG_EQ (source->GetName (), boost::lexical_cast<Name> ("/test/test2/1"), "set/get name failed");
@@ -122,7 +122,7 @@
   packet = wire::ndnSIM::Data::ToWire (source);
   NS_TEST_ASSERT_MSG_EQ (packet->GetSize (), static_cast<unsigned int> (size + 4), "Signature size should have increased by 4");
 
-  Ptr<ContentObject> target = wire::ndnSIM::Data::FromWire (packet);
+  Ptr<Data> target = wire::ndnSIM::Data::FromWire (packet);
   
   NS_TEST_ASSERT_MSG_EQ (source->GetName ()     , target->GetName ()     , "source/target name failed");
   NS_TEST_ASSERT_MSG_EQ (source->GetFreshness (), target->GetFreshness (), "source/target freshness failed");
diff --git a/test/ndnSIM-serialization.h b/test/ndnSIM-serialization.h
index ff52fd2..6d2015b 100644
--- a/test/ndnSIM-serialization.h
+++ b/test/ndnSIM-serialization.h
@@ -39,11 +39,11 @@
   virtual void DoRun ();
 };
 
-class ContentObjectSerializationTest : public TestCase
+class DataSerializationTest : public TestCase
 {
 public:
-  ContentObjectSerializationTest ()
-    : TestCase ("ContentObject Serialization Test")
+  DataSerializationTest ()
+    : TestCase ("Data Serialization Test")
   {
   }
     
diff --git a/test/ndnSIM-tests.cc b/test/ndnSIM-tests.cc
index face35e..c6b4d6e 100644
--- a/test/ndnSIM-tests.cc
+++ b/test/ndnSIM-tests.cc
@@ -38,7 +38,7 @@
     SetDataDir (NS_TEST_SOURCEDIR);
 
     AddTestCase (new InterestSerializationTest (), TestCase::QUICK);
-    AddTestCase (new ContentObjectSerializationTest (), TestCase::QUICK);
+    AddTestCase (new DataSerializationTest (), TestCase::QUICK);
     AddTestCase (new FibEntryTest (), TestCase::QUICK);
     AddTestCase (new PitTest (), TestCase::QUICK);
     AddTestCase (new ApiTest (), TestCase::QUICK);
diff --git a/utils/tracers/ndn-cs-tracer.cc b/utils/tracers/ndn-cs-tracer.cc
index 10b7448..bf7df69 100644
--- a/utils/tracers/ndn-cs-tracer.cc
+++ b/utils/tracers/ndn-cs-tracer.cc
@@ -276,7 +276,7 @@
 }
 
 void 
-CsTracer::CacheHits (Ptr<const Interest>, Ptr<const ContentObject>)
+CsTracer::CacheHits (Ptr<const Interest>, Ptr<const Data>)
 {
   m_stats.m_cacheHits ++;
 }
diff --git a/utils/tracers/ndn-cs-tracer.h b/utils/tracers/ndn-cs-tracer.h
index 906e85a..fc8e0fc 100644
--- a/utils/tracers/ndn-cs-tracer.h
+++ b/utils/tracers/ndn-cs-tracer.h
@@ -41,10 +41,10 @@
 namespace ndn {
 
 class Interest;
-class ContentObject;
+class Data;
 
 typedef Interest InterestHeader;
-typedef ContentObject ContentObjectHeader;
+typedef Data DataHeader;
 
 namespace cs {
 
@@ -164,7 +164,7 @@
   Connect ();
 
   void 
-  CacheHits (Ptr<const Interest>, Ptr<const ContentObject>);
+  CacheHits (Ptr<const Interest>, Ptr<const Data>);
   
   void 
   CacheMisses (Ptr<const Interest>);
diff --git a/utils/tracers/ndn-l3-aggregate-tracer.cc b/utils/tracers/ndn-l3-aggregate-tracer.cc
index d1150ae..050e63b 100644
--- a/utils/tracers/ndn-l3-aggregate-tracer.cc
+++ b/utils/tracers/ndn-l3-aggregate-tracer.cc
@@ -358,7 +358,7 @@
 }
 
 void
-L3AggregateTracer::OutData  (Ptr<const ContentObject> data, 
+L3AggregateTracer::OutData  (Ptr<const Data> data, 
                              bool fromCache, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outData ++;
@@ -369,7 +369,7 @@
 }
 
 void
-L3AggregateTracer::InData   (Ptr<const ContentObject> data, 
+L3AggregateTracer::InData   (Ptr<const Data> data, 
                              Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inData ++;
@@ -380,7 +380,7 @@
 }
 
 void
-L3AggregateTracer::DropData (Ptr<const ContentObject> data, 
+L3AggregateTracer::DropData (Ptr<const Data> data, 
                              Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_dropData ++;
diff --git a/utils/tracers/ndn-l3-aggregate-tracer.h b/utils/tracers/ndn-l3-aggregate-tracer.h
index fdbf23c..ca6b35a 100644
--- a/utils/tracers/ndn-l3-aggregate-tracer.h
+++ b/utils/tracers/ndn-l3-aggregate-tracer.h
@@ -142,13 +142,13 @@
   DropNacks (Ptr<const Interest>, Ptr<const Face>);
 
   virtual void
-  OutData  (Ptr<const ContentObject>, bool fromCache, Ptr<const Face>);
+  OutData  (Ptr<const Data>, bool fromCache, Ptr<const Face>);
 
   virtual void
-  InData   (Ptr<const ContentObject>, Ptr<const Face>);
+  InData   (Ptr<const Data>, Ptr<const Face>);
 
   virtual void
-  DropData (Ptr<const ContentObject>, Ptr<const Face>);
+  DropData (Ptr<const Data>, Ptr<const Face>);
 
 
   virtual void
diff --git a/utils/tracers/ndn-l3-rate-tracer.cc b/utils/tracers/ndn-l3-rate-tracer.cc
index 8f91f6f..3d9a1f4 100644
--- a/utils/tracers/ndn-l3-rate-tracer.cc
+++ b/utils/tracers/ndn-l3-rate-tracer.cc
@@ -375,7 +375,7 @@
 }
 
 void
-L3RateTracer::OutData  (Ptr<const ContentObject> data,
+L3RateTracer::OutData  (Ptr<const Data> data,
                         bool fromCache, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outData ++;
@@ -386,7 +386,7 @@
 }
 
 void
-L3RateTracer::InData   (Ptr<const ContentObject> data,
+L3RateTracer::InData   (Ptr<const Data> data,
                         Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inData ++;
@@ -397,7 +397,7 @@
 }
 
 void
-L3RateTracer::DropData (Ptr<const ContentObject> data,
+L3RateTracer::DropData (Ptr<const Data> data,
                         Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_dropData ++;
diff --git a/utils/tracers/ndn-l3-rate-tracer.h b/utils/tracers/ndn-l3-rate-tracer.h
index 9df79b1..d2f965b 100644
--- a/utils/tracers/ndn-l3-rate-tracer.h
+++ b/utils/tracers/ndn-l3-rate-tracer.h
@@ -144,13 +144,13 @@
   DropNacks (Ptr<const Interest>, Ptr<const Face>);
 
   virtual void
-  OutData  (Ptr<const ContentObject>, bool fromCache, Ptr<const Face>);
+  OutData  (Ptr<const Data>, bool fromCache, Ptr<const Face>);
 
   virtual void
-  InData   (Ptr<const ContentObject>, Ptr<const Face>);
+  InData   (Ptr<const Data>, Ptr<const Face>);
 
   virtual void
-  DropData (Ptr<const ContentObject>, Ptr<const Face>);
+  DropData (Ptr<const Data>, Ptr<const Face>);
 
   virtual void
   SatisfiedInterests (Ptr<const pit::Entry>);
diff --git a/utils/tracers/ndn-l3-tracer.h b/utils/tracers/ndn-l3-tracer.h
index ee525ed..2f132bd 100644
--- a/utils/tracers/ndn-l3-tracer.h
+++ b/utils/tracers/ndn-l3-tracer.h
@@ -43,7 +43,7 @@
 class Face;
 
 class Interest;
-class ContentObject;
+class Data;
 
 /**
  * @ingroup ndn-tracers
@@ -109,13 +109,13 @@
 
 
   virtual void
-  OutData  (Ptr<const ContentObject>, bool fromCache, Ptr<const Face>) = 0;
+  OutData  (Ptr<const Data>, bool fromCache, Ptr<const Face>) = 0;
 
   virtual void
-  InData   (Ptr<const ContentObject>, Ptr<const Face>) = 0;
+  InData   (Ptr<const Data>, Ptr<const Face>) = 0;
 
   virtual void
-  DropData (Ptr<const ContentObject>, Ptr<const Face>) = 0;
+  DropData (Ptr<const Data>, Ptr<const Face>) = 0;
 
   virtual void
   SatisfiedInterests (Ptr<const pit::Entry>) = 0;
