diff --git a/utils/tracers/ndn-cs-tracer.cc b/utils/tracers/ndn-cs-tracer.cc
index 2200665..80afe64 100644
--- a/utils/tracers/ndn-cs-tracer.cc
+++ b/utils/tracers/ndn-cs-tracer.cc
@@ -173,13 +173,13 @@
 }
 
 void 
-CsTracer::CacheHits (Ptr<const InterestHeader>, Ptr<const ContentObjectHeader>)
+CsTracer::CacheHits (Ptr<const Interest>, Ptr<const ContentObject>)
 {
   m_stats.m_cacheHits ++;
 }
 
 void 
-CsTracer::CacheMisses (Ptr<const InterestHeader>)
+CsTracer::CacheMisses (Ptr<const Interest>)
 {
   m_stats.m_cacheMisses ++;
 }
diff --git a/utils/tracers/ndn-cs-tracer.h b/utils/tracers/ndn-cs-tracer.h
index b52de9c..ff5fc89 100644
--- a/utils/tracers/ndn-cs-tracer.h
+++ b/utils/tracers/ndn-cs-tracer.h
@@ -39,8 +39,8 @@
 
 namespace ndn {
 
-class InterestHeader;
-class ContentObjectHeader;
+class Interest;
+class ContentObject;
 
 namespace cs {
 
@@ -117,10 +117,10 @@
   Connect ();
 
   void 
-  CacheHits (Ptr<const InterestHeader>, Ptr<const ContentObjectHeader>);
+  CacheHits (Ptr<const Interest>, Ptr<const ContentObject>);
   
   void 
-  CacheMisses (Ptr<const InterestHeader>);
+  CacheMisses (Ptr<const Interest>);
 
 private:
   void
diff --git a/utils/tracers/ndn-l3-aggregate-tracer.cc b/utils/tracers/ndn-l3-aggregate-tracer.cc
index 35b85ec..2152b1d 100644
--- a/utils/tracers/ndn-l3-aggregate-tracer.cc
+++ b/utils/tracers/ndn-l3-aggregate-tracer.cc
@@ -174,7 +174,7 @@
 
 void
 L3AggregateTracer::OutInterests  (std::string context,
-                                  Ptr<const InterestHeader> header, Ptr<const Face> face)
+                                  Ptr<const Interest> header, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outInterests ++;
   m_stats[face].get<1> ().m_outInterests += header->GetSerializedSize ();
@@ -182,7 +182,7 @@
 
 void
 L3AggregateTracer::InInterests   (std::string context,
-                                  Ptr<const InterestHeader> header, Ptr<const Face> face)
+                                  Ptr<const Interest> header, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inInterests ++;
   m_stats[face].get<1> ().m_inInterests += header->GetSerializedSize ();
@@ -190,7 +190,7 @@
 
 void
 L3AggregateTracer::DropInterests (std::string context,
-                                  Ptr<const InterestHeader> header, Ptr<const Face> face)
+                                  Ptr<const Interest> header, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_dropInterests ++;
   m_stats[face].get<1> ().m_dropInterests += header->GetSerializedSize ();
@@ -198,7 +198,7 @@
 
 void
 L3AggregateTracer::OutNacks  (std::string context,
-                              Ptr<const InterestHeader> header, Ptr<const Face> face)
+                              Ptr<const Interest> header, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outNacks ++;
   m_stats[face].get<1> ().m_outNacks += header->GetSerializedSize ();
@@ -206,7 +206,7 @@
 
 void
 L3AggregateTracer::InNacks   (std::string context,
-                              Ptr<const InterestHeader> header, Ptr<const Face> face)
+                              Ptr<const Interest> header, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inNacks ++;
   m_stats[face].get<1> ().m_inNacks += header->GetSerializedSize ();
@@ -214,7 +214,7 @@
 
 void
 L3AggregateTracer::DropNacks (std::string context,
-                              Ptr<const InterestHeader> header, Ptr<const Face> face)
+                              Ptr<const Interest> header, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_dropNacks ++;
   m_stats[face].get<1> ().m_dropNacks += header->GetSerializedSize ();
@@ -222,7 +222,7 @@
 
 void
 L3AggregateTracer::OutData  (std::string context,
-                             Ptr<const ContentObjectHeader> header, Ptr<const Packet> payload,
+                             Ptr<const ContentObject> header, Ptr<const Packet> payload,
                              bool fromCache, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outData ++;
@@ -231,7 +231,7 @@
 
 void
 L3AggregateTracer::InData   (std::string context,
-                             Ptr<const ContentObjectHeader> header, Ptr<const Packet> payload,
+                             Ptr<const ContentObject> header, Ptr<const Packet> payload,
                              Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inData ++;
@@ -240,7 +240,7 @@
 
 void
 L3AggregateTracer::DropData (std::string context,
-                             Ptr<const ContentObjectHeader> header, Ptr<const Packet> payload,
+                             Ptr<const ContentObject> header, Ptr<const Packet> payload,
                              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 a04df67..c3f437b 100644
--- a/utils/tracers/ndn-l3-aggregate-tracer.h
+++ b/utils/tracers/ndn-l3-aggregate-tracer.h
@@ -83,39 +83,39 @@
 
   virtual void
   OutInterests  (std::string context,
-                 Ptr<const InterestHeader>, Ptr<const Face>);
+                 Ptr<const Interest>, Ptr<const Face>);
 
   virtual void
   InInterests   (std::string context,
-                 Ptr<const InterestHeader>, Ptr<const Face>);
+                 Ptr<const Interest>, Ptr<const Face>);
 
   virtual void
   DropInterests (std::string context,
-                 Ptr<const InterestHeader>, Ptr<const Face>);
+                 Ptr<const Interest>, Ptr<const Face>);
   
   virtual void
   OutNacks  (std::string context,
-             Ptr<const InterestHeader>, Ptr<const Face>);
+             Ptr<const Interest>, Ptr<const Face>);
 
   virtual void
   InNacks   (std::string context,
-             Ptr<const InterestHeader>, Ptr<const Face>);
+             Ptr<const Interest>, Ptr<const Face>);
 
   virtual void
   DropNacks (std::string context,
-             Ptr<const InterestHeader>, Ptr<const Face>);
+             Ptr<const Interest>, Ptr<const Face>);
   
   virtual void
   OutData  (std::string context,
-            Ptr<const ContentObjectHeader>, Ptr<const Packet>, bool fromCache, Ptr<const Face>);
+            Ptr<const ContentObject>, Ptr<const Packet>, bool fromCache, Ptr<const Face>);
 
   virtual void
   InData   (std::string context,
-            Ptr<const ContentObjectHeader>, Ptr<const Packet>, Ptr<const Face>);
+            Ptr<const ContentObject>, Ptr<const Packet>, Ptr<const Face>);
 
   virtual void
   DropData (std::string context,
-            Ptr<const ContentObjectHeader>, Ptr<const Packet>, Ptr<const Face>);
+            Ptr<const ContentObject>, Ptr<const Packet>, Ptr<const Face>);
 
 protected:
   void
