diff --git a/examples/annotated-topology-read-example.cc b/examples/annotated-topology-read-example.cc
index 63e42c4..7aff4fe 100644
--- a/examples/annotated-topology-read-example.cc
+++ b/examples/annotated-topology-read-example.cc
@@ -30,18 +30,22 @@
 #include "ns3/ipv4-list-routing-helper.h"
 #include "ns3/annotated-topology-reader.h"
 #include <list>
-//#include "ns3/visualizer-module.h"
+#include "ns3/visualizer-module.h"
+#include "ns3/ccnx.h"
+#include "ns3/ipv4-global-routing-helper.h"
+#include "ns3/NDNabstraction-module.h"
 
 using namespace ns3;
 using namespace std;
 
-NS_LOG_COMPONENT_DEFINE ("AnnotatedTopologyReadingExample");
+NS_LOG_COMPONENT_DEFINE ("AnnotatedTopologyExample");
 
 int main (int argc, char *argv[])
 {
     GlobalValue::Bind ("SimulatorImplementationType", StringValue
                        ("ns3::VisualSimulatorImpl"));
-    
+    Packet::EnableChecking();
+    Packet::EnablePrinting();
     string input ("/Users/iliamo/ns3-abstract-ndn/ns-3.11/src/NDNabstraction/examples/simpletopology.txt");
     
     // Set up command line parameters used to control the experiment.
@@ -71,6 +75,16 @@
         return -1;
     }
     
+    
+    for(uint32_t j=0; j<nodes.GetN(); j++)
+    {
+        uint32_t name = j+1;
+        std::stringstream ss;
+        ss<<name;
+        Names::Add (ss.str(), nodes.Get (j));
+        NS_LOG_INFO("Name = " << ss.str());
+    }
+ 
     // ------------------------------------------------------------
     // -- Create nodes and network stacks
     // --------------------------------------------
@@ -79,15 +93,30 @@
     
     
     //routing
-    Ipv4StaticRoutingHelper staticRouting;
-    Ipv4ListRoutingHelper listRH;
-    listRH.Add (staticRouting, 0);
-    stack.SetRoutingHelper (listRH);  // has effect on the next Install ()
-    stack.Install (nodes);
+    //Ipv4StaticRoutingHelper staticRouting;
+    //Ipv4ListRoutingHelper listRH;
+    //listRH.Add (staticRouting, 0);
+    //stack.SetRoutingHelper (listRH);  // has effect on the next Install ()
+    //stack.Install (nodes);
+    
+    Ipv4GlobalRoutingHelper ipv4RoutingHelper;
+    // Ptr<Ipv4RoutingHelper> ipv4RoutingHelper = stack.GetRoutingHelper ();
+    stack.SetRoutingHelper (ipv4RoutingHelper);
+    stack.Install(nodes);
     
     NS_LOG_INFO ("creating ip4 addresses");
     Ipv4AddressHelper address;
     address.SetBase ("10.0.0.0", "255.255.255.252");
+   
+    // // Create router nodes, initialize routing database and set up the routing
+    // // tables in the nodes.
+    Ipv4GlobalRoutingHelper::PopulateRoutingTables ();
+    
+    /*grid.AssignIpv4Addresses (
+                              Ipv4AddressHelper("10.1.0.0", "255.255.255.0"),
+                              Ipv4AddressHelper("10.2.0.0", "255.255.255.0")
+                              );
+*/
     
     int totlinks = reader->LinksSize ();
     
@@ -106,8 +135,39 @@
     reader->ApplySettings(ndc,nc);
     ///*** settings applied
     
-    
+    NS_LOG_INFO("installing ccnx stack");
+    CcnxStackHelper ccnx(Ccnx::NDN_FLOODING);
+    Ptr<CcnxFaceContainer> cf = ccnx.Install (nodes);
      
+    NS_LOG_INFO ("Installing Applications");
+    CcnxConsumerHelper helper ("/3");
+    ApplicationContainer app = helper.Install (nodes.Get(1));
+    app.Start (Seconds (1.0));
+    app.Stop (Seconds (1000.05));
+    
+    /*CcnxConsumerHelper helper2 ("/4");
+     ApplicationContainer app2 = helper2.Install(c.Get(5));
+     app2.Start (Seconds (1.0));
+     app2.Stop (Seconds (1000.05));
+     */
+    CcnxProducerHelper helper3 ("/3",120);
+    ApplicationContainer app3 = helper3.Install(nodes.Get(6));
+    app3.Start(Seconds(0.0));
+    app3.Stop(Seconds(1500.0));
+    /*
+     CcnxProducerHelper helper4 ("/4",150);
+     ApplicationContainer app4 = helper4.Install(c.Get(0));
+     app4.Start(Seconds(0.0));
+     app4.Stop(Seconds(1500.0));
+     */
+
+    NS_LOG_INFO("Routes");
+    ccnx.AddRoute("1","/3",0,1);
+    ccnx.AddRoute("3","/3",1,1);
+    ccnx.AddRoute("3","/3",2,2);
+    /*ccnx.AddRoute("4","/3",1,1);
+    ccnx.AddRoute("5","/3",2,1);
+*/
     
     // it creates little subnets, one for each couple of nodes.
     NS_LOG_INFO ("creating ipv4 interfaces");
