diff --git a/utils/tracers/ndn-l3-aggregate-tracer.cc b/utils/tracers/ndn-l3-aggregate-tracer.cc
index 5ece34c..d1150ae 100644
--- a/utils/tracers/ndn-l3-aggregate-tracer.cc
+++ b/utils/tracers/ndn-l3-aggregate-tracer.cc
@@ -61,7 +61,7 @@
       os->open (file.c_str (), std::ios_base::out | std::ios_base::trunc);
 
       if (!os->is_open ())
-        return boost::make_tuple (outputStream, tracers);
+    return boost::make_tuple (outputStream, tracers);
 
       outputStream = os;
     }
@@ -102,7 +102,7 @@
       os->open (file.c_str (), std::ios_base::out | std::ios_base::trunc);
 
       if (!os->is_open ())
-        return boost::make_tuple (outputStream, tracers);
+    return boost::make_tuple (outputStream, tracers);
 
       outputStream = os;
     }
@@ -143,7 +143,7 @@
       os->open (file.c_str (), std::ios_base::out | std::ios_base::trunc);
 
       if (!os->is_open ())
-        return boost::make_tuple (outputStream, tracers);
+    return boost::make_tuple (outputStream, tracers);
 
       outputStream = os;
     }
@@ -298,69 +298,96 @@
 }
 
 void