diff --git a/utils/tracers/ndn-l3-rate-tracer.cc b/utils/tracers/ndn-l3-rate-tracer.cc
index f588503..df76a22 100644
--- a/utils/tracers/ndn-l3-rate-tracer.cc
+++ b/utils/tracers/ndn-l3-rate-tracer.cc
@@ -185,7 +185,7 @@
 
 void
 L3RateTracer::OutInterests  (std::string context,
-                             Ptr<const InterestHeader> header, Ptr<const Face> face)
+                             Ptr<const Interest> header, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outInterests ++;
   m_stats[face].get<1> ().m_outInterests += header->GetSerializedSize ();
@@ -193,7 +193,7 @@
 
 void
 L3RateTracer::InInterests   (std::string context,
-                             Ptr<const InterestHeader> header, Ptr<const Face> face)
+                             Ptr<const Interest> header, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inInterests ++;
   m_stats[face].get<1> ().m_inInterests += header->GetSerializedSize ();
@@ -201,7 +201,7 @@
 
 void
 L3RateTracer::DropInterests (std::string context,
-                             Ptr<const InterestHeader> header, Ptr<const Face> face)
+                             Ptr<const Interest> header, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_dropInterests ++;
   m_stats[face].get<1> ().m_dropInterests += header->GetSerializedSize ();
@@ -209,7 +209,7 @@
 
 void
 L3RateTracer::OutNacks  (std::string context,
-                         Ptr<const InterestHeader> header, Ptr<const Face> face)
+                         Ptr<const Interest> header, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outNacks ++;
   m_stats[face].get<1> ().m_outNacks += header->GetSerializedSize ();
@@ -217,7 +217,7 @@
 
 void
 L3RateTracer::InNacks   (std::string context,
-                         Ptr<const InterestHeader> header, Ptr<const Face> face)
+                         Ptr<const Interest> header, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inNacks ++;
   m_stats[face].get<1> ().m_inNacks += header->GetSerializedSize ();
@@ -225,7 +225,7 @@
 
 void
 L3RateTracer::DropNacks (std::string context,
-                         Ptr<const InterestHeader> header, Ptr<const Face> face)
+                         Ptr<const Interest> header, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_dropNacks ++;
   m_stats[face].get<1> ().m_dropNacks += header->GetSerializedSize ();
