diff --git a/helper/ndn-global-routing-helper.cc b/helper/ndn-global-routing-helper.cc
index 1eb9d1f..135cd4c 100644
--- a/helper/ndn-global-routing-helper.cc
+++ b/helper/ndn-global-routing-helper.cc
@@ -60,7 +60,7 @@
 GlobalRoutingHelper::Install (Ptr<Node> node)
 {
   NS_LOG_LOGIC ("Node: " << node->GetId ());
-  
+
   Ptr<L3Protocol> ndn = node->GetObject<L3Protocol> ();
   NS_ASSERT_MSG (ndn != 0, "Cannot install GlobalRoutingHelper before Ndn is installed on a node");
 
@@ -70,10 +70,10 @@
       NS_LOG_DEBUG ("GlobalRouter is already installed: " << gr);
       return; // already installed
     }
-  
+
   gr = CreateObject<GlobalRouter> ();
   node->AggregateObject (gr);
-  
+
   for (uint32_t faceId = 0; faceId < ndn->GetNFaces (); faceId++)
     {
       Ptr<NetDeviceFace> face = DynamicCast<NetDeviceFace> (ndn->GetFace (faceId));
@@ -82,14 +82,14 @@
 	  NS_LOG_DEBUG ("Skipping non-netdevice face");
 	  continue;
 	}
-      
+
       Ptr<NetDevice> nd = face->GetNetDevice ();
       if (nd == 0)
 	{
 	  NS_LOG_DEBUG ("Not a NetDevice associated with NetDeviceFace");
 	  continue;
 	}
-      
+
       Ptr<Channel> ch = nd->GetChannel ();
 
       if (ch == 0)
@@ -107,7 +107,7 @@
 
 	      Ptr<Node> otherNode = otherSide->GetNode ();
 	      NS_ASSERT (otherNode != 0);
-	      
+
 	      Ptr<GlobalRouter> otherGr = otherNode->GetObject<GlobalRouter> ();
 	      if (otherGr == 0)
 		{
@@ -126,7 +126,7 @@
 	      Install (ch);
 	    }
 	  grChannel = ch->GetObject<GlobalRouter> ();
-	  
+
 	  gr->AddIncidency (0, grChannel);
 	}
     }
@@ -143,7 +143,7 @@
 
   gr = CreateObject<GlobalRouter> ();
   channel->AggregateObject (gr);
-  
+
   for (uint32_t deviceId = 0; deviceId < channel->GetNDevices (); deviceId ++)
     {
       Ptr<NetDevice> dev = channel->GetDevice (deviceId);
@@ -189,7 +189,7 @@
 		 "GlobalRouter is not installed on the node");
 
   Ptr<NameComponents> name = Create<NameComponents> (boost::lexical_cast<NameComponents> (prefix));
-  gr->AddLocalPrefix (name);  
+  gr->AddLocalPrefix (name);
 }
 
 void
@@ -213,16 +213,31 @@
 }
 
 void
+GlobalRoutingHelper::AddOriginsForAll ()
+{
+  for (NodeList::Iterator node = NodeList::Begin (); node != NodeList::End (); node ++)
+    {
+      Ptr<GlobalRouter> gr = (*node)->GetObject<GlobalRouter> ();
+      string name = Names::FindName (*node);
+
+      if (gr != 0 && !name.empty ())
+        {
+          AddOrigin ("/"+name, *node);
+        }
+    }
+}
+
+void
 GlobalRoutingHelper::CalculateRoutes ()
 {
   /**
    * Implementation of route calculation is heavily based on Boost Graph Library
    * See http://www.boost.org/doc/libs/1_49_0/libs/graph/doc/table_of_contents.html for more details
    */
-  
+
   BOOST_CONCEPT_ASSERT(( VertexListGraphConcept< NdnGlobalRouterGraph > ));
   BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept< NdnGlobalRouterGraph > ));
-  
+
   NdnGlobalRouterGraph graph;
   typedef graph_traits < NdnGlobalRouterGraph >::vertex_descriptor vertex_descriptor;
 
@@ -237,7 +252,7 @@
 	  NS_LOG_DEBUG ("Node " << (*node)->GetId () << " does not export GlobalRouter interface");
 	  continue;
 	}
