diff --git a/examples/abilene-topology.cc b/examples/abilene-topology.cc
index c0c1f16..8c83930 100644
--- a/examples/abilene-topology.cc
+++ b/examples/abilene-topology.cc
@@ -26,25 +26,27 @@
 #include "ns3/point-to-point-grid.h"
 #include "ns3/ipv4-global-routing-helper.h"
 #include "ns3/animation-interface.h"
-#include "ns3/ccnx-l3-protocol.h"
+// #include "ns3/ccnx-l3-protocol.h"
 
 #include <iostream>
 #include <sstream>
 #include "ns3/annotated-topology-reader.h"
 #include "../utils/spring-mobility-helper.h"
 
+#include "ns3/config-store.h"
+
 using namespace ns3;
 using namespace std;
 
 NS_LOG_COMPONENT_DEFINE ("CcnxAbileneTopology");
 
-int transmittedInterests = 0;
-int receivedInterests = 0;
-int droppedInterests = 0;
+// int transmittedInterests = 0;
+// int receivedInterests = 0;
+// int droppedInterests = 0;
 
-int transmittedData = 0;
-int receivedData = 0;
-int droppedData = 0;
+// int transmittedData = 0;
+// int receivedData = 0;
+// int droppedData = 0;
 
 void PrintTime ()
 {
@@ -69,49 +71,118 @@
     }
 }
 