@@ -233,7 +233,7 @@
 
 void
 L3RateTracer::OutData  (std::string context,
-                        Ptr<const ContentObjectHeader> header, Ptr<const Packet> payload,
+                        Ptr<const ContentObject> header, Ptr<const Packet> payload,
                         bool fromCache, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outData ++;
@@ -242,7 +242,7 @@
 
 void
 L3RateTracer::InData   (std::string context,
-                        Ptr<const ContentObjectHeader> header, Ptr<const Packet> payload,
+                        Ptr<const ContentObject> header, Ptr<const Packet> payload,
                         Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inData ++;
@@ -251,7 +251,7 @@
 
 void
 L3RateTracer::DropData (std::string context,
-                        Ptr<const ContentObjectHeader> header, Ptr<const Packet> payload,
+                        Ptr<const ContentObject> header, Ptr<const Packet> payload,
                         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 791d953..b1c52a0 100644
--- a/utils/tracers/ndn-l3-rate-tracer.h
+++ b/utils/tracers/ndn-l3-rate-tracer.h
@@ -85,39 +85,39 @@
   // from L3Tracer
   virtual void
   OutInterests  (std::string context,
-                 Ptr<const InterestHeader>, Ptr<const Face>);
+                 Ptr<const Interest>, Ptr<const Face>);
 
   virtual void
   InInterests   (std::string context,
-                 Ptr<const InterestHeader>, Ptr<const Face>);
+                 Ptr<const Interest>, Ptr<const Face>);
 
   virtual void
   DropInterests (std::string context,
-                 Ptr<const InterestHeader>, Ptr<const Face>);
+                 Ptr<const Interest>, Ptr<const Face>);
   
   virtual void
   OutNacks  (std::string context,
-             Ptr<const InterestHeader>, Ptr<const Face>);
+             Ptr<const Interest>, Ptr<const Face>);
 
   virtual void
   InNacks   (std::string context,
-             Ptr<const InterestHeader>, Ptr<const Face>);
+             Ptr<const Interest>, Ptr<const Face>);
 
   virtual void
   DropNacks (std::string context,
-             Ptr<const InterestHeader>, Ptr<const Face>);
+             Ptr<const Interest>, Ptr<const Face>);
   
   virtual void
   OutData  (std::string context,
-            Ptr<const ContentObjectHeader>, Ptr<const Packet>, bool fromCache, Ptr<const Face>);
+            Ptr<const ContentObject>, Ptr<const Packet>, bool fromCache, Ptr<const Face>);
 
   virtual void
   InData   (std::string context,
-            Ptr<const ContentObjectHeader>, Ptr<const Packet>, Ptr<const Face>);
+            Ptr<const ContentObject>, Ptr<const Packet>, Ptr<const Face>);
 
   virtual void
   DropData (std::string context,
-            Ptr<const ContentObjectHeader>, Ptr<const Packet>, Ptr<const Face>);
+            Ptr<const ContentObject>, Ptr<const Packet>, Ptr<const Face>);
 
 private:
   void
diff --git a/utils/tracers/ndn-l3-tracer.h b/utils/tracers/ndn-l3-tracer.h
index 625f9e1..13c2630 100644
--- a/utils/tracers/ndn-l3-tracer.h
+++ b/utils/tracers/ndn-l3-tracer.h
@@ -31,9 +31,9 @@
 
 namespace ndn {
 
-class InterestHeader;
+class Interest;
 class Face;
-class ContentObjectHeader;
+class ContentObject;
 
 /**
  * @brief Base class for network-layer (incoming/outgoing Interests and Data) tracing of NDN stack
@@ -80,40 +80,40 @@
   
   virtual void
   OutInterests  (std::string context,
-                 Ptr<const InterestHeader>, Ptr<const Face>) = 0;
+                 Ptr<const Interest>, Ptr<const Face>) = 0;
 
   virtual void
   InInterests   (std::string context,
-                 Ptr<const InterestHeader>, Ptr<const Face>) = 0;
+                 Ptr<const Interest>, Ptr<const Face>) = 0;
 
   virtual void
   DropInterests (std::string context,
-                 Ptr<const InterestHeader>, Ptr<const Face>) = 0;
+                 Ptr<const Interest>, Ptr<const Face>) = 0;
   
   virtual void
   OutNacks  (std::string context,
-             Ptr<const InterestHeader>, Ptr<const Face>) = 0;
+             Ptr<const Interest>, Ptr<const Face>) = 0;
 
   virtual void
   InNacks   (std::string context,
-             Ptr<const InterestHeader>, Ptr<const Face>) = 0;
+             Ptr<const Interest>, Ptr<const Face>) = 0;
 
   virtual void
   DropNacks (std::string context,
-             Ptr<const InterestHeader>, Ptr<const Face>) = 0;
+             Ptr<const Interest>, Ptr<const Face>) = 0;
 
   
   virtual void
   OutData  (std::string context,
-            Ptr<const ContentObjectHeader>, Ptr<const Packet>, bool fromCache, Ptr<const Face>) = 0;
+            Ptr<const ContentObject>, Ptr<const Packet>, bool fromCache, Ptr<const Face>) = 0;
 
   virtual void
   InData   (std::string context,
-            Ptr<const ContentObjectHeader>, Ptr<const Packet>, Ptr<const Face>) = 0;
+            Ptr<const ContentObject>, Ptr<const Packet>, Ptr<const Face>) = 0;
 
   virtual void
   DropData (std::string context,
-            Ptr<const ContentObjectHeader>, Ptr<const Packet>, Ptr<const Face>) = 0;
+            Ptr<const ContentObject>, Ptr<const Packet>, Ptr<const Face>) = 0;
 
 protected:
   std::string m_node;
