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
