diff --git a/apps/ccnx-app.h b/apps/ccnx-app.h
index cf333a4..c83ee0f 100644
--- a/apps/ccnx-app.h
+++ b/apps/ccnx-app.h
@@ -91,7 +91,7 @@
   virtual void
   DoDispose ();
 
-  // inherited from Application base class.
+  // inherited from Application base class. Originally they were private
   virtual void
   StartApplication ();    // Called at time specified by Start
 
diff --git a/bindings/modulegen__gcc_ILP32.py b/bindings/modulegen__gcc_ILP32.py
index 981408f..000c698 100644
--- a/bindings/modulegen__gcc_ILP32.py
+++ b/bindings/modulegen__gcc_ILP32.py
@@ -1364,6 +1364,10 @@
     cls.add_method('AddOrigin', 
                    'void', 
                    [param('std::string const &', 'prefix'), param('std::string const &', 'nodeName')])
+    ## ccnx-global-routing-helper.h (module 'NDNabstraction'): void ns3::CcnxGlobalRoutingHelper::AddOrigins(std::string const & prefix, ns3::NodeContainer const & nodes) [member function]
+    cls.add_method('AddOrigins', 
+                   'void', 
+                   [param('std::string const &', 'prefix'), param('ns3::NodeContainer const &', 'nodes')])
     ## ccnx-global-routing-helper.h (module 'NDNabstraction'): void ns3::CcnxGlobalRoutingHelper::CalculateRoutes() [member function]
     cls.add_method('CalculateRoutes', 
                    'void', 
@@ -4728,12 +4732,12 @@
     cls.add_method('StartApplication', 
                    'void', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   visibility='private', is_virtual=True)
     ## application.h (module 'network'): void ns3::Application::StopApplication() [member function]
     cls.add_method('StopApplication', 
                    'void', 
                    [], 
-                   visibility='protected', is_virtual=True)
+                   visibility='private', is_virtual=True)
     return
 
 def register_Ns3AttributeAccessor_methods(root_module, cls):
