diff --git a/model/fw/best-route.cc b/model/fw/best-route.cc
index 08bbd7c..59f8720 100644
--- a/model/fw/best-route.cc
+++ b/model/fw/best-route.cc
@@ -65,7 +65,7 @@
 
 bool
 BestRoute::DoPropagateInterest (Ptr<Face> inFace,
-                                Ptr<const InterestHeader> header,
+                                Ptr<const Interest> header,
                                 Ptr<const Packet> origPacket,
                                 Ptr<pit::Entry> pitEntry)
 {
diff --git a/model/fw/best-route.h b/model/fw/best-route.h
index 6e17b99..f7caa19 100644
--- a/model/fw/best-route.h
+++ b/model/fw/best-route.h
@@ -58,7 +58,7 @@
   // from super
   virtual bool
   DoPropagateInterest (Ptr<Face> incomingFace,
-                       Ptr<const InterestHeader> header,
+                       Ptr<const Interest> header,
                        Ptr<const Packet> origPacket,
                        Ptr<pit::Entry> pitEntry);
 protected:
diff --git a/model/fw/flooding.cc b/model/fw/flooding.cc
index 0c369b7..3672b24 100644
--- a/model/fw/flooding.cc
+++ b/model/fw/flooding.cc
@@ -66,7 +66,7 @@
 
 bool
 Flooding::DoPropagateInterest (Ptr<Face> inFace,
-                               Ptr<const InterestHeader> header,
+                               Ptr<const Interest> header,
                                Ptr<const Packet> origPacket,
                                Ptr<pit::Entry> pitEntry)
 {
diff --git a/model/fw/flooding.h b/model/fw/flooding.h
index c4f6205..5eadabb 100644
--- a/model/fw/flooding.h
+++ b/model/fw/flooding.h
@@ -60,7 +60,7 @@
   // inherited from  Nacks/ForwardingStrategy
   virtual bool
   DoPropagateInterest (Ptr<Face> inFace,
-                       Ptr<const InterestHeader> header,
+                       Ptr<const Interest> header,
                        Ptr<const Packet> origPacket,
                        Ptr<pit::Entry> pitEntry);
 
diff --git a/model/fw/green-yellow-red.cc b/model/fw/green-yellow-red.cc
index 3b5fd13..5d6a001 100644
--- a/model/fw/green-yellow-red.cc
+++ b/model/fw/green-yellow-red.cc
@@ -64,7 +64,7 @@
 
 bool
 GreenYellowRed::DoPropagateInterest (Ptr<Face> inFace,
-                                     Ptr<const InterestHeader> header,
+                                     Ptr<const Interest> header,
                                      Ptr<const Packet> origPacket,
                                      Ptr<pit::Entry> pitEntry)
 {
@@ -123,15 +123,15 @@
 void
 GreenYellowRed::DidReceiveValidNack (Ptr<Face> inFace,
                                      uint32_t nackCode,
-                                     Ptr<const InterestHeader> header,
+                                     Ptr<const Interest> header,
                                      Ptr<const Packet> origPacket,
                                      Ptr<pit::Entry> pitEntry)
 {
   super::DidReceiveValidNack (inFace, nackCode, header, origPacket, pitEntry);
 
   if (inFace != 0 &&
-      (nackCode == InterestHeader::NACK_CONGESTION ||
-       nackCode == InterestHeader::NACK_GIVEUP_PIT))
+      (nackCode == Interest::NACK_CONGESTION ||
+       nackCode == Interest::NACK_GIVEUP_PIT))
     {
       pitEntry->GetFibEntry ()->UpdateStatus (inFace, fib::FaceMetric::NDN_FIB_YELLOW);
     }
diff --git a/model/fw/green-yellow-red.h b/model/fw/green-yellow-red.h
index e82c93b..1c4dcde 100644
--- a/model/fw/green-yellow-red.h
+++ b/model/fw/green-yellow-red.h
@@ -44,7 +44,7 @@
 
   virtual bool
   DoPropagateInterest (Ptr<Face> inFace,
-                       Ptr<const InterestHeader> header,
+                       Ptr<const Interest> header,
                        Ptr<const Packet> origPacket,
                        Ptr<pit::Entry> pitEntry);
 
@@ -54,7 +54,7 @@
   virtual void
   DidReceiveValidNack (Ptr<Face> incomingFace,
                        uint32_t nackCode,
-                       Ptr<const InterestHeader> header,
+                       Ptr<const Interest> header,
                        Ptr<const Packet> origPacket,
                        Ptr<pit::Entry> pitEntry);
 private:
diff --git a/model/fw/nacks.cc b/model/fw/nacks.cc
index 00bf840..6bafefb 100644
--- a/model/fw/nacks.cc
+++ b/model/fw/nacks.cc
@@ -75,7 +75,7 @@
 
 void
 Nacks::OnInterest (Ptr<Face> inFace,
-                   Ptr<const InterestHeader> header,
+                   Ptr<const Interest> header,
                    Ptr<const Packet> origPacket)
 {
   if (header->GetNack () > 0)
@@ -86,7 +86,7 @@
 
 void
 Nacks::OnNack (Ptr<Face> inFace,
-               Ptr<const InterestHeader> header,
+               Ptr<const Interest> header,
                Ptr<const Packet> origPacket)
 {
   // NS_LOG_FUNCTION (inFace << header->GetName ());
@@ -105,7 +105,7 @@
 
 void
 Nacks::DidReceiveDuplicateInterest (Ptr<Face> inFace,
-                                    Ptr<const InterestHeader> header,
+                                    Ptr<const Interest> header,
                                     Ptr<const Packet> origPacket,
                                     Ptr<pit::Entry> pitEntry)
 {
@@ -114,8 +114,8 @@
   if (m_nacksEnabled)
     {
       NS_LOG_DEBUG ("Sending NACK_LOOP");
-      Ptr<InterestHeader> nackHeader = Create<InterestHeader> (*header);
-      nackHeader->SetNack (InterestHeader::NACK_LOOP);
+      Ptr<Interest> nackHeader = Create<Interest> (*header);
+      nackHeader->SetNack (Interest::NACK_LOOP);
       Ptr<Packet> nack = Create<Packet> ();
       nack->AddHeader (*nackHeader);
 
@@ -136,15 +136,15 @@
 
 void
 Nacks::DidExhaustForwardingOptions (Ptr<Face> inFace,
-                                    Ptr<const InterestHeader> header,
+                                    Ptr<const Interest> header,
                                     Ptr<const Packet> origPacket,
                                     Ptr<pit::Entry> pitEntry)
 {
   if (m_nacksEnabled)
     {
       Ptr<Packet> packet = Create<Packet> ();
-      Ptr<InterestHeader> nackHeader = Create<InterestHeader> (*header);
-      nackHeader->SetNack (InterestHeader::NACK_GIVEUP_PIT);
+      Ptr<Interest> nackHeader = Create<Interest> (*header);
+      nackHeader->SetNack (Interest::NACK_GIVEUP_PIT);
       packet->AddHeader (*nackHeader);
 
       FwHopCountTag hopCountTag;
@@ -174,7 +174,7 @@
 void
 Nacks::DidReceiveValidNack (Ptr<Face> inFace,
                             uint32_t nackCode,
-                            Ptr<const InterestHeader> header,
+                            Ptr<const Interest> header,
                             Ptr<const Packet> origPacket,
                             Ptr<pit::Entry> pitEntry)
 {
@@ -182,14 +182,14 @@
 
   // If NACK is NACK_GIVEUP_PIT, then neighbor gave up trying to and removed it's PIT entry.
   // So, if we had an incoming entry to this neighbor, then we can remove it now
-  if (nackCode == InterestHeader::NACK_GIVEUP_PIT)
+  if (nackCode == Interest::NACK_GIVEUP_PIT)
     {
       pitEntry->RemoveIncoming (inFace);
     }
 
-  if (nackCode == InterestHeader::NACK_LOOP ||
-      nackCode == InterestHeader::NACK_CONGESTION ||
-      nackCode == InterestHeader::NACK_GIVEUP_PIT)
+  if (nackCode == Interest::NACK_LOOP ||
+      nackCode == Interest::NACK_CONGESTION ||
+      nackCode == Interest::NACK_GIVEUP_PIT)
     {
       pitEntry->SetWaitingInVain (inFace);
 
@@ -203,8 +203,8 @@
         }
 
       Ptr<Packet> nonNackInterest = Create<Packet> ();
-      Ptr<InterestHeader> nonNackHeader = Create<InterestHeader> (*header);
-      nonNackHeader->SetNack (InterestHeader::NORMAL_INTEREST);
+      Ptr<Interest> nonNackHeader = Create<Interest> (*header);
+      nonNackHeader->SetNack (Interest::NORMAL_INTEREST);
       nonNackInterest->AddHeader (*nonNackHeader);
 
       FwHopCountTag hopCountTag;
diff --git a/model/fw/nacks.h b/model/fw/nacks.h
index 421897b..19a9ecb 100644
--- a/model/fw/nacks.h
+++ b/model/fw/nacks.h
@@ -43,46 +43,46 @@
   // from super
   virtual void
   OnInterest (Ptr<Face> face,
-              Ptr<const InterestHeader> header,
+              Ptr<const Interest> header,
               Ptr<const Packet> origPacket);
 
 protected:
   // from super
   virtual void
   DidReceiveDuplicateInterest (Ptr<Face> inFace,
-                               Ptr<const InterestHeader> header,
+                               Ptr<const Interest> header,
                                Ptr<const Packet> packet,
                                Ptr<pit::Entry> pitEntry);
 
   // from super
   virtual void
   DidExhaustForwardingOptions (Ptr<Face> inFace,
-                               Ptr<const InterestHeader> header,
+                               Ptr<const Interest> header,
                                Ptr<const Packet> packet,
                                Ptr<pit::Entry> pitEntry);
 
   virtual void
   OnNack (Ptr<Face> inFace,
-          Ptr<const InterestHeader> header,
+          Ptr<const Interest> header,
           Ptr<const Packet> origPacket);
 
   virtual void
   DidReceiveValidNack (Ptr<Face> inFace,
                        uint32_t nackCode,
-                       Ptr<const InterestHeader> header,
+                       Ptr<const Interest> header,
                        Ptr<const Packet> origPacket,
                        Ptr<pit::Entry> pitEntry);
   
 protected:  
   bool m_nacksEnabled;
 
-  TracedCallback<Ptr<const InterestHeader>,
+  TracedCallback<Ptr<const Interest>,
                  Ptr<const Face> > m_outNacks; ///< @brief trace of outgoing NACKs
 
-  TracedCallback<Ptr<const InterestHeader>,
+  TracedCallback<Ptr<const Interest>,
                  Ptr<const Face> > m_inNacks; ///< @brief trace of incoming NACKs
 
-  TracedCallback<Ptr<const InterestHeader>,
+  TracedCallback<Ptr<const Interest>,
                  Ptr<const Face> > m_dropNacks; ///< @brief trace of dropped NACKs
 };
 
diff --git a/model/fw/ndn-forwarding-strategy.cc b/model/fw/ndn-forwarding-strategy.cc
index 6dc5bb0..7532f13 100644
--- a/model/fw/ndn-forwarding-strategy.cc
+++ b/model/fw/ndn-forwarding-strategy.cc
@@ -132,7 +132,7 @@
 
 void
 ForwardingStrategy::OnInterest (Ptr<Face> inFace,
-                                Ptr<const InterestHeader> header,
+                                Ptr<const Interest> header,
                                 Ptr<const Packet> origPacket)
 {
   m_inInterests (header, inFace);
@@ -168,7 +168,7 @@
     }
 
   Ptr<Packet> contentObject;
-  Ptr<const ContentObjectHeader> contentObjectHeader; // used for tracing
+  Ptr<const ContentObject> contentObjectHeader; // used for tracing
   Ptr<const Packet> payload; // used for tracing
   boost::tie (contentObject, contentObjectHeader, payload) = m_contentStore->Lookup (header);
   if (contentObject != 0)
@@ -215,7 +215,7 @@
 
 void
 ForwardingStrategy::OnData (Ptr<Face> inFace,
-                            Ptr<const ContentObjectHeader> header,
+                            Ptr<const ContentObject> header,
                             Ptr<Packet> payload,
                             Ptr<const Packet> origPacket)
 {
@@ -287,7 +287,7 @@
 
 void
 ForwardingStrategy::DidCreatePitEntry (Ptr<Face> inFace,
-                                       Ptr<const InterestHeader> header,
+                                       Ptr<const Interest> header,
                                        Ptr<const Packet> origPacket,
                                        Ptr<pit::Entry> pitEntrypitEntry)
 {
@@ -295,7 +295,7 @@
 
 void
 ForwardingStrategy::FailedToCreatePitEntry (Ptr<Face> inFace,
-                                            Ptr<const InterestHeader> header,
+                                            Ptr<const Interest> header,
                                             Ptr<const Packet> origPacket)
 {
   m_dropInterests (header, inFace);
@@ -303,7 +303,7 @@
 
 void
 ForwardingStrategy::DidReceiveDuplicateInterest (Ptr<Face> inFace,
-                                                 Ptr<const InterestHeader> header,
+                                                 Ptr<const Interest> header,
                                                  Ptr<const Packet> origPacket,
                                                  Ptr<pit::Entry> pitEntry)
 {
@@ -318,7 +318,7 @@
 
 void
 ForwardingStrategy::DidSuppressSimilarInterest (Ptr<Face> face,
-                                                Ptr<const InterestHeader> header,
+                                                Ptr<const Interest> header,
                                                 Ptr<const Packet> origPacket,
                                                 Ptr<pit::Entry> pitEntry)
 {
@@ -326,7 +326,7 @@
 
 void
 ForwardingStrategy::DidForwardSimilarInterest (Ptr<Face> inFace,
-                                               Ptr<const InterestHeader> header,
+                                               Ptr<const Interest> header,
                                                Ptr<const Packet> origPacket,
                                                Ptr<pit::Entry> pitEntry)
 {
@@ -334,7 +334,7 @@
 
 void
 ForwardingStrategy::DidExhaustForwardingOptions (Ptr<Face> inFace,
-                                                 Ptr<const InterestHeader> header,
+                                                 Ptr<const Interest> header,
                                                  Ptr<const Packet> origPacket,
                                                  Ptr<pit::Entry> pitEntry)
 {
@@ -358,7 +358,7 @@
 
 bool
 ForwardingStrategy::DetectRetransmittedInterest (Ptr<Face> inFace,
-                                                 Ptr<const InterestHeader> header,
+                                                 Ptr<const Interest> header,
                                                  Ptr<const Packet> packet,
                                                  Ptr<pit::Entry> pitEntry)
 {
@@ -377,7 +377,7 @@
 
 void
 ForwardingStrategy::SatisfyPendingInterest (Ptr<Face> inFace,
-                                            Ptr<const ContentObjectHeader> header,
+                                            Ptr<const ContentObject> header,
                                             Ptr<const Packet> payload,
                                             Ptr<const Packet> origPacket,
                                             Ptr<pit::Entry> pitEntry)
@@ -417,7 +417,7 @@
 
 void
 ForwardingStrategy::DidReceiveSolicitedData (Ptr<Face> inFace,
-                                             Ptr<const ContentObjectHeader> header,
+                                             Ptr<const ContentObject> header,
                                              Ptr<const Packet> payload,
                                              Ptr<const Packet> origPacket,
                                              bool didCreateCacheEntry)
@@ -427,7 +427,7 @@
 
 void
 ForwardingStrategy::DidReceiveUnsolicitedData (Ptr<Face> inFace,
-                                               Ptr<const ContentObjectHeader> header,
+                                               Ptr<const ContentObject> header,
                                                Ptr<const Packet> payload,
                                                Ptr<const Packet> origPacket,
                                                bool didCreateCacheEntry)
@@ -450,7 +450,7 @@
 
 bool
 ForwardingStrategy::ShouldSuppressIncomingInterest (Ptr<Face> inFace,
-                                                    Ptr<const InterestHeader> header,
+                                                    Ptr<const Interest> header,
                                                     Ptr<const Packet> origPacket,
                                                     Ptr<pit::Entry> pitEntry)
 {
@@ -485,7 +485,7 @@
 
 void
 ForwardingStrategy::PropagateInterest (Ptr<Face> inFace,
-                                       Ptr<const InterestHeader> header,
+                                       Ptr<const Interest> header,
                                        Ptr<const Packet> origPacket,
                                        Ptr<pit::Entry> pitEntry)
 {
@@ -526,7 +526,7 @@
 bool
 ForwardingStrategy::CanSendOutInterest (Ptr<Face> inFace,
                                         Ptr<Face> outFace,
-                                        Ptr<const InterestHeader> header,
+                                        Ptr<const Interest> header,
                                         Ptr<const Packet> origPacket,
                                         Ptr<pit::Entry> pitEntry)
 {
@@ -557,7 +557,7 @@
 bool
 ForwardingStrategy::TrySendOutInterest (Ptr<Face> inFace,
                                         Ptr<Face> outFace,
-                                        Ptr<const InterestHeader> header,
+                                        Ptr<const Interest> header,
                                         Ptr<const Packet> origPacket,
                                         Ptr<pit::Entry> pitEntry)
 {
@@ -580,7 +580,7 @@
 void
 ForwardingStrategy::DidSendOutInterest (Ptr<Face> inFace,
                                         Ptr<Face> outFace,
-                                        Ptr<const InterestHeader> header,
+                                        Ptr<const Interest> header,
                                         Ptr<const Packet> origPacket,
                                         Ptr<pit::Entry> pitEntry)
 {
@@ -590,7 +590,7 @@
 void
 ForwardingStrategy::DidSendOutData (Ptr<Face> inFace,
                                     Ptr<Face> outFace,
-                                    Ptr<const ContentObjectHeader> header,
+                                    Ptr<const ContentObject> header,
                                     Ptr<const Packet> payload,
                                     Ptr<const Packet> origPacket,
                                     Ptr<pit::Entry> pitEntry)
diff --git a/model/fw/ndn-forwarding-strategy.h b/model/fw/ndn-forwarding-strategy.h
index 04b34a2..5e624b6 100644
--- a/model/fw/ndn-forwarding-strategy.h
+++ b/model/fw/ndn-forwarding-strategy.h
@@ -30,8 +30,8 @@
 namespace ndn {
 
 class Face;
-class InterestHeader;
-class ContentObjectHeader;
+class Interest;
+class ContentObject;
 class Pit;
 namespace pit { class Entry; }
 class FibFaceMetric;
@@ -70,7 +70,7 @@
    */
   virtual void
   OnInterest (Ptr<Face> face,
-              Ptr<const InterestHeader> header,
+              Ptr<const Interest> header,
               Ptr<const Packet> origPacket);
 
   /**
@@ -84,7 +84,7 @@
    */
   virtual void
   OnData (Ptr<Face> face,
-          Ptr<const ContentObjectHeader> header,
+          Ptr<const ContentObject> header,
           Ptr<Packet> payload,
           Ptr<const Packet> origPacket);
 
@@ -144,7 +144,7 @@
    */
   virtual void
   DidCreatePitEntry (Ptr<Face> inFace,
-                     Ptr<const InterestHeader> header,
+                     Ptr<const Interest> header,
                      Ptr<const Packet> origPacket,
                      Ptr<pit::Entry> pitEntry);
 
@@ -160,7 +160,7 @@
    */
   virtual void
   FailedToCreatePitEntry (Ptr<Face> inFace,
-                          Ptr<const InterestHeader> header,
+                          Ptr<const Interest> header,
                           Ptr<const Packet> origPacket);
 
   /**
@@ -177,7 +177,7 @@
    */
   virtual void
   DidReceiveDuplicateInterest (Ptr<Face> inFace,
-                               Ptr<const InterestHeader> header,
+                               Ptr<const Interest> header,
                                Ptr<const Packet> origPacket,
                                Ptr<pit::Entry> pitEntry);
 
@@ -195,7 +195,7 @@
    */
   virtual void
   DidSuppressSimilarInterest (Ptr<Face> inFace,
-                              Ptr<const InterestHeader> header,
+                              Ptr<const Interest> header,
                               Ptr<const Packet> origPacket,
                               Ptr<pit::Entry> pitEntry);
 
@@ -213,7 +213,7 @@
    */
   virtual void
   DidForwardSimilarInterest (Ptr<Face> inFace,
-                             Ptr<const InterestHeader> header,
+                             Ptr<const Interest> header,
                              Ptr<const Packet> origPacket,
                              Ptr<pit::Entry> pitEntry);
 
@@ -232,7 +232,7 @@
    */
   virtual void
   DidExhaustForwardingOptions (Ptr<Face> inFace,
-                               Ptr<const InterestHeader> header,
+                               Ptr<const Interest> header,
                                Ptr<const Packet> origPacket,
                                Ptr<pit::Entry> pitEntry);
 
@@ -252,7 +252,7 @@
    */
   virtual bool
   DetectRetransmittedInterest (Ptr<Face> inFace,
-                               Ptr<const InterestHeader> header,
+                               Ptr<const Interest> header,
                                Ptr<const Packet> origPacket,
                                Ptr<pit::Entry> pitEntry);
 
@@ -281,7 +281,7 @@
    */
   virtual void
   SatisfyPendingInterest (Ptr<Face> inFace, // 0 allowed (from cache)
-                          Ptr<const ContentObjectHeader> header,
+                          Ptr<const ContentObject> header,
                           Ptr<const Packet> payload,
                           Ptr<const Packet> origPacket,
                           Ptr<pit::Entry> pitEntry);
@@ -299,7 +299,7 @@
   virtual void
   DidSendOutData (Ptr<Face> inFace,
                   Ptr<Face> outFace,
-                  Ptr<const ContentObjectHeader> header,
+                  Ptr<const ContentObject> header,
                   Ptr<const Packet> payload,
                   Ptr<const Packet> origPacket,
                   Ptr<pit::Entry> pitEntry);
@@ -315,7 +315,7 @@
    */
   virtual void
   DidReceiveSolicitedData (Ptr<Face> inFace,
-                           Ptr<const ContentObjectHeader> header,
+                           Ptr<const ContentObject> header,
                            Ptr<const Packet> payload,
                            Ptr<const Packet> origPacket,
                            bool didCreateCacheEntry);
@@ -334,7 +334,7 @@
    */
   virtual void
   DidReceiveUnsolicitedData (Ptr<Face> inFace,
-                             Ptr<const ContentObjectHeader> header,
+                             Ptr<const ContentObject> header,
                              Ptr<const Packet> payload,
                              Ptr<const Packet> origPacket,
                              bool didCreateCacheEntry);
@@ -354,7 +354,7 @@
    */
   virtual bool
   ShouldSuppressIncomingInterest (Ptr<Face> inFace,
-                                  Ptr<const InterestHeader> header,
+                                  Ptr<const Interest> header,
                                   Ptr<const Packet> origPacket,
                                   Ptr<pit::Entry> pitEntry);
 
@@ -377,7 +377,7 @@
   virtual bool
   CanSendOutInterest (Ptr<Face> inFace,
                       Ptr<Face> outFace,
-                      Ptr<const InterestHeader> header,
+                      Ptr<const Interest> header,
                       Ptr<const Packet> origPacket,
                       Ptr<pit::Entry> pitEntry);
 
@@ -397,7 +397,7 @@
   virtual bool
   TrySendOutInterest (Ptr<Face> inFace,
                       Ptr<Face> outFace,
-                      Ptr<const InterestHeader> header,
+                      Ptr<const Interest> header,
                       Ptr<const Packet> origPacket,
                       Ptr<pit::Entry> pitEntry);
 
@@ -413,7 +413,7 @@
   virtual void
   DidSendOutInterest (Ptr<Face> inFace,
                       Ptr<Face> outFace,
-                      Ptr<const InterestHeader> header,
+                      Ptr<const Interest> header,
                       Ptr<const Packet> origPacket,
                       Ptr<pit::Entry> pitEntry);
 
@@ -432,7 +432,7 @@
    */
   virtual void
   PropagateInterest (Ptr<Face> inFace,
-                     Ptr<const InterestHeader> header,
+                     Ptr<const Interest> header,
                      Ptr<const Packet> origPacket,
                      Ptr<pit::Entry> pitEntry);
 
@@ -457,7 +457,7 @@
    */
   virtual bool
   DoPropagateInterest (Ptr<Face> inFace,
-                       Ptr<const InterestHeader> header,
+                       Ptr<const Interest> header,
                        Ptr<const Packet> origPacket,
                        Ptr<pit::Entry> pitEntry) = 0;
 
@@ -474,27 +474,27 @@
   bool m_cacheUnsolicitedData;
   bool m_detectRetransmissions;
 
-  TracedCallback<Ptr<const InterestHeader>,
+  TracedCallback<Ptr<const Interest>,
                  Ptr<const Face> > m_outInterests; ///< @brief Transmitted interests trace
 
-  TracedCallback<Ptr<const InterestHeader>,
+  TracedCallback<Ptr<const Interest>,
                  Ptr<const Face> > m_inInterests; ///< @brief trace of incoming Interests
 
-  TracedCallback<Ptr<const InterestHeader>,
+  TracedCallback<Ptr<const Interest>,
                  Ptr<const Face> > m_dropInterests; ///< @brief trace of dropped Interests
 
   ////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////
 
-  TracedCallback<Ptr<const ContentObjectHeader>, Ptr<const Packet>,
+  TracedCallback<Ptr<const ContentObject>, Ptr<const Packet>,
                  bool /*from cache*/,
                  Ptr<const Face> > m_outData; ///< @brief trace of outgoing Data
 
-  TracedCallback<Ptr<const ContentObjectHeader>, Ptr<const Packet>,
+  TracedCallback<Ptr<const ContentObject>, Ptr<const Packet>,
                  Ptr<const Face> > m_inData; ///< @brief trace of incoming Data
 
-  TracedCallback<Ptr<const ContentObjectHeader>, Ptr<const Packet>,
+  TracedCallback<Ptr<const ContentObject>, Ptr<const Packet>,
                   Ptr<const Face> > m_dropData;  ///< @brief trace of dropped Data
 };
 
diff --git a/model/fw/per-fib-limits.h b/model/fw/per-fib-limits.h
index 4affec9..6a18f13 100644
--- a/model/fw/per-fib-limits.h
+++ b/model/fw/per-fib-limits.h
@@ -99,7 +99,7 @@
   virtual bool
   CanSendOutInterest (Ptr<Face> inFace,
                       Ptr<Face> outFace,
-                      Ptr<const InterestHeader> header,
+                      Ptr<const Interest> header,
                       Ptr<const Packet> origPacket,
                       Ptr<pit::Entry> pitEntry);
 
@@ -141,7 +141,7 @@
 bool
 PerFibLimits<Parent>::CanSendOutInterest (Ptr<Face> inFace,
                                           Ptr<Face> outFace,
-                                          Ptr<const InterestHeader> header,
+                                          Ptr<const Interest> header,
                                           Ptr<const Packet> origPacket,
                                           Ptr<pit::Entry> pitEntry)
 {
diff --git a/model/fw/per-out-face-limits.h b/model/fw/per-out-face-limits.h
index 2c4a935..2929b5b 100644
--- a/model/fw/per-out-face-limits.h
+++ b/model/fw/per-out-face-limits.h
@@ -87,7 +87,7 @@
   virtual bool
   CanSendOutInterest (Ptr<Face> inFace,
                       Ptr<Face> outFace,
-                      Ptr<const InterestHeader> header,
+                      Ptr<const Interest> header,
                       Ptr<const Packet> origPacket,
                       Ptr<pit::Entry> pitEntry);
   
@@ -134,7 +134,7 @@
 bool
 PerOutFaceLimits<Parent>::CanSendOutInterest (Ptr<Face> inFace,
                                               Ptr<Face> outFace,
-                                              Ptr<const InterestHeader> header,
+                                              Ptr<const Interest> header,
                                               Ptr<const Packet> origPacket,
                                               Ptr<pit::Entry> pitEntry)
 {
diff --git a/model/fw/smart-flooding.cc b/model/fw/smart-flooding.cc
index c8b8406..97faaf7 100644
--- a/model/fw/smart-flooding.cc
+++ b/model/fw/smart-flooding.cc
@@ -66,7 +66,7 @@
 
 bool
 SmartFlooding::DoPropagateInterest (Ptr<Face> inFace,
-                                    Ptr<const InterestHeader> header,
+                                    Ptr<const Interest> header,
                                     Ptr<const Packet> origPacket,
                                     Ptr<pit::Entry> pitEntry)
 {
diff --git a/model/fw/smart-flooding.h b/model/fw/smart-flooding.h
index f66d1e8..e1637aa 100644
--- a/model/fw/smart-flooding.h
+++ b/model/fw/smart-flooding.h
@@ -55,7 +55,7 @@
   // inherited
   virtual bool
   DoPropagateInterest (Ptr<Face> inFace,
-                       Ptr<const InterestHeader> header,
+                       Ptr<const Interest> header,
                        Ptr<const Packet> origPacket,
                        Ptr<pit::Entry> pitEntry);
 