-  
+
       DistancesMap    distances;
 
       dijkstra_shortest_paths (graph, source,
@@ -259,7 +274,7 @@
       Ptr<Fib>  fib  = source->GetObject<Fib> ();
       fib->InvalidateAll ();
       NS_ASSERT (fib != 0);
-      
+
       NS_LOG_DEBUG ("Reachability from Node: " << source->GetObject<Node> ()->GetId ());
       for (DistancesMap::iterator i = distances.begin ();
 	   i != distances.end ();
@@ -281,10 +296,10 @@
                       NS_LOG_DEBUG (" prefix " << prefix << " reachable via face " << *i->second.get<0> ()
                                     << " with distance " << i->second.get<1> ()
                                     << " with delay " << i->second.get<2> ());
-                    
+
                       Ptr<fib::Entry> entry = fib->Add (prefix, i->second.get<0> (), i->second.get<1> ());
                       entry->SetRealDelayToProducer (i->second.get<0> (), Seconds (i->second.get<2> ()));
-                        
+
                       Ptr<Limits> faceLimits = i->second.get<0> ()->GetObject<Limits> ();
 
                       Ptr<Limits> fibLimits = entry->GetObject<Limits> ();
diff --git a/helper/ndn-global-routing-helper.h b/helper/ndn-global-routing-helper.h
index 17493d2..983c7b0 100644
--- a/helper/ndn-global-routing-helper.h
+++ b/helper/ndn-global-routing-helper.h
@@ -48,7 +48,7 @@
   void
   Install (Ptr<Node> node);
 
-  
+
   /**
    * @brief Install GlobalRouter interface on nodes
    *
@@ -80,7 +80,7 @@
    */
   void
   AddOrigins (const std::string &prefix, const NodeContainer &nodes);
-  
+
   /**
    * @brief Add `prefix' as origin on node `nodeName'
    * @param prefix     Prefix that is originated by node, e.g., node is a producer for this prefix
@@ -90,6 +90,12 @@
   AddOrigin (const std::string &prefix, const std::string &nodeName);
 
   /**
+   * @brief Add origin to each node based on the node's name (using Names class)
+   */
+  void
+  AddOriginsForAll ();
+
+  /**
    * @brief Calculate for every node shortest path trees and install routes to all prefix origins
    */
   void
diff --git a/plugins/tracers-broken/tracers/ipv4-app-tracer.cc b/utils/tracers/ipv4-app-tracer.cc
similarity index 100%
rename from plugins/tracers-broken/tracers/ipv4-app-tracer.cc
rename to utils/tracers/ipv4-app-tracer.cc
diff --git a/plugins/tracers-broken/tracers/ipv4-app-tracer.h b/utils/tracers/ipv4-app-tracer.h
similarity index 100%
rename from plugins/tracers-broken/tracers/ipv4-app-tracer.h
rename to utils/tracers/ipv4-app-tracer.h
diff --git a/plugins/tracers-broken/tracers/ipv4-l3-tracer.cc b/utils/tracers/ipv4-l3-tracer.cc
similarity index 94%
rename from plugins/tracers-broken/tracers/ipv4-l3-tracer.cc
rename to utils/tracers/ipv4-l3-tracer.cc
index ed2cb9c..8e36d26 100644
--- a/plugins/tracers-broken/tracers/ipv4-l3-tracer.cc
+++ b/utils/tracers/ipv4-l3-tracer.cc
@@ -20,19 +20,16 @@
 
 #include "ipv4-l3-tracer.h"
 #include "ns3/node.h"
-#include "ns3/packet.h"
 #include "ns3/config.h"
 #include "ns3/names.h"
 #include "ns3/callback.h"
-#include "ns3/ccnx-app.h"
-#include "ns3/ccnx-face.h"
 
 #include <boost/lexical_cast.hpp>
 
 using namespace std;
 
 namespace ns3 {
-    
+
 Ipv4L3Tracer::Ipv4L3Tracer (Ptr<Node> node)
 : m_nodePtr (node)
 {
diff --git a/plugins/tracers-broken/tracers/ipv4-l3-tracer.h b/utils/tracers/ipv4-l3-tracer.h
similarity index 100%
rename from plugins/tracers-broken/tracers/ipv4-l3-tracer.h
rename to utils/tracers/ipv4-l3-tracer.h
diff --git a/plugins/tracers-broken/tracers/ipv4-rate-l3-tracer.cc b/utils/tracers/ipv4-rate-l3-tracer.cc
similarity index 74%
rename from plugins/tracers-broken/tracers/ipv4-rate-l3-tracer.cc
rename to utils/tracers/ipv4-rate-l3-tracer.cc
index e97ba18..280301d 100644
--- a/plugins/tracers-broken/tracers/ipv4-rate-l3-tracer.cc
+++ b/utils/tracers/ipv4-rate-l3-tracer.cc
@@ -24,12 +24,54 @@
 #include "ns3/config.h"
 #include "ns3/callback.h"
 #include "ns3/simulator.h"
+#include "ns3/node-list.h"
+#include "ns3/node.h"
+#include "ns3/log.h"
 
 #include "ns3/ipv4-header.h"
 
+#include <boost/lexical_cast.hpp>
+
+using namespace boost;
+using namespace std;
+
+NS_LOG_COMPONENT_DEFINE ("Ipv4RateL3Tracer");
+
 namespace ns3 {
-    
-Ipv4RateL3Tracer::Ipv4RateL3Tracer (std::ostream &os, Ptr<Node> node)
+
+boost::tuple< boost::shared_ptr<std::ostream>, std::list<Ptr<Ipv4RateL3Tracer> > >
+Ipv4RateL3Tracer::InstallAll (const std::string &file, Time averagingPeriod/* = Seconds (0.5)*/)
+{
+  std::list<Ptr<Ipv4RateL3Tracer> > tracers;
+  boost::shared_ptr<std::ofstream> outputStream (new std::ofstream ());
+  outputStream->open (file.c_str (), std::ios_base::out | std::ios_base::trunc);
+
+  if (!outputStream->is_open ())
+    return boost::make_tuple (outputStream, tracers);
+
+  for (NodeList::Iterator node = NodeList::Begin ();
+       node != NodeList::End ();
+       node++)
+    {
+      NS_LOG_DEBUG ("Node: " << lexical_cast<string> ((*node)->GetId ()));
+
+      Ptr<Ipv4RateL3Tracer> trace = Create<Ipv4RateL3Tracer> (outputStream, *node);
+      trace->SetAveragingPeriod (averagingPeriod);
+      tracers.push_back (trace);
+    }
+
+  if (tracers.size () > 0)
+    {
+      // *m_l3RateTrace << "# "; // not necessary for R's read.table
+      tracers.front ()->PrintHeader (*outputStream);
+      *outputStream << "\n";
+    }
+
+  return boost::make_tuple (outputStream, tracers);
+}
+
+
+Ipv4RateL3Tracer::Ipv4RateL3Tracer (boost::shared_ptr<std::ostream> os, Ptr<Node> node)
   : Ipv4L3Tracer (node)
   , m_os (os)
 {
@@ -52,9 +94,9 @@
 void
 Ipv4RateL3Tracer::PeriodicPrinter ()
 {
-  Print (m_os);
+  Print (*m_os);
   Reset ();
-  
+
   m_printEvent = Simulator::Schedule (m_period, &Ipv4RateL3Tracer::PeriodicPrinter, this);
 }
 
diff --git a/plugins/tracers-broken/tracers/ipv4-rate-l3-tracer.h b/utils/tracers/ipv4-rate-l3-tracer.h
similarity index 69%
rename from plugins/tracers-broken/tracers/ipv4-rate-l3-tracer.h
rename to utils/tracers/ipv4-rate-l3-tracer.h
index 454ac14..e624c3d 100644
--- a/plugins/tracers-broken/tracers/ipv4-rate-l3-tracer.h
+++ b/utils/tracers/ipv4-rate-l3-tracer.h
@@ -27,6 +27,7 @@
 #include "ns3/event-id.h"
 
 #include <boost/tuple/tuple.hpp>
+#include <boost/shared_ptr.hpp>
 #include <map>
 
 namespace ns3 {
@@ -41,12 +42,26 @@
   /**
    * @brief Network layer tracer constructor
    */
-  Ipv4RateL3Tracer (std::ostream &os, Ptr<Node> node);
+  Ipv4RateL3Tracer (boost::shared_ptr<std::ostream> os, Ptr<Node> node);
   virtual ~Ipv4RateL3Tracer ();
 
+  /**
+   * @brief Helper method to install tracers on all simulation nodes
+   *
+   * @param file File to which traces will be written
+   * @param averagingPeriod Defines averaging period for the rate calculation,
+   *        as well as how often data will be written into the trace file (default, every half second)
+   *
+   * @returns a tuple of reference to output stream and list of tracers. !!! Attention !!! This tuple needs to be preserved
+   *          for the lifetime of simulation, otherwise SEGFAULTs are inevitable
+   *
+   */
+  static boost::tuple< boost::shared_ptr<std::ostream>, std::list<Ptr<Ipv4RateL3Tracer> > >
+  InstallAll (const std::string &file, Time averagingPeriod = Seconds (0.5));
+
   void
   SetAveragingPeriod (const Time &period);
-  
+
   virtual void
   PrintHeader (std::ostream &os) const;
 
@@ -68,12 +83,12 @@
 private:
   void
   PeriodicPrinter ();
-  
+
   void
   Reset ();
 
 private:
-  std::ostream& m_os;
+  boost::shared_ptr<std::ostream> m_os;
   Time m_period;
   EventId m_printEvent;
 
diff --git a/plugins/tracers-broken/tracers/ipv4-seqs-app-tracer.cc b/utils/tracers/ipv4-seqs-app-tracer.cc
similarity index 100%
rename from plugins/tracers-broken/tracers/ipv4-seqs-app-tracer.cc
rename to utils/tracers/ipv4-seqs-app-tracer.cc
diff --git a/plugins/tracers-broken/tracers/ipv4-seqs-app-tracer.h b/utils/tracers/ipv4-seqs-app-tracer.h
similarity index 97%
rename from plugins/tracers-broken/tracers/ipv4-seqs-app-tracer.h
rename to utils/tracers/ipv4-seqs-app-tracer.h
index 4805968..9ae24ac 100644
--- a/plugins/tracers-broken/tracers/ipv4-seqs-app-tracer.h
+++ b/utils/tracers/ipv4-seqs-app-tracer.h
@@ -21,7 +21,7 @@
 #ifndef IPV4_SEQS_APP_TRACER_H
 #define IPV4_SEQS_APP_TRACER_H
 
-#include "ns3/ipv4-app-tracer.h"
+#include "ipv4-app-tracer.h"
 
 namespace ns3 {
 
@@ -40,7 +40,7 @@
   virtual void
   Rx (std::string context,
       const Ipv4Header &, Ptr<const Packet>, uint32_t);
-  
+
   virtual void
   Tx (std::string context,
       const Ipv4Header &, Ptr<const Packet>, uint32_t);
