diff --git a/README b/README
new file mode 100644
index 0000000..d0bf73d
--- /dev/null
+++ b/README
@@ -0,0 +1,2 @@
+NDN module requires a number of patches to be applied on NS-3.
+Patches are in patches/ folder
diff --git a/patches/0001-point-to-point-Add-support-of-PPP-Ethernet-and-Ether.patch b/patches/0001-point-to-point-Add-support-of-PPP-Ethernet-and-Ether.patch
new file mode 100644
index 0000000..2af712e
--- /dev/null
+++ b/patches/0001-point-to-point-Add-support-of-PPP-Ethernet-and-Ether.patch
@@ -0,0 +1,49 @@
+From 4a928511196fd80e9e9c43646d916e2d6fbc3190 Mon Sep 17 00:00:00 2001
+From: Ilya Moiseenko <iliamo@ucla.edu>
+Date: Thu, 1 Sep 2011 17:41:00 -0700
+Subject: [PATCH] point-to-point: Add support of PPP->Ethernet and
+ Ethernet->PPP frame type conversion for CCNx protocol
+
+point-to-point: Adding support for CCNx payload in PppHeader::Print method
+---
+ src/point-to-point/model/point-to-point-net-device.cc |    2 ++
+ src/point-to-point/model/ppp-header.cc                |    3 +++
+ 2 files changed, 5 insertions(+)
+
+diff --git a/src/point-to-point/model/point-to-point-net-device.cc b/src/point-to-point/model/point-to-point-net-device.cc
+index ca81c53..775ef00 100644
+--- a/src/point-to-point/model/point-to-point-net-device.cc
++++ b/src/point-to-point/model/point-to-point-net-device.cc
+@@ -607,6 +607,7 @@ PointToPointNetDevice::PppToEther (uint16_t proto)
+     {
+     case 0x0021: return 0x0800;   //IPv4
+     case 0x0057: return 0x86DD;   //IPv6
++    case 0x0077: return 0x7777;   //CCNx
+     default: NS_ASSERT_MSG (false, "PPP Protocol number not defined!");
+     }
+   return 0;
+@@ -619,6 +620,7 @@ PointToPointNetDevice::EtherToPpp (uint16_t proto)
+     {
+     case 0x0800: return 0x0021;   //IPv4
+     case 0x86DD: return 0x0057;   //IPv6
++    case 0x7777: return 0x0077;   //CCNx
+     default: NS_ASSERT_MSG (false, "PPP Protocol number not defined!");
+     }
+   return 0;
+diff --git a/src/point-to-point/model/ppp-header.cc b/src/point-to-point/model/ppp-header.cc
+index 4650fb0..7e000bd 100644
+--- a/src/point-to-point/model/ppp-header.cc
++++ b/src/point-to-point/model/ppp-header.cc
+@@ -66,6 +66,9 @@ PppHeader::Print (std::ostream &os) const
+     case 0x0057: /* IPv6 */
+       proto = "IPv6 (0x0057)";
+       break;
++    case 0x0077: /* CCNx */
++      proto = "CCNx (0x0077)";
++      break;
+     default:
+       NS_ASSERT_MSG (false, "PPP Protocol number not defined!");
+     }
+-- 
+1.7.10.2
+
diff --git a/patches/0001-point-to-point-netanim-Adding-ChannelID-to-PointToPo.patch b/patches/0001-point-to-point-netanim-Adding-ChannelID-to-PointToPo.patch
new file mode 100644
index 0000000..f327f6a
--- /dev/null
+++ b/patches/0001-point-to-point-netanim-Adding-ChannelID-to-PointToPo.patch
@@ -0,0 +1,72 @@
+From 9ed23508a72afd3780b041b2fd00a50e1ff91b4c Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Mon, 23 Apr 2012 13:49:37 -0700
+Subject: [PATCH] point-to-point, netanim: Adding ChannelID to
+ PointToPointChannel trace
+
+---
+ src/netanim/model/animation-interface.cc           |    4 +++-
+ src/netanim/model/animation-interface.h            |    3 ++-
+ src/point-to-point/model/point-to-point-channel.cc |    2 +-
+ src/point-to-point/model/point-to-point-channel.h  |    3 ++-
+ 4 files changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/src/netanim/model/animation-interface.cc b/src/netanim/model/animation-interface.cc
+index d6a3551..9215abf 100644
+--- a/src/netanim/model/animation-interface.cc
++++ b/src/netanim/model/animation-interface.cc
+@@ -676,7 +676,9 @@ void AnimationInterface::WriteDummyPacket ()
+ 
+ 
+ }
+-void AnimationInterface::DevTxTrace (std::string context, Ptr<const Packet> p,
++void AnimationInterface::DevTxTrace (std::string context,
++                                     uint32_t, // channel
++                                     Ptr<const Packet> p,
+                                      Ptr<NetDevice> tx, Ptr<NetDevice> rx,
+                                      Time txTime, Time rxTime)
+ {
+diff --git a/src/netanim/model/animation-interface.h b/src/netanim/model/animation-interface.h
+index 4a3ffb9..db58d89 100644
+--- a/src/netanim/model/animation-interface.h
++++ b/src/netanim/model/animation-interface.h
+@@ -288,7 +288,8 @@ private:
+   bool ServerPortSet;
+ 
+   void DevTxTrace (std::string context,
+-                   Ptr<const Packet> p,
++                   uint32_t,
++		   Ptr<const Packet> p,
+                    Ptr<NetDevice> tx,
+                    Ptr<NetDevice> rx,
+                    Time txTime,
+diff --git a/src/point-to-point/model/point-to-point-channel.cc b/src/point-to-point/model/point-to-point-channel.cc
+index d6a6938..5bc4c9c 100644
+--- a/src/point-to-point/model/point-to-point-channel.cc
++++ b/src/point-to-point/model/point-to-point-channel.cc
+@@ -98,7 +98,7 @@ PointToPointChannel::TransmitStart (
+                                   m_link[wire].m_dst, p);
+ 
+   // Call the tx anim callback on the net device
+-  m_txrxPointToPoint (p, src, m_link[wire].m_dst, txTime, txTime + m_delay);
++  m_txrxPointToPoint (GetId (), p, src, m_link[wire].m_dst, txTime, txTime + m_delay);
+   return true;
+ }
+ 
+diff --git a/src/point-to-point/model/point-to-point-channel.h b/src/point-to-point/model/point-to-point-channel.h
+index 4b0b777..a364ab9 100644
+--- a/src/point-to-point/model/point-to-point-channel.h
++++ b/src/point-to-point/model/point-to-point-channel.h
+@@ -137,7 +137,8 @@ private:
+    *
+    * @see class CallBackTraceSource
+    */
+-  TracedCallback<Ptr<const Packet>, // Packet being transmitted
++  TracedCallback<uint32_t,          // channel ID
++                 Ptr<const Packet>, // Packet being transmitted
+                  Ptr<NetDevice>,    // Transmitting NetDevice
+                  Ptr<NetDevice>,    // Receiving NetDevice
+                  Time,              // Amount of time to transmit the pkt
+-- 
+1.7.10.2
+
diff --git a/patches/0002-core-openflow-Moving-boost-related-configuration-to-.patch b/patches/0002-core-openflow-Moving-boost-related-configuration-to-.patch
new file mode 100644
index 0000000..0e226e3
--- /dev/null
+++ b/patches/0002-core-openflow-Moving-boost-related-configuration-to-.patch
@@ -0,0 +1,73 @@
+From 63e2f7d75601540169f62dea0b8aa17fda34812a Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Wed, 29 Feb 2012 10:07:08 -0800
+Subject: [PATCH] core+openflow: Moving `boost`-related configuration to main
+ wscript.
+
+There is a problem when two different modules require different boost
+libs.  Only requirements of the last module are actually picked up by
+the build system.
+---
+ src/openflow/wscript |   10 +---------
+ wscript              |    9 +++++++++
+ 2 files changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/src/openflow/wscript b/src/openflow/wscript
+index b18d2c1..21c483a 100644
+--- a/src/openflow/wscript
++++ b/src/openflow/wscript
+@@ -2,23 +2,15 @@
+ 
+ import os
+ import Options
++import Logs
+ from waflib.Errors import WafError
+ 
+ def options(opt):
+     opt.add_option('--with-openflow',
+ 		   help=('Path to OFSID source for NS-3 OpenFlow Integration support'),
+ 		   default='', dest='with_openflow')
+-    opt.tool_options('boost', tooldir=["waf-tools"])
+ 
+ def configure(conf):
+-    try:
+-        conf.check_tool('boost')
+-        conf.check_boost(lib='signals filesystem')
+-        if not conf.env.LIB_BOOST:
+-            conf.check_boost(lib='signals filesystem', libpath="/usr/lib64")
+-    except WafError:
+-        conf.env['LIB_BOOST'] = []
+-
+     if not conf.env.LIB_BOOST:
+ 	conf.report_optional_feature("openflow", "NS-3 OpenFlow Integration", False,
+ 				     "Required boost libraries not found")
+diff --git a/wscript b/wscript
+index 05440fa..c60fd18 100644
+--- a/wscript
++++ b/wscript
+@@ -125,6 +125,7 @@ def options(opt):
+     opt.load('compiler_cxx')
+     opt.load('cflags')
+     opt.load('gnu_dirs')
++    opt.tool_options('boost', tooldir=["waf-tools"])
+ 
+     opt.add_option('--cwd',
+                    help=('Set the working directory for a program.'),
+@@ -364,6 +365,14 @@ def configure(conf):
+                 conf.report_optional_feature("static", "Static build", False,
+                                              "Link flag -Wl,--whole-archive,-Bstatic does not work")
+ 
++    try:
++        conf.check_tool('boost')
++        conf.check_boost(lib='signals filesystem iostreams regex')
++        if not conf.env.LIB_BOOST:
++            conf.check_boost(lib='signals filesystem iostreams regex', libpath="/usr/lib64")
++    except WafError:
++        conf.env['LIB_BOOST'] = []
++
+     # Set this so that the lists won't be printed at the end of this
+     # configure command.
+     conf.env['PRINT_BUILT_MODULES_AT_END'] = False
+-- 
+1.7.10.2
+
diff --git a/patches/0003-internet-Making-rtt-estimator.h-of-the-Internet-modu.patch b/patches/0003-internet-Making-rtt-estimator.h-of-the-Internet-modu.patch
new file mode 100644
index 0000000..67072de
--- /dev/null
+++ b/patches/0003-internet-Making-rtt-estimator.h-of-the-Internet-modu.patch
@@ -0,0 +1,25 @@
+From 55b3eea8f073c83e1dfccdf7e43c5746aea0af68 Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Mon, 9 Jan 2012 18:39:26 -0800
+Subject: [PATCH] internet: Making rtt-estimator.h of the Internet module
+ accessible to other modules
+
+---
+ src/internet/wscript |    1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/internet/wscript b/src/internet/wscript
+index e250a1e..0090ae3 100644
+--- a/src/internet/wscript
++++ b/src/internet/wscript
+@@ -279,6 +279,7 @@ def build(bld):
+         'helper/ipv6-interface-container.h',
+         'helper/ipv6-routing-helper.h',
+         'model/ipv6-address-generator.h',
++        'model/rtt-estimator.h',
+        ]
+ 
+     if bld.env['NSC_ENABLED']:
+-- 
+1.7.10.2
+
diff --git a/patches/0004-visualizer-Adding-plugin-to-display-a-CCNx-FIB-state.patch b/patches/0004-visualizer-Adding-plugin-to-display-a-CCNx-FIB-state.patch
new file mode 100644
index 0000000..450c374
--- /dev/null
+++ b/patches/0004-visualizer-Adding-plugin-to-display-a-CCNx-FIB-state.patch
@@ -0,0 +1,108 @@
+From 84d6db685c4ee5cbce89b4424c68f5d40c2b976b Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Wed, 29 Feb 2012 16:59:59 -0800
+Subject: [PATCH] visualizer: Adding plugin to display a CCNx FIB state
+
+---
+ src/visualizer/visualizer/plugins/ccnx_fib.py |   89 +++++++++++++++++++++++++
+ 1 file changed, 89 insertions(+)
+ create mode 100644 src/visualizer/visualizer/plugins/ccnx_fib.py
+
+diff --git a/src/visualizer/visualizer/plugins/ccnx_fib.py b/src/visualizer/visualizer/plugins/ccnx_fib.py
+new file mode 100644
+index 0000000..3f09212
+--- /dev/null
++++ b/src/visualizer/visualizer/plugins/ccnx_fib.py
+@@ -0,0 +1,89 @@
++import gtk
++
++import ns.core
++import ns.network
++import ns.internet
++import ns.NDNabstraction
++
++from visualizer.base import InformationWindow
++
++class ShowCcnxFib(InformationWindow):
++    (
++        COLUMN_PREFIX,
++        COLUMN_FACE
++        ) = range(2)
++
++    def __init__(self, visualizer, node_index):
++        InformationWindow.__init__(self)
++        self.win = gtk.Dialog(parent=visualizer.window,
++                              flags=gtk.DIALOG_DESTROY_WITH_PARENT|gtk.DIALOG_NO_SEPARATOR,
++                              buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE))
++        self.win.connect("response", self._response_cb)
++
++        self.node = ns.network.NodeList.GetNode (node_index)
++        node_name = ns.core.Names.FindName (self.node)
++
++        title = "CCNx FIB for node %i" % node_index
++        if len(node_name) != 0:
++            title += " (" + str(node_name) + ")"
++
++        self.win.set_title (title) 
++        self.visualizer = visualizer
++        self.node_index = node_index
++
++        self.table_model = gtk.ListStore(str, str, int)
++
++        treeview = gtk.TreeView(self.table_model)
++        treeview.show()
++        sw = gtk.ScrolledWindow()
++        sw.set_properties(hscrollbar_policy=gtk.POLICY_AUTOMATIC,
++                          vscrollbar_policy=gtk.POLICY_AUTOMATIC)
++        sw.show()
++        sw.add(treeview)
++        self.win.vbox.add(sw)
++        self.win.set_default_size(600, 300)
++        
++        # Dest.
++        column = gtk.TreeViewColumn('Destination', gtk.CellRendererText(),
++                                    text=self.COLUMN_PREFIX)
++        treeview.append_column(column)
++
++        # Interface
++        column = gtk.TreeViewColumn('faceType[nodeId](routingCost,status,metric)', gtk.CellRendererText(),
++                                    text=self.COLUMN_FACE)
++        treeview.append_column(column)
++
++        self.visualizer.add_information_window(self)
++        self.win.show()
++
++    def _response_cb(self, win, response):
++        self.win.destroy()
++        self.visualizer.remove_information_window(self)
++    
++    def update(self):
++        ccnxFib = self.node.GetObject(ns.NDNabstraction.CcnxFib.GetTypeId())
++        
++        if ccnxFib is None:
++            return
++
++        self.table_model.clear()
++        
++        for fibI in range(ccnxFib.GetCcnxFibEntryCount()):
++            entry = ccnxFib.GetCcnxFibEntry(fibI)
++            tree_iter = self.table_model.append()
++            self.table_model.set(tree_iter,
++                                 self.COLUMN_PREFIX, str(entry.GetPrefix()),
++                                 self.COLUMN_FACE, str(entry))
++
++def populate_node_menu(viz, node, menu):
++    menu_item = gtk.MenuItem("Show CCNx FIB")
++    menu_item.show()
++
++    def _show_ccnx_fib(dummy_menu_item):
++        ShowCcnxFib(viz, node.node_index)
++
++    menu_item.connect("activate", _show_ccnx_fib)
++    menu.add(menu_item)
++
++def register(viz):
++    viz.connect("populate-node-menu", populate_node_menu)
+-- 
+1.7.10.2
+
diff --git a/patches/0005-visualizer-temporary-fix-for-the-visualizer-related-.patch b/patches/0005-visualizer-temporary-fix-for-the-visualizer-related-.patch
new file mode 100644
index 0000000..b30ac72
--- /dev/null
+++ b/patches/0005-visualizer-temporary-fix-for-the-visualizer-related-.patch
@@ -0,0 +1,44 @@
+From ebfeccd51ba1259e01a5bef3925719a88c3ac040 Mon Sep 17 00:00:00 2001
+From: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+Date: Mon, 23 Apr 2012 13:45:51 -0700
+Subject: [PATCH] visualizer: temporary fix for the visualizer-related bugs
+ (asserts)
+
+---
+ src/core/model/type-id.cc     |    3 ++-
+ src/visualizer/model/pyviz.cc |    5 +++--
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/src/core/model/type-id.cc b/src/core/model/type-id.cc
+index e51e1e9..1368b85 100644
+--- a/src/core/model/type-id.cc
++++ b/src/core/model/type-id.cc
+@@ -149,7 +149,8 @@ IidManager::AddConstructor (uint16_t uid, ns3::Callback<ns3::ObjectBase *> callb
+   struct IidInformation *information = LookupInformation (uid);
+   if (information->hasConstructor)
+     {
+-      NS_FATAL_ERROR (information->name<<" already has a constructor.");
++      return;
++      // NS_FATAL_ERROR (information->name<<" already has a constructor.");
+     }
+   information->hasConstructor = true;
+   information->constructor = callback;
+diff --git a/src/visualizer/model/pyviz.cc b/src/visualizer/model/pyviz.cc
+index 1e500b2..739d8c4 100644
+--- a/src/visualizer/model/pyviz.cc
++++ b/src/visualizer/model/pyviz.cc
+@@ -317,8 +317,9 @@ PyViz::SimulatorRunUntil (Time time)
+   // events just appear to "jump" big chunks of time.
+   NS_LOG_LOGIC ("Schedule dummy callback to be called in " << (time - Simulator::Now ()));
+   m_stop = false;
+-  Simulator::Cancel (m_stopCallbackEvent);
+-  m_stopCallbackEvent = Simulator::Schedule (time - Simulator::Now (), &PyViz::CallbackStopSimulation, this);
++  // Simulator::Cancel (m_stopCallbackEvent);
++  // m_stopCallbackEvent =
++  Simulator::ScheduleWithContext (-1, time - Simulator::Now (), &PyViz::CallbackStopSimulation, this);
+ 
+   Ptr<SimulatorImpl> impl = Simulator::GetImplementation ();
+   Ptr<VisualSimulatorImpl> visualImpl = DynamicCast<VisualSimulatorImpl> (impl);
+-- 
+1.7.10.2
+
diff --git a/test/basic-regression-test.cc b/test/basic-regression-test.cc
index 2edac36..8d3c661 100644
--- a/test/basic-regression-test.cc
+++ b/test/basic-regression-test.cc
@@ -19,7 +19,6 @@
  */
 
 #include "ns3/test.h"
-#include "ns3/annotated-topology-reader.h"
 #include "ns3/ccnx-interest-header.h"
 #include "ns3/uinteger.h"
 #include "ns3/random-variable.h"
@@ -41,7 +40,7 @@
 #include "ns3/application.h"
 #include "ns3/ipv4-static-routing-helper.h"
 #include "ns3/ipv4-list-routing-helper.h"
-#include "ns3/annotated-topology-reader.h"
+
 #include <list>
 
 
@@ -54,15 +53,15 @@
 {
 public:
     
-    BasicRegressionTest ();
-    virtual ~BasicRegressionTest ();
+  BasicRegressionTest ();
+  virtual ~BasicRegressionTest ();
     
 private:
-    virtual void DoRun (void);
+  virtual void DoRun (void);
 };
 
 BasicRegressionTest::BasicRegressionTest ()
-: TestCase ("Basic regression test")
+  : TestCase ("Basic regression test")
 {
 }
 
@@ -73,83 +72,83 @@
 void
 BasicRegressionTest::DoRun(void)
 {
-    //string input ("/Users/iliamo/ns3-abstract-ndn/ns-3.11/src/NDNabstraction/examples/simpletopology.txt");
+  //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.
-    //CommandLine cmd;
-    //cmd.AddValue ("input", "Name of the input file.",
-    //              input);
-    //cmd.Parse (argc, argv);
+  // Set up command line parameters used to control the experiment.
+  //CommandLine cmd;
+  //cmd.AddValue ("input", "Name of the input file.",
+  //              input);
+  //cmd.Parse (argc, argv);
     
     
-    // ------------------------------------------------------------
-    // -- Read topology data.
-    // --------------------------------------------
+  // ------------------------------------------------------------
+  // -- Read topology data.
+  // --------------------------------------------
     
-    // string input = NS_TEST_SOURCEDIR;
-    // input += "/testtopology.txt";
+  // string input = NS_TEST_SOURCEDIR;
+  // input += "/testtopology.txt";
     
-    // Ptr<AnnotatedTopologyReader> reader = CreateObject<AnnotatedTopologyReader> ();
-    // reader->SetFileName (input);
+  // Ptr<AnnotatedTopologyReader> reader = CreateObject<AnnotatedTopologyReader> ();
+  // reader->SetFileName (input);
     
-    // NodeContainer nodes;
-    // if (reader != 0)
-    // {
-    //     nodes = reader->Read ();
-    // }
-    // else
-    // {
-    //     NS_TEST_ASSERT_MSG_EQ (true, false, "file not found");
-    // }
+  // NodeContainer nodes;
+  // if (reader != 0)
+  // {
+  //     nodes = reader->Read ();
+  // }
+  // else
+  // {
+  //     NS_TEST_ASSERT_MSG_EQ (true, false, "file not found");
+  // }
     
-    // NS_TEST_ASSERT_MSG_EQ (7, reader->LinksSize (), "link count is wrong");
+  // NS_TEST_ASSERT_MSG_EQ (7, reader->LinksSize (), "link count is wrong");
     
     
-    // // ------------------------------------------------------------
-    // // -- Create nodes and network stacks
-    // // --------------------------------------------
-    // NS_LOG_INFO ("creating internet stack");
-    // InternetStackHelper stack;
+  // // ------------------------------------------------------------
+  // // -- Create nodes and network stacks
+  // // --------------------------------------------
+  // NS_LOG_INFO ("creating internet stack");
+  // InternetStackHelper stack;
     
     
-    // //routing
-    // /*Ipv4StaticRoutingHelper staticRouting;
-    // Ipv4ListRoutingHelper listRH;
-    // listRH.Add (staticRouting, 0);
-    // stack.SetRoutingHelper (listRH);  // has effect on the next Install ()
-    // stack.Install (nodes);
+  // //routing
+  // /*Ipv4StaticRoutingHelper staticRouting;
+  // Ipv4ListRoutingHelper listRH;
+  // listRH.Add (staticRouting, 0);
+  // stack.SetRoutingHelper (listRH);  // has effect on the next Install ()
+  // stack.Install (nodes);
     
-    // NS_LOG_INFO ("creating ip4 addresses");
-    // Ipv4AddressHelper address;
-    // address.SetBase ("10.0.0.0", "255.255.255.252");*/
+  // NS_LOG_INFO ("creating ip4 addresses");
+  // Ipv4AddressHelper address;
+  // address.SetBase ("10.0.0.0", "255.255.255.252");*/
     
-    // int totlinks = reader->LinksSize ();
+  // int totlinks = reader->LinksSize ();
     
     
-    // /// applying settings
-    // NS_LOG_INFO ("creating node containers");
-    // NodeContainer* nc = new NodeContainer[totlinks];
-    // TopologyReader::ConstLinksIterator iter;
-    // int i = 0;
-    // for ( iter = reader->LinksBegin (); iter != reader->LinksEnd (); iter++, i++ )
-    // {
-    //     nc[i] = NodeContainer (iter->GetFromNode (), iter->GetToNode ());
-    // }
+  // /// applying settings
+  // NS_LOG_INFO ("creating node containers");
+  // NodeContainer* nc = new NodeContainer[totlinks];
+  // TopologyReader::ConstLinksIterator iter;
+  // int i = 0;
+  // for ( iter = reader->LinksBegin (); iter != reader->LinksEnd (); iter++, i++ )
+  // {
+  //     nc[i] = NodeContainer (iter->GetFromNode (), iter->GetToNode ());
+  // }
     
-    // NetDeviceContainer* ndc = new NetDeviceContainer[totlinks];
-    // reader->ApplySettings(ndc,nc);
-    // /// settings applied
+  // NetDeviceContainer* ndc = new NetDeviceContainer[totlinks];
+  // reader->ApplySettings(ndc,nc);
+  // /// settings applied
     
     
     
     
-    // it creates little subnets, one for each couple of nodes.
-    /*NS_LOG_INFO ("creating ipv4 interfaces");
+  // it creates little subnets, one for each couple of nodes.
+  /*NS_LOG_INFO ("creating ipv4 interfaces");
     Ipv4InterfaceContainer* ipic = new Ipv4InterfaceContainer[totlinks];
     for (int i = 0; i < totlinks; i++)
     {
-        ipic[i] = address.Assign (ndc[i]);
-        address.NewNetwork ();
+    ipic[i] = address.Assign (ndc[i]);
+    address.NewNetwork ();
     }
     
     // ------------------------------------------------------------
@@ -166,20 +165,20 @@
     
     NS_LOG_INFO ("Done.");
     
-    */
+  */
 }
 
 class BasicRegressionTestSuite : public TestSuite
 {
 public:
-    BasicRegressionTestSuite ();
+  BasicRegressionTestSuite ();
 };
 
 BasicRegressionTestSuite::BasicRegressionTestSuite ()
-: TestSuite ("ccnx-basic-regression-test-suite", UNIT)
+  : TestSuite ("ccnx-basic-regression-test-suite", UNIT)
 {
-    SetDataDir (NS_TEST_SOURCEDIR);
-    AddTestCase (new BasicRegressionTest);
+  SetDataDir (NS_TEST_SOURCEDIR);
+  AddTestCase (new BasicRegressionTest);
 }
 
 static BasicRegressionTestSuite suite;
diff --git a/test/content-object-test.cc b/test/content-object-test.cc
index cbb5811..44f881c 100644
--- a/test/content-object-test.cc
+++ b/test/content-object-test.cc
@@ -19,7 +19,6 @@
  */
 
 #include "ns3/test.h"
-#include "ns3/annotated-topology-reader.h"
 #include "ns3/ccnx-interest-header.h"
 #include "ns3/uinteger.h"
 #include "ns3/random-variable.h"
@@ -44,15 +43,15 @@
 class ContentObjectTest : public TestCase
 {
 public:
-    ContentObjectTest ();
-    virtual ~ContentObjectTest ();
+  ContentObjectTest ();
+  virtual ~ContentObjectTest ();
     
 private:
-    virtual void DoRun (void);
+  virtual void DoRun (void);
 };
 
 ContentObjectTest::ContentObjectTest ()
-: TestCase ("Content Obejct Serialization Test")
+  : TestCase ("Content Obejct Serialization Test")
 {
 }
 
@@ -63,49 +62,49 @@
 void
 ContentObjectTest::DoRun(void)
 {
-    Packet::EnablePrinting ();
-	Packet::EnableChecking (); 
-    Packet packet (10);
+  Packet::EnablePrinting ();
+  Packet::EnableChecking (); 
+  Packet packet (10);
 	
-    CcnxContentObjectHeader header;
-	CcnxContentObjectTail   trailer;
+  CcnxContentObjectHeader header;
+  CcnxContentObjectTail   trailer;
 	
-    Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
-    (*testname) ("iwant")("icecream");
-    header.SetName(testname);
+  Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
+  (*testname) ("iwant")("icecream");
+  header.SetName(testname);
     
-	NS_LOG_INFO ("Source: \n" << header << trailer);
+  NS_LOG_INFO ("Source: \n" << header << trailer);
     
-	packet.AddHeader (header);
-	packet.AddTrailer (trailer);
+  packet.AddHeader (header);
+  packet.AddTrailer (trailer);
     
-	// NS_LOG_INFO ("Deserialized packet: \n" << packet);
+  // NS_LOG_INFO ("Deserialized packet: \n" << packet);
     
-	NS_LOG_INFO ("Removing and deserializing individual headers");
+  NS_LOG_INFO ("Removing and deserializing individual headers");
 	
-    CcnxContentObjectHeader targetHeader;
-	CcnxContentObjectTail   targetTrailer;
+  CcnxContentObjectHeader targetHeader;
+  CcnxContentObjectTail   targetTrailer;
     
-	packet.RemoveHeader (targetHeader);
-	packet.RemoveTrailer (targetTrailer);
+  packet.RemoveHeader (targetHeader);
+  packet.RemoveTrailer (targetTrailer);
     
     
-    NS_TEST_ASSERT_MSG_EQ (targetHeader.GetName(), *testname, "Content Object name deserialization failed");
+  NS_TEST_ASSERT_MSG_EQ (targetHeader.GetName(), *testname, "Content Object name deserialization failed");
     
-    NS_TEST_ASSERT_MSG_EQ (packet.GetSize(), 10, "Content Object size inequality");
+  NS_TEST_ASSERT_MSG_EQ (packet.GetSize(), 10, "Content Object size inequality");
 }
 
 class ContentObjectTestSuite : public TestSuite
 {
 public:
-    ContentObjectTestSuite ();
+  ContentObjectTestSuite ();
 };
 
 ContentObjectTestSuite::ContentObjectTestSuite ()
-: TestSuite ("content-object-test-suite", UNIT)
+  : TestSuite ("content-object-test-suite", UNIT)
 {
-    SetDataDir (NS_TEST_SOURCEDIR);
-    AddTestCase (new ContentObjectTest);
+  SetDataDir (NS_TEST_SOURCEDIR);
+  AddTestCase (new ContentObjectTest);
 }
 
 static ContentObjectTestSuite suite;
diff --git a/test/interest-header-serialization-test.cc b/test/interest-header-serialization-test.cc
index 5c73bfc..81b7972 100644
--- a/test/interest-header-serialization-test.cc
+++ b/test/interest-header-serialization-test.cc
@@ -19,7 +19,6 @@
  */
 
 #include "ns3/test.h"
-#include "ns3/annotated-topology-reader.h"
 #include "ns3/ccnx-interest-header.h"
 #include "ns3/uinteger.h"
 #include "ns3/random-variable.h"
@@ -44,15 +43,15 @@
 class InterestHeaderSerializationTest : public TestCase
 {
 public:
-    InterestHeaderSerializationTest ();
-    virtual ~InterestHeaderSerializationTest ();
+  InterestHeaderSerializationTest ();
+  virtual ~InterestHeaderSerializationTest ();
     
 private:
-    virtual void DoRun (void);
+  virtual void DoRun (void);
 };
 
 InterestHeaderSerializationTest::InterestHeaderSerializationTest ()
-: TestCase ("Interest Header Serialization Test")
+  : TestCase ("Interest Header Serialization Test")
 {
 }
 
@@ -63,64 +62,64 @@
 void
 InterestHeaderSerializationTest::DoRun(void)
 {
-    Packet packet (0);
+  Packet packet (0);
     
-    uint32_t randomNonce = UniformVariable().GetInteger(1, std::numeric_limits<uint32_t>::max ());
-    Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
-    (*testname) ("test") ("test2");
+  uint32_t randomNonce = UniformVariable().GetInteger(1, std::numeric_limits<uint32_t>::max ());
+  Ptr<CcnxNameComponents> testname = Create<CcnxNameComponents> ();
+  (*testname) ("test") ("test2");
     
-    Ptr<CcnxNameComponents> exclude = Create<CcnxNameComponents> ();
-    (*exclude) ("exclude") ("exclude2");
+  Ptr<CcnxNameComponents> exclude = Create<CcnxNameComponents> ();
+  (*exclude) ("exclude") ("exclude2");
     
-    Time lifetime = Seconds(4.0);
-    bool child = true;
+  Time lifetime = Seconds(4.0);
+  bool child = true;
     
-    uint32_t maxSuffixComponents = 40;
-    uint32_t minSuffixComponents = 20;
+  uint32_t maxSuffixComponents = 40;
+  uint32_t minSuffixComponents = 20;
     
-    CcnxInterestHeader interestHeader;
-    interestHeader.SetNonce(randomNonce);
-    interestHeader.SetName(testname);
-    interestHeader.SetInterestLifetime(lifetime);
-    interestHeader.SetChildSelector(child);
-    interestHeader.SetExclude(exclude);
-    interestHeader.SetMaxSuffixComponents(maxSuffixComponents);
-    interestHeader.SetMinSuffixComponents(minSuffixComponents);
+  CcnxInterestHeader interestHeader;
+  interestHeader.SetNonce(randomNonce);
+  interestHeader.SetName(testname);
+  interestHeader.SetInterestLifetime(lifetime);
+  interestHeader.SetChildSelector(child);
+  interestHeader.SetExclude(exclude);
+  interestHeader.SetMaxSuffixComponents(maxSuffixComponents);
+  interestHeader.SetMinSuffixComponents(minSuffixComponents);
 
-    //serialization
-    packet.AddHeader (interestHeader);
+  //serialization
+  packet.AddHeader (interestHeader);
 	
-	//deserialization
-    CcnxInterestHeader target;
-	packet.RemoveHeader (target);
+  //deserialization
+  CcnxInterestHeader target;
+  packet.RemoveHeader (target);
 
     
-    NS_TEST_ASSERT_MSG_EQ (target.GetNonce(), randomNonce, "Interest Header nonce deserialization failed");
+  NS_TEST_ASSERT_MSG_EQ (target.GetNonce(), randomNonce, "Interest Header nonce deserialization failed");
     
-    NS_TEST_ASSERT_MSG_EQ (target.GetName(), *testname, "Interest Header name deserialization failed");
+  NS_TEST_ASSERT_MSG_EQ (target.GetName(), *testname, "Interest Header name deserialization failed");
     
-    NS_TEST_ASSERT_MSG_EQ (target.GetInterestLifetime(), lifetime, "Interest Header lifetime deserialization failed");
+  NS_TEST_ASSERT_MSG_EQ (target.GetInterestLifetime(), lifetime, "Interest Header lifetime deserialization failed");
     
-    NS_TEST_ASSERT_MSG_EQ (target.IsEnabledChildSelector(), child, "Interest Header childselector deserialization failed");
+  NS_TEST_ASSERT_MSG_EQ (target.IsEnabledChildSelector(), child, "Interest Header childselector deserialization failed");
     
-    NS_TEST_ASSERT_MSG_EQ (target.GetExclude(), *exclude, "Interest Header exclude deserialization failed");
+  NS_TEST_ASSERT_MSG_EQ (target.GetExclude(), *exclude, "Interest Header exclude deserialization failed");
     
-    NS_TEST_ASSERT_MSG_EQ (target.GetMaxSuffixComponents(), (int)maxSuffixComponents, "Interest Header maxSuffixComponents deserialization failed");
+  NS_TEST_ASSERT_MSG_EQ (target.GetMaxSuffixComponents(), (int)maxSuffixComponents, "Interest Header maxSuffixComponents deserialization failed");
     
-    NS_TEST_ASSERT_MSG_EQ (target.GetMinSuffixComponents(), (int)minSuffixComponents, "Interest Header minSuffixComponents deserialization failed");
+  NS_TEST_ASSERT_MSG_EQ (target.GetMinSuffixComponents(), (int)minSuffixComponents, "Interest Header minSuffixComponents deserialization failed");
 }
 
 class InterestHeaderSerializationTestSuite : public TestSuite
 {
 public:
-    InterestHeaderSerializationTestSuite ();
+  InterestHeaderSerializationTestSuite ();
 };
 
 InterestHeaderSerializationTestSuite::InterestHeaderSerializationTestSuite ()
-: TestSuite ("interest-header-serialization-test-suite", UNIT)
+  : TestSuite ("interest-header-serialization-test-suite", UNIT)
 {
-    SetDataDir (NS_TEST_SOURCEDIR);
-    AddTestCase (new InterestHeaderSerializationTest);
+  SetDataDir (NS_TEST_SOURCEDIR);
+  AddTestCase (new InterestHeaderSerializationTest);
 }
 
 static InterestHeaderSerializationTestSuite suite;
