diff --git a/helper/tracers/ccnx-aggregate-app-tracer.cc b/helper/tracers/ccnx-aggregate-app-tracer.cc
new file mode 100644
index 0000000..6129e8c
--- /dev/null
+++ b/helper/tracers/ccnx-aggregate-app-tracer.cc
@@ -0,0 +1,172 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2011 UCLA
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author:  Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include "ccnx-aggregate-app-tracer.h"
+#include "ns3/node.h"
+#include "ns3/packet.h"
+#include "ns3/config.h"
+#include "ns3/callback.h"
+#include "ns3/ccnx-app.h"
+#include "ns3/ccnx-face.h"
+#include "ns3/ccnx-interest-header.h"
+#include "ns3/ccnx-content-object-header.h"
+
+namespace ns3 {
+    
+CcnxAggregateAppTracer::CcnxAggregateAppTracer (const std::string &app, Ptr<Node> node, const std::string &appId)
+  : CcnxAppTracer (app, node, appId)
+  , m_inInterests (0)
+  , m_outInterests (0)
+  , m_inNacks (0)
+  , m_inData (0)
+  , m_outData (0)
+
+  , m_inInterestsBytes (0)
+  , m_outInterestsBytes (0)
+  , m_inNacksBytes (0)
+  , m_inDataBytes (0)
+  , m_outDataBytes (0)
+{
+}
+
+CcnxAggregateAppTracer::CcnxAggregateAppTracer (const std::string &app, const std::string &node, const std::string &appId)
+  : CcnxAppTracer (app, node, appId)
+  , m_inInterests (0)
+  , m_outInterests (0)
+  , m_inNacks (0)
+  , m_inData (0)
+  , m_outData (0)
+
+  , m_inInterestsBytes (0)
+  , m_outInterestsBytes (0)
+  , m_inNacksBytes (0)
+  , m_inDataBytes (0)
+  , m_outDataBytes (0)
+{
+}
+
+void
+CcnxAggregateAppTracer::Reset ()
+{
+  m_inInterests = 0;
+  m_outInterests = 0;
+  m_inNacks = 0;
+  m_inData = 0;
+  m_outData = 0;
+
+  m_inInterestsBytes = 0;
+  m_outInterestsBytes = 0;
+  m_inNacksBytes = 0;
+  m_inDataBytes = 0;
+  m_outDataBytes = 0;
+}
+
+void
+CcnxAggregateAppTracer::PrintHeader (std::ostream &os) const
+{
+  os << "NodeId" << "\t"
+     << "App" << "\t"
+     << "AppId" << "\t"
+     << "InInterests" << "\t"
+     << "OutInterests" << "\t"
+    
+     << "InNacks" << "\t"
+    
+     << "InData" << "\t"
+     << "OutData" << "\t"
+
+     << "InInterestsBytes" << "\t"
+     << "OutInterestsBytes" << "\t"
+    
+     << "InNacksBytes" << "\t"
+    
+     << "InDataBytes" << "\t"
+     << "OutDataBytes";
+}
+
+void
+CcnxAggregateAppTracer::Print (std::ostream &os) const
+{
+  os << m_node << "\t"
+     << m_app << "\t"
+     << m_appId << "\t"
+
+     << m_inInterests << "\t"
+     << m_outInterests << "\t"
+    
+     << m_inNacks << "\t"
+    
+     << m_inData << "\t"
+     << m_outData << "\t"
+
+     << m_inInterestsBytes << "\t"
+     << m_outInterestsBytes << "\t"
+    
+     << m_inNacksBytes << "\t"
+    
+     << m_inDataBytes << "\t"
+     << m_outDataBytes;
+}
+
+void
+CcnxAggregateAppTracer::OutInterests (std::string context,
+                                      Ptr<const CcnxInterestHeader> header, Ptr<CcnxApp>, Ptr<CcnxFace>)
+{
+  m_outInterests++;
+  m_outInterestsBytes += header->GetSerializedSize ();
+}
+
+void
+CcnxAggregateAppTracer::OutData (std::string context,
+                                 Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> payload,
+                                 Ptr<CcnxApp>, Ptr<CcnxFace>)
+{
+  m_outData++;
+  m_outDataBytes += header->GetSerializedSize () + payload->GetSerializedSize ();
+}
+
+void
+CcnxAggregateAppTracer::InInterests (std::string context,
+                                     Ptr<const CcnxInterestHeader> header,
+                                     Ptr<CcnxApp>, Ptr<CcnxFace>)
+{
+  m_inInterests++;
+  m_inInterestsBytes += header->GetSerializedSize ();
+}
+
+void
+CcnxAggregateAppTracer::InNacks (std::string context,
+                                 Ptr<const CcnxInterestHeader> header,
+                                 Ptr<CcnxApp>, Ptr<CcnxFace>)
+{
+  m_inNacks++;
+  m_inNacksBytes += header->GetSerializedSize ();
+}
+  
+void
+CcnxAggregateAppTracer::InData (std::string context,
+                                Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> payload,
+                                Ptr<CcnxApp>, Ptr<CcnxFace>)
+{
+  m_inData++;
+  m_inDataBytes += header->GetSerializedSize () + payload->GetSerializedSize ();
+}
+
+} // namespace ns3