-L3AggregateTracer::OutInterests  (Ptr<const Interest> header, Ptr<const Face> face)
+L3AggregateTracer::OutInterests  (Ptr<const Interest> interest, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outInterests ++;
-  m_stats[face].get<1> ().m_outInterests += header->GetSerializedSize ();
+  if (interest->GetWire ())
+    {
+      m_stats[face].get<1> ().m_outInterests += interest->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3AggregateTracer::InInterests   (Ptr<const Interest> header, Ptr<const Face> face)
+L3AggregateTracer::InInterests   (Ptr<const Interest> interest, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inInterests ++;
-  m_stats[face].get<1> ().m_inInterests += header->GetSerializedSize ();
+  if (interest->GetWire ())
+    {
+      m_stats[face].get<1> ().m_inInterests += interest->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3AggregateTracer::DropInterests (Ptr<const Interest> header, Ptr<const Face> face)
+L3AggregateTracer::DropInterests (Ptr<const Interest> interest, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_dropInterests ++;
-  m_stats[face].get<1> ().m_dropInterests += header->GetSerializedSize ();
+  if (interest->GetWire ())
+    {
+      m_stats[face].get<1> ().m_dropInterests += interest->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3AggregateTracer::OutNacks  (Ptr<const Interest> header, Ptr<const Face> face)
+L3AggregateTracer::OutNacks  (Ptr<const Interest> nack, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outNacks ++;
-  m_stats[face].get<1> ().m_outNacks += header->GetSerializedSize ();
+  if (nack->GetWire ())
+    {
+      m_stats[face].get<1> ().m_outNacks += nack->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3AggregateTracer::InNacks   (Ptr<const Interest> header, Ptr<const Face> face)
+L3AggregateTracer::InNacks   (Ptr<const Interest> nack, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inNacks ++;
-  m_stats[face].get<1> ().m_inNacks += header->GetSerializedSize ();
+  if (nack->GetWire ())
+    {
+      m_stats[face].get<1> ().m_inNacks += nack->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3AggregateTracer::DropNacks (Ptr<const Interest> header, Ptr<const Face> face)
+L3AggregateTracer::DropNacks (Ptr<const Interest> nack, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_dropNacks ++;
-  m_stats[face].get<1> ().m_dropNacks += header->GetSerializedSize ();
+  if (nack->GetWire ())
+    {
+      m_stats[face].get<1> ().m_dropNacks += nack->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3AggregateTracer::OutData  (Ptr<const ContentObject> header, Ptr<const Packet> payload,
+L3AggregateTracer::OutData  (Ptr<const ContentObject> data, 
                              bool fromCache, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outData ++;
-  m_stats[face].get<1> ().m_outData += header->GetSerializedSize () + payload->GetSize ();
+  if (data->GetWire ())
+    {
+      m_stats[face].get<1> ().m_outData += data->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3AggregateTracer::InData   (Ptr<const ContentObject> header, Ptr<const Packet> payload,
+L3AggregateTracer::InData   (Ptr<const ContentObject> data, 
                              Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inData ++;
-  m_stats[face].get<1> ().m_inData += header->GetSerializedSize () + payload->GetSize ();
+  if (data->GetWire ())
+    {
+      m_stats[face].get<1> ().m_inData += data->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3AggregateTracer::DropData (Ptr<const ContentObject> header, Ptr<const Packet> payload,
+L3AggregateTracer::DropData (Ptr<const ContentObject> data, 
                              Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_dropData ++;
-  m_stats[face].get<1> ().m_dropData += header->GetSerializedSize () + payload->GetSize ();
+  if (data->GetWire ())
+    {
+      m_stats[face].get<1> ().m_dropData += data->GetWire ()->GetSize ();
+    }
 }
 
 void
diff --git a/utils/tracers/ndn-l3-aggregate-tracer.h b/utils/tracers/ndn-l3-aggregate-tracer.h
index 03f7a9a..98e6731 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>, Ptr<const Packet>, bool fromCache, Ptr<const Face>);
+  OutData  (Ptr<const ContentObject>, bool fromCache, Ptr<const Face>);
 
   virtual void
-  InData   (Ptr<const ContentObject>, Ptr<const Packet>, Ptr<const Face>);
+  InData   (Ptr<const ContentObject>, Ptr<const Face>);
 
   virtual void
-  DropData (Ptr<const ContentObject>, Ptr<const Packet>, Ptr<const Face>);
+  DropData (Ptr<const ContentObject>, Ptr<const Face>);
 
 
   virtual void
diff --git a/utils/tracers/ndn-l3-rate-tracer.cc b/utils/tracers/ndn-l3-rate-tracer.cc
index c0b9fff..8f91f6f 100644
--- a/utils/tracers/ndn-l3-rate-tracer.cc
+++ b/utils/tracers/ndn-l3-rate-tracer.cc
@@ -61,7 +61,7 @@
       os->open (file.c_str (), std::ios_base::out | std::ios_base::trunc);
 
       if (!os->is_open ())
-        return boost::make_tuple (outputStream, tracers);
+    return boost::make_tuple (outputStream, tracers);
 
       outputStream = os;
     }
@@ -315,69 +315,96 @@
 
 
 void
-L3RateTracer::OutInterests  (Ptr<const Interest> header, Ptr<const Face> face)
+L3RateTracer::OutInterests  (Ptr<const Interest> interest, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outInterests ++;
-  m_stats[face].get<1> ().m_outInterests += header->GetSerializedSize ();
+  if (interest->GetWire ())
+    {
+      m_stats[face].get<1> ().m_outInterests += interest->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3RateTracer::InInterests   (Ptr<const Interest> header, Ptr<const Face> face)
+L3RateTracer::InInterests   (Ptr<const Interest> interest, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inInterests ++;
-  m_stats[face].get<1> ().m_inInterests += header->GetSerializedSize ();
+  if (interest->GetWire ())
+    {
+      m_stats[face].get<1> ().m_inInterests += interest->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3RateTracer::DropInterests (Ptr<const Interest> header, Ptr<const Face> face)
+L3RateTracer::DropInterests (Ptr<const Interest> interest, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_dropInterests ++;
-  m_stats[face].get<1> ().m_dropInterests += header->GetSerializedSize ();
+  if (interest->GetWire ())
+    {
+      m_stats[face].get<1> ().m_dropInterests += interest->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3RateTracer::OutNacks  (Ptr<const Interest> header, Ptr<const Face> face)
+L3RateTracer::OutNacks  (Ptr<const Interest> interest, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outNacks ++;
-  m_stats[face].get<1> ().m_outNacks += header->GetSerializedSize ();
+  if (interest->GetWire ())
+    {
+      m_stats[face].get<1> ().m_outNacks += interest->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3RateTracer::InNacks   (Ptr<const Interest> header, Ptr<const Face> face)
+L3RateTracer::InNacks   (Ptr<const Interest> interest, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inNacks ++;
-  m_stats[face].get<1> ().m_inNacks += header->GetSerializedSize ();
+  if (interest->GetWire ())
+    {
+      m_stats[face].get<1> ().m_inNacks += interest->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3RateTracer::DropNacks (Ptr<const Interest> header, Ptr<const Face> face)
+L3RateTracer::DropNacks (Ptr<const Interest> interest, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_dropNacks ++;
-  m_stats[face].get<1> ().m_dropNacks += header->GetSerializedSize ();
+  if (interest->GetWire ())
+    {
+      m_stats[face].get<1> ().m_dropNacks += interest->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3RateTracer::OutData  (Ptr<const ContentObject> header, Ptr<const Packet> payload,
+L3RateTracer::OutData  (Ptr<const ContentObject> data,
                         bool fromCache, Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_outData ++;
-  m_stats[face].get<1> ().m_outData += header->GetSerializedSize () + payload->GetSize ();
+  if (data->GetWire ())
+    {
+      m_stats[face].get<1> ().m_outData += data->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3RateTracer::InData   (Ptr<const ContentObject> header, Ptr<const Packet> payload,
+L3RateTracer::InData   (Ptr<const ContentObject> data,
                         Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_inData ++;
-  m_stats[face].get<1> ().m_inData += header->GetSerializedSize () + payload->GetSize ();
+  if (data->GetWire ())
+    {
+      m_stats[face].get<1> ().m_inData += data->GetWire ()->GetSize ();
+    }
 }
 
 void
-L3RateTracer::DropData (Ptr<const ContentObject> header, Ptr<const Packet> payload,
+L3RateTracer::DropData (Ptr<const ContentObject> data,
                         Ptr<const Face> face)
 {
   m_stats[face].get<0> ().m_dropData ++;
-  m_stats[face].get<1> ().m_dropData += header->GetSerializedSize () + payload->GetSize ();
+  if (data->GetWire ())
+    {
+      m_stats[face].get<1> ().m_dropData += data->GetWire ()->GetSize ();
+    }
 }
 
 void
@@ -391,7 +418,7 @@
        i++)
     {
       m_stats[i->m_face].get<0> ().m_satisfiedInterests ++;
-    }
+}
 
   for (pit::Entry::out_container::const_iterator i = entry->GetOutgoing ().begin ();
        i != entry->GetOutgoing ().end ();
@@ -412,7 +439,7 @@
        i++)
     {
       m_stats[i->m_face].get<0> ().m_timedOutInterests ++;
-    }
+}
 
   for (pit::Entry::out_container::const_iterator i = entry->GetOutgoing ().begin ();
        i != entry->GetOutgoing ().end ();
diff --git a/utils/tracers/ndn-l3-rate-tracer.h b/utils/tracers/ndn-l3-rate-tracer.h
index 64e5177..60bb616 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>, Ptr<const Packet>, bool fromCache, Ptr<const Face>);
+  OutData  (Ptr<const ContentObject>, bool fromCache, Ptr<const Face>);
 
   virtual void
-  InData   (Ptr<const ContentObject>, Ptr<const Packet>, Ptr<const Face>);
+  InData   (Ptr<const ContentObject>, Ptr<const Face>);
 
   virtual void
-  DropData (Ptr<const ContentObject>, Ptr<const Packet>, Ptr<const Face>);
+  DropData (Ptr<const ContentObject>, 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 c264d49..260fe61 100644
--- a/utils/tracers/ndn-l3-tracer.h
+++ b/utils/tracers/ndn-l3-tracer.h
@@ -103,13 +103,13 @@
 
 
   virtual void
-  OutData  (Ptr<const ContentObject>, Ptr<const Packet>, bool fromCache, Ptr<const Face>) = 0;
+  OutData  (Ptr<const ContentObject>, bool fromCache, Ptr<const Face>) = 0;
 
   virtual void
-  InData   (Ptr<const ContentObject>, Ptr<const Packet>, Ptr<const Face>) = 0;
+  InData   (Ptr<const ContentObject>, Ptr<const Face>) = 0;
 
   virtual void
-  DropData (Ptr<const ContentObject>, Ptr<const Packet>, Ptr<const Face>) = 0;
+  DropData (Ptr<const ContentObject>, Ptr<const Face>) = 0;
 
   virtual void
   SatisfiedInterests (Ptr<const pit::Entry>) = 0;
