diff --git a/helper/ccnx-trace-helper.h b/helper/ccnx-trace-helper.h
index 7668b1b..54d7405 100644
--- a/helper/ccnx-trace-helper.h
+++ b/helper/ccnx-trace-helper.h
@@ -21,342 +21,15 @@
 #ifndef CCNX_TRACE_HELPER_H
 #define CCNX_TRACE_HELPER_H
 
-#include "ns3/ptr.h"
-#include "ns3/simple-ref-count.h"
-#include "ns3/ccnx.h"
 #include "ns3/nstime.h"
 #include "ns3/event-id.h"
 
-#include <boost/tuple/tuple.hpp>
-#include <map>
+#include <list>
 
 namespace ns3 {
 
-class CcnxApp;
-
-class CcnxAppTracer : public SimpleRefCount<CcnxAppTracer>
-{
-public:
-  CcnxAppTracer (const std::string &app, Ptr<Node> node, const std::string &appId = "*");
-  CcnxAppTracer (const std::string &app, const std::string &node, const std::string &appId = "*");
-  virtual ~CcnxAppTracer ()  { };
-
-  void
-  Connect ();
-
-  virtual void
-  PrintHeader (std::ostream &os) const = 0;
-  
-  virtual void
-  Print (std::ostream &os) const = 0;
-
-  virtual void
-  OutInterests (std::string context,
-                Ptr<const CcnxInterestHeader>, Ptr<CcnxApp>, Ptr<CcnxFace>) = 0;
-
-  virtual void
-  InInterests  (std::string context,
-                Ptr<const CcnxInterestHeader>, Ptr<CcnxApp>, Ptr<CcnxFace>) = 0;
-
-  virtual void
-  InNacks (std::string context,
-           Ptr<const CcnxInterestHeader>, Ptr<CcnxApp>, Ptr<CcnxFace>) = 0;
-
-  virtual void
-  OutData (std::string context,
-           Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>) = 0;
-  
-  virtual void
-  InData  (std::string context,
-           Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>) = 0;
-
-protected:
-  std::string m_app;
-  std::string m_appId;
-  std::string m_node;
-  Ptr<Node> m_nodePtr;
-};
-
-std::ostream&
-operator << (std::ostream &os, const CcnxAppTracer &tracer)
-{
-  os << "# ";
-  tracer.PrintHeader (os);
-  os << "\n";
-  tracer.Print (os);
-  return os;
-}
-
-class CcnxL3Tracer : public SimpleRefCount<CcnxL3Tracer>
-{
-public:
-  CcnxL3Tracer (Ptr<Node> node);
-  CcnxL3Tracer (const std::string &node);
-  virtual ~CcnxL3Tracer () { };
-
-  void
-  Connect ();
-  
-  virtual void
-  PrintHeader (std::ostream &os) const = 0;
-
-  virtual void
-  Print (std::ostream &os) const = 0;
-  
-  virtual void
-  OutInterests  (std::string context,
-                 Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace>) = 0;
-
-  virtual void
-  InInterests   (std::string context,
-                 Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace>) = 0;
-
-  virtual void
-  DropInterests (std::string context,
-                 Ptr<const CcnxInterestHeader>, Ccnx::DropReason, Ptr<const CcnxFace>) = 0;
-  
-  virtual void
-  OutNacks  (std::string context,
-             Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace>) = 0;
-
-  virtual void
-  InNacks   (std::string context,
-             Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace>) = 0;
-
-  virtual void
-  DropNacks (std::string context,
-             Ptr<const CcnxInterestHeader>, Ccnx::DropReason, Ptr<const CcnxFace>) = 0;
-
-  
-  virtual void
-  OutData  (std::string context,
-            Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, bool fromCache, Ptr<const CcnxFace>) = 0;
-
-  virtual void
-  InData   (std::string context,
-            Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, Ptr<const CcnxFace>) = 0;
-
-  virtual void
-  DropData (std::string context,
-            Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, Ccnx::DropReason, Ptr<const CcnxFace>) = 0;
-
-protected:
-  std::string m_node;
-  Ptr<Node> m_nodePtr;
-
-  struct Stats
-  {
-    void Reset ();
-    
-    uint64_t m_inInterests;
-    uint64_t m_outInterests;
-    uint64_t m_dropInterests;
-    uint64_t m_inNacks;
-    uint64_t m_outNacks;
-    uint64_t m_dropNacks;
-    uint64_t m_inData;
-    uint64_t m_outData;
-    uint64_t m_dropData;
-  };
-};
-
-std::ostream&
-operator << (std::ostream &os, const CcnxL3Tracer &tracer)
-{
-  os << "# ";
-  tracer.PrintHeader (os);
-  os << "\n";
-  tracer.Print (os);
-  return os;
-}
-
-////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////
-
-class CcnxAggregateAppTracer : public CcnxAppTracer
-{
-public:
-  CcnxAggregateAppTracer (const std::string &app, Ptr<Node> node, const std::string &appId = "*");
-  CcnxAggregateAppTracer (const std::string &app, const std::string &node, const std::string &appId = "*");
-  virtual ~CcnxAggregateAppTracer () { };
-
-  virtual void
-  PrintHeader (std::ostream &os) const;
-
-  virtual void
-  Print (std::ostream &os) const;
-
-  virtual void
-  OutInterests (std::string context,
-                Ptr<const CcnxInterestHeader>, Ptr<CcnxApp>, Ptr<CcnxFace>);
-
-  virtual void
-  InInterests  (std::string context,
-                Ptr<const CcnxInterestHeader>, Ptr<CcnxApp>, Ptr<CcnxFace>);
-
-  virtual void
-  InNacks (std::string context,
-           Ptr<const CcnxInterestHeader>, Ptr<CcnxApp>, Ptr<CcnxFace>);
-
-  virtual void
-  OutData (std::string context,
-           Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>);
-  
-  virtual void
-  InData  (std::string context,
-           Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, Ptr<CcnxApp>, Ptr<CcnxFace>);
-
-protected:
-  void
-  Reset ();
-
-protected:
-  uint64_t m_inInterests;
-  uint64_t m_outInterests;
-  uint64_t m_inNacks;
-  uint64_t m_inData; 
-  uint64_t m_outData;
-
-  uint64_t m_inInterestsBytes;
-  uint64_t m_outInterestsBytes;
-  uint64_t m_inNacksBytes;
-  uint64_t m_inDataBytes;
-  uint64_t m_outDataBytes;
-};
-
-class CcnxAggregateL3Tracer : public CcnxL3Tracer
-{
-public:
-  CcnxAggregateL3Tracer (Ptr<Node> node);
-  CcnxAggregateL3Tracer (const std::string &node);
-  virtual ~CcnxAggregateL3Tracer () { };
-  
-  virtual void
-  PrintHeader (std::ostream &os) const;
-
-  virtual void
-  Print (std::ostream &os) const;
-
-  virtual void
-  OutInterests  (std::string context,
-                 Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace>);
-
-  virtual void
-  InInterests   (std::string context,
-                 Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace>);
-
-  virtual void
-  DropInterests (std::string context,
-                 Ptr<const CcnxInterestHeader>, Ccnx::DropReason, Ptr<const CcnxFace>);
-  
-  virtual void
-  OutNacks  (std::string context,
-             Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace>);
-
-  virtual void
-  InNacks   (std::string context,
-             Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace>);
-
-  virtual void
-  DropNacks (std::string context,
-             Ptr<const CcnxInterestHeader>, Ccnx::DropReason, Ptr<const CcnxFace>);
-  
-  virtual void
-  OutData  (std::string context,
-            Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, bool fromCache, Ptr<const CcnxFace>);
-
-  virtual void
-  InData   (std::string context,
-            Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, Ptr<const CcnxFace>);
-
-  virtual void
-  DropData (std::string context,
-            Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, Ccnx::DropReason, Ptr<const CcnxFace>);
-
-protected:
-  void
-  Reset ();
-  
-protected:
-  Stats m_packets;
-  Stats m_bytes;
-};
-
-/**
- * @ingroup ccnx
- * @brief CCNx network-layer rate tracer
- */
-class CcnxRateL3Tracer : public CcnxL3Tracer
-{
-public:
-  /**
-   * @brief Network layer tracer constructor
-   */
-  CcnxRateL3Tracer (std::ostream &os, Ptr<Node> node);
-  CcnxRateL3Tracer (std::ostream &os, const std::string &node);
-  virtual ~CcnxRateL3Tracer ();
-
-  void
-  SetAveragingPeriod (const Time &period);
-  
-  virtual void
-  PrintHeader (std::ostream &os) const;
-
-  virtual void
-  Print (std::ostream &os) const;
-
-  virtual void
-  OutInterests  (std::string context,
-                 Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace>);
-
-  virtual void
-  InInterests   (std::string context,
-                 Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace>);
-
-  virtual void
-  DropInterests (std::string context,
-                 Ptr<const CcnxInterestHeader>, Ccnx::DropReason, Ptr<const CcnxFace>);
-  
-  virtual void
-  OutNacks  (std::string context,
-             Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace>);
-
-  virtual void
-  InNacks   (std::string context,
-             Ptr<const CcnxInterestHeader>, Ptr<const CcnxFace>);
-
-  virtual void
-  DropNacks (std::string context,
-             Ptr<const CcnxInterestHeader>, Ccnx::DropReason, Ptr<const CcnxFace>);
-  
-  virtual void
-  OutData  (std::string context,
-            Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, bool fromCache, Ptr<const CcnxFace>);
-
-  virtual void
-  InData   (std::string context,
-            Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, Ptr<const CcnxFace>);
-
-  virtual void
-  DropData (std::string context,
-            Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>, Ccnx::DropReason, Ptr<const CcnxFace>);
-
-private:
-  void
-  PeriodicPrinter ();
-  
-  void
-  Reset ();
-
-private:
-  std::ostream& m_os;
-  Time m_period;
-  EventId m_printEvent;
-
-  mutable std::map<Ptr<const CcnxFace>, boost::tuple<Stats, Stats, Stats, Stats> > m_stats;
-};
-
+class CcnxAppTracer;
+class CcnxL3Tracer;
 
 class CcnxTraceHelper
 {
@@ -410,12 +83,12 @@
   
 private:
   std::string m_appTrace;
-  std::list<Ptr<CcnxAggregateAppTracer> > m_apps;
+  std::list<Ptr<CcnxAppTracer> > m_apps;
 
   std::string m_l3Trace;
-  std::list<Ptr<CcnxAggregateL3Tracer> > m_l3s;
+  std::list<Ptr<CcnxL3Tracer> > m_l3s;
 
-  std::list<Ptr<CcnxRateL3Tracer> > m_l3Rates;
+  std::list<Ptr<CcnxL3Tracer> > m_l3Rates;
   std::ostream *m_l3RateTrace;
 };
 