diff --git a/examples/ccnx-pcap-example.cc b/examples/ccnx-pcap-example.cc
deleted file mode 100644
index f3f9fc8..0000000
--- a/examples/ccnx-pcap-example.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2011 University of California, Los Angeles
- *
- * 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: Ilya Moiseenko <iliamo@cs.ucla.edu>
- */
-
-#include <ctime>
-#include <sstream>
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/applications-module.h"
-#include "ns3/ipv4-static-routing-helper.h"
-#include "ns3/ipv4-list-routing-helper.h"
-#include "ns3/annotated-topology-reader.h"
-#include <list>
-//#include "ns3/visualizer-module.h"
-#include "ns3/ccnx-consumer-helper.h"
-#include "ns3/ccnx-stack-helper.h"
-
-using namespace ns3;
-using namespace std;
-
-NS_LOG_COMPONENT_DEFINE ("CcnxPcapExample");
-
-int main (int argc, char *argv[])
-{
-    Config::SetDefault ("ns3::PointToPointNetDevice::DataRate", StringValue ("10Mbps"));
-    Config::SetDefault ("ns3::PointToPointChannel::Delay", StringValue ("1ms"));
-    
-    NodeContainer c;
-    c.Create (2);
-    
-    NodeContainer n1 = NodeContainer (c.Get (0), c.Get (1));
-    
-    PointToPointHelper p2p;
-    NetDeviceContainer ndc1 = p2p.Install (n1);
-    
-//    CcnxStackHelper ccnx;
-//    Ptr<CcnxFaceContainer> cf = ccnx.Install (c);
-
-    //Ipv4AddressHelper ipv4;
-    //ipv4.SetBase ("192.168.1.0", "255.255.255.0");
-    //Ipv4InterfaceContainer i1 = ipv4.Assign (ndc1);
-    
-    CcnxInterestHeader header;
-    Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
-    (*testname) ("test") ("test2");
-    header.SetName (testname);
-    header.SetNonce (1);
-
-    Packet packet (0);
-    packet.AddHeader (header);
-    
-    Ptr<Node> nd = c.Get(0);
-    Ptr<PointToPointNetDevice> device = nd->GetDevice(nd->GetNDevices()-1)->GetObject<PointToPointNetDevice> ();
-    
-   
-    
-    Ptr<CcnxNameComponents> testname2 = Create<CcnxNameComponents> ();
-    (*testname2) ("test3") ("test4");
-    header.SetName (testname2);
-    header.SetNonce (2);
-    Packet packet2 (0);
-    packet2.AddHeader (header);
-    
-    
-    p2p.EnablePcapAll("pcap-example.pcap");
-    
-    Simulator::Stop (Seconds (20));
-    
-    //NS_LOG_INFO ("Run Simulation.");
-    NS_LOG_INFO("Size1 = " << packet.GetSize());
-    NS_LOG_INFO("Size2 = " << packet2.GetSize());
-    device->Send(packet.Copy(),device->GetBroadcast(),0x7777);
-    NS_LOG_INFO(device->IsLinkUp());
-    device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
-    NS_LOG_INFO(device->IsLinkUp());
-    device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
-    NS_LOG_INFO(device->IsLinkUp());
-    device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
-    device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
-    device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
-    device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
-    device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
-    device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
-    device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
-    device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
-    device->Send(packet2.Copy(),device->GetBroadcast(),0x7777);
-    NS_LOG_INFO ("Run Simulation.");
-    Simulator::Run ();
-    Simulator::Destroy ();
-    NS_LOG_INFO ("Done.");
-}
diff --git a/examples/ccnx-routing-simple.cc b/examples/ccnx-routing-simple.cc
deleted file mode 100644
index 29fd49f..0000000
--- a/examples/ccnx-routing-simple.cc
+++ /dev/null
@@ -1,101 +0,0 @@
-/* -*- 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 "ns3/network-module.h"
-#include "ns3/core-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/ipv4-global-routing-helper.h"
-#include "ns3/point-to-point-grid.h"
-#include "ns3/ipv4-global-routing-helper.h"
-#include "ns3/applications-module.h"
-#include "ns3/NDNabstraction-module.h"
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE ("SimpleRouting");
-
-// Parameters
-uint32_t nNodes = 2;
-uint32_t stopTime = 60;
-
-// void TestDisable (Ptr<Node> node)
-// {
-//   NS_LOG_FUNCTION (node->GetId ());
-  
-//   Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
-//   NS_ASSERT_MSG (ipv4 != 0, "ipv4 should not be null");
-
-//   // The thing I didn't know is that interface status (isUp/isDown) and device status (isLinkUp) are two totally different things.  It is possible to set interface up and down, but there is not an easy way to alter status of device. This similar to reality: it is possible to programmatically disable interface, but to actually disable a link one needs to physically cut the cable
-//   ipv4->SetDown (2);
-// }
-
-void PrintCcnxFib (Ptr<Node> node, Ptr<OutputStreamWrapper> wrapper)
-{
-  Ptr<CcnxFib> fib = node->GetObject<CcnxFib> ();
-  *wrapper->GetStream () << *fib;
-}
-
-int main (int argc, char *argv[])
-{
-  CommandLine cmd;
-  cmd.AddValue ("nNodes", "Number of Router nodes", nNodes);
-  cmd.AddValue ("stopTime", "Time to stop(seconds)", stopTime);
-  cmd.Parse (argc, argv);
-
-  InternetStackHelper stack;
-  CcnxStackHelper ccnxHelper;
-
-  Ipv4GlobalRoutingHelper ipv4RoutingHelper ("ns3::Ipv4GlobalRoutingOrderedNexthops");
-  // Ipv4GlobalRoutingHelper ipv4RoutingHelper ("ns3::Ipv4GlobalRoutingUnorderedNexthops");
-  stack.SetRoutingHelper (ipv4RoutingHelper);
-
-  PointToPointHelper p2p;
-
-  PointToPointGridHelper grid (nNodes, nNodes, p2p);
-  grid.BoundingBox(100,100,270,270);
-  grid.InstallStack (stack);
-  
-  grid.AssignIpv4Addresses (
-                            Ipv4AddressHelper("10.1.0.0", "255.255.255.0"),
-                            Ipv4AddressHelper("10.2.0.0", "255.255.255.0")
-                            );
-
-
-  ccnxHelper.InstallAll ();
-  ccnxHelper.InstallFakeGlobalRoutes ();
-  // ccnxHelper.InstallRouteTo (grid.GetNode (0,0));
-  ccnxHelper.InstallRoutesToAll ();
-
-  // Trace routing tables 
-  Ptr<OutputStreamWrapper> routingStream = Create<OutputStreamWrapper> ("routes.log", std::ios::out);
-  *routingStream->GetStream () << "Node (1,1)\n";
-  ipv4RoutingHelper.PrintRoutingTableAt (Seconds (20), grid.GetNode (1,1), routingStream);
-
-  Simulator::ScheduleWithContext (grid.GetNode (1,1)->GetId (),
-                                  Seconds (20.0), PrintCcnxFib, grid.GetNode (1,1), routingStream);
-  
-  Simulator::Stop (Seconds(160.0));
-  Simulator::Run ();
-  Simulator::Destroy ();
-
-  NS_LOG_INFO ("End of experiment");
-
-  return 0;
-}
diff --git a/helper/ccnx-global-routing-helper.cc b/helper/ccnx-global-routing-helper.cc
index 7adbc84..908937e 100644
--- a/helper/ccnx-global-routing-helper.cc
+++ b/helper/ccnx-global-routing-helper.cc
@@ -189,6 +189,17 @@
 }
 
 void
+CcnxGlobalRoutingHelper::AddOrigins (const std::string &prefix, const NodeContainer &nodes)
+{
+  for (NodeContainer::Iterator node = nodes.Begin ();
+       node != nodes.End ();
+       node++)
+    {
+      AddOrigin (prefix, *node);
+    }
+}
+
+void
 CcnxGlobalRoutingHelper::AddOrigin (const std::string &prefix, const std::string &nodeName)
 {
   Ptr<Node> node = Names::Find<Node> (nodeName);
diff --git a/helper/ccnx-global-routing-helper.h b/helper/ccnx-global-routing-helper.h
index 92c10c6..1bf4b59 100644
--- a/helper/ccnx-global-routing-helper.h
+++ b/helper/ccnx-global-routing-helper.h
@@ -72,6 +72,14 @@
   AddOrigin (const std::string &prefix, Ptr<Node> node);
 
   /**
+   * @brief Add `prefix' as origin on all `nodes'
+   * @param prefix Prefix that is originated by nodes
+   * @param nodes NodeContainer
+   */
+  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
    * @param nodeName   Name of the node that is associated with Ptr<Node> using ns3::Names
