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;