-static void OnTransmittedInterest (std::string context, Ptr<const CcnxInterestHeader> header, 
-                                   Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
+
+struct AggregateTrace
 {
-  transmittedInterests++;
+  AggregateTrace ()
+    : m_transmittedInterests (0)
+    , m_transmittedData (0)
+    , m_receivedInterests (0)
+    , m_receivedNacks (0)
+    , m_receivedData (0)
+  {
+  }
+  
+  void
+  TransmittedInterests (std::string context,
+                        Ptr<const CcnxInterestHeader>, Ptr<CcnxApp>, Ptr<CcnxFace>)
+  {
+    m_transmittedInterests++;
+  }
+
+  void
+  TransmittedData (std::string context,
+                   Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>,
+                   Ptr<CcnxApp>, Ptr<CcnxFace>)
+  {
+    m_transmittedData++;
+  }
+
+  void
+  ReceivedInterests (std::string context,
+                     Ptr<const CcnxInterestHeader>,
+                     Ptr<CcnxApp>, Ptr<CcnxFace>)
+  {
+    m_receivedInterests++;
+  }
+
+  void
+  ReceivedNacks (std::string context,
+                 Ptr<const CcnxInterestHeader>,
+                 Ptr<CcnxApp>, Ptr<CcnxFace>)
+  {
+    m_receivedNacks++;
+  }
+  
+  void
+  ReceivedData (std::string context,
+                Ptr<const CcnxContentObjectHeader>, Ptr<const Packet>,
+                Ptr<CcnxApp>, Ptr<CcnxFace>)
+  {
+    m_receivedData++;
+  }
+
+  uint64_t m_transmittedInterests;
+  uint64_t m_transmittedData;
+  uint64_t m_receivedInterests;
+  uint64_t m_receivedNacks;
+  uint64_t m_receivedData;
+};
+
+ostream&
+operator << (ostream &os, const AggregateTrace &trace)
+{
+  os << ">> (i): " << trace.m_transmittedInterests << "\n";
+  os << ">> (d): " << trace.m_transmittedData << "\n";
+  os << "<< (i): " << trace.m_receivedInterests << "\n";
+  os << "<< (d): " << trace.m_receivedData << "\n";
+  os << "<< (n): " << trace.m_receivedNacks << "\n";
+  return os;
 }
 
-static void OnReceivedInterest (std::string context, Ptr<const CcnxInterestHeader> header, 
-                                Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
-{
-  receivedInterests++;
-}
+// static void OnTransmittedInterest (std::string context, Ptr<const CcnxInterestHeader> header, 
+//                                    Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
+// {
+//   transmittedInterests++;
+// }
 
-static void OnDroppedInterest (std::string context, Ptr<const CcnxInterestHeader> header, CcnxL3Protocol::DropReason reason,
-                               Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
-{
-  droppedInterests++;
-}
+// static void OnReceivedInterest (std::string context, Ptr<const CcnxInterestHeader> header, 
+//                                 Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
+// {
+//   receivedInterests++;
+// }
 
-static void OnTransmittedData (std::string context, Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> packet,
-                               CcnxL3Protocol::ContentObjectSource source, Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
-{
-    transmittedData++;    
-}
+// static void OnDroppedInterest (std::string context, Ptr<const CcnxInterestHeader> header, CcnxL3Protocol::DropReason reason,
+//                                Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
+// {
+//   droppedInterests++;
+// }
 
-static void OnReceivedData (std::string context, Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> packet,
-                            Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
-{
-    receivedData++;
-}
+// static void OnTransmittedData (std::string context, Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> packet,
+//                                CcnxL3Protocol::ContentObjectSource source, Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
+// {
+//     transmittedData++;    
+// }
 
-static void OnDroppedData (std::string context, Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> packet,
-                           CcnxL3Protocol::DropReason reason, Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face )
-{
-    droppedData++;
-}
+// static void OnReceivedData (std::string context, Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> packet,
+//                             Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face)
+// {
+//     receivedData++;
+// }
+
+// static void OnDroppedData (std::string context, Ptr<const CcnxContentObjectHeader> header, Ptr<const Packet> packet,
+//                            CcnxL3Protocol::DropReason reason, Ptr<Ccnx> ccnx, Ptr<const CcnxFace> face )
+// {
+//     droppedData++;
+// }
 
 int 
 main (int argc, char *argv[])
 {
-  Packet::EnableChecking();
-  Packet::EnablePrinting();
+  // Packet::EnableChecking();
+  // Packet::EnablePrinting();
   string input ("./src/NDNabstraction/examples/abilene-topology.txt");
-    
+
   Time finishTime = Seconds (20.0);
   string animationFile;
   string strategy = "ns3::CcnxFloodingStrategy";
@@ -121,6 +192,9 @@
   cmd.AddValue ("strategy", "CCNx forwarding strategy", strategy);
   cmd.Parse (argc, argv);
     
+  ConfigStore config;
+  config.ConfigureDefaults ();
+    
   // ------------------------------------------------------------
   // -- Read topology data.
   // --------------------------------------------
@@ -137,13 +211,6 @@
       return -1;
     }
 
-  int droppedInterests[nodes.GetN()];
-  int congestedInterests[nodes.GetN()];
-  int sentInterests[nodes.GetN()];
-  (void)droppedInterests;
-  (void)sentInterests;
-  (void)congestedInterests;
-    
   SpringMobilityHelper::InstallSprings (reader.LinksBegin (), reader.LinksEnd ());
 
   // InternetStackHelper stack;
@@ -168,8 +235,8 @@
   CcnxConsumerHelper consumerHelper ("/5");
   ApplicationContainer consumers = consumerHelper.Install (Names::Find<Node> ("/abilene", "ATLAng"));
     
-  CcnxProducerHelper producerHelper ("/5",1024);
-  ApplicationContainer producers = producerHelper.Install (Names::Find<Node> ("/abilene", "IPLSng"));
+  // CcnxProducerHelper producerHelper ("/5",1024);
+  // ApplicationContainer producers = producerHelper.Install (Names::Find<Node> ("/abilene", "IPLSng"));
 
   // // Populate FIB based on IPv4 global routing controller
   // ccnxHelper.InstallFakeGlobalRoutes ();
@@ -178,7 +245,7 @@
   // Simulator::Schedule (Seconds (1.0), PrintFIBs);
   // PrintFIBs ();
 
-  Simulator::Schedule (Seconds (10.0), PrintTime);
+  // Simulator::Schedule (Seconds (10.0), PrintTime);
 
   Simulator::Stop (finishTime);
 
@@ -189,38 +256,50 @@
       anim->SetMobilityPollInterval (Seconds (1));
     }
 
-  NS_LOG_INFO ("Configure Tracing.");
-  // first, pcap tracing in non-promiscuous mode
-  //ccnxHelper.EnablePcapAll ("csma-ping", false);
-  // then, print what the packet sink receives.
-  //Config::ConnectWithoutContext ("/NodeList/3/ApplicationList/0/$ns3::PacketSink/Rx", 
-  //                                 MakeCallback (&SinkRx));
-  // finally, print the ping rtts.
-    //Packet::EnablePrinting ();
-  Config::Connect("/NodeList/*/ns3::CcnxL3Protocol/TransmittedInterestTrace",
-                                 MakeCallback (&OnTransmittedInterest));
-  Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/ReceivedInterestTrace",
-                     MakeCallback (&OnReceivedInterest));
-  Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/DroppedInterestTrace",
-                     MakeCallback (&OnDroppedInterest));
-    
-  Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/ReceivedDataTrace",
-                     MakeCallback (&OnReceivedData));
-  Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/TransmittedDataTrace",
-                     MakeCallback (&OnTransmittedData));
-  Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/DroppedDataTrace",
-                     MakeCallback (&OnDroppedData));
+  // NS_LOG_INFO ("Configure Tracing.");
+  AggregateTrace trace;
+  Config::Connect ("/NodeList/*/ApplicationList/*/$ns3::CcnxConsumer/TransmittedInterests",
+                   MakeCallback (&AggregateTrace::TransmittedInterests, &trace));
 
+  Config::Connect ("/NodeList/*/ApplicationList/*/$ns3::CcnxConsumer/ReceivedNacks",
+                   MakeCallback (&AggregateTrace::ReceivedNacks, &trace));
+
+  Config::Connect ("/NodeList/*/ApplicationList/*/$ns3::CcnxProducer/ReceivedInterests",
+                   MakeCallback (&AggregateTrace::ReceivedInterests, &trace));
+  
+  Config::Connect ("/NodeList/*/ApplicationList/*/$ns3::CcnxProducer/TransmittedContentObjects",
+                   MakeCallback (&AggregateTrace::TransmittedData, &trace));
+
+  Config::Connect ("/NodeList/*/ApplicationList/*/$ns3::CcnxConsumer/ReceivedContentObjects",
+                   MakeCallback (&AggregateTrace::ReceivedData, &trace));
+
+  // Config::Connect("/NodeList/*/ns3::CcnxL3Protocol/TransmittedInterestTrace",
+  //                                MakeCallback (&OnTransmittedInterest));
+  // Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/ReceivedInterestTrace",
+  //                    MakeCallback (&OnReceivedInterest));
+  // Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/DroppedInterestTrace",
+  //                    MakeCallback (&OnDroppedInterest));
+    
+  // Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/ReceivedDataTrace",
+  //                    MakeCallback (&OnReceivedData));
+  // Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/TransmittedDataTrace",
+  //                    MakeCallback (&OnTransmittedData));
+  // Config::Connect ("/NodeList/*/ns3::CcnxL3Protocol/DroppedDataTrace",
+  //                    MakeCallback (&OnDroppedData));
+  
+  config.ConfigureAttributes ();  
+  
   NS_LOG_INFO ("Run Simulation.");
   Simulator::Run ();
   Simulator::Destroy ();
   NS_LOG_INFO ("Done.");
 
-  NS_LOG_INFO("Total received interests = " << receivedInterests);
-  NS_LOG_INFO("Total transmitted interests = " << transmittedInterests);
-  NS_LOG_INFO("Total dropped interests = " << droppedInterests);
-  NS_LOG_INFO("Total received data = " << receivedData);
-  NS_LOG_INFO("Total transmitted data = " << transmittedData);
-  NS_LOG_INFO("Total dropped data = " << droppedData);
+  // NS_LOG_INFO("Total received interests = " << receivedInterests);
+  // NS_LOG_INFO("Total transmitted interests = " << transmittedInterests);
+  // NS_LOG_INFO("Total dropped interests = " << droppedInterests);
+  // NS_LOG_INFO("Total received data = " << receivedData);
+  // NS_LOG_INFO("Total transmitted data = " << transmittedData);
+  // NS_LOG_INFO("Total dropped data = " << droppedData);
+  NS_LOG_INFO (trace);
   return 0;
 }
