diff --git a/model/annotated-topology-reader.cc b/model/annotated-topology-reader.cc
index c92aec0..4b17ba4 100644
--- a/model/annotated-topology-reader.cc
+++ b/model/annotated-topology-reader.cc
@@ -55,10 +55,10 @@
     
 TypeId AnnotatedTopologyReader::GetTypeId (void)
 {
-  static TypeId tid = TypeId ("ns3::AnnotatedTopologyReader")
+    static TypeId tid = TypeId ("ns3::AnnotatedTopologyReader")
     .SetParent<Object> ()
     ;
-  return tid;
+    return tid;
 }
     
 AnnotatedTopologyReader::AnnotatedTopologyReader (const std::string &path)
@@ -68,9 +68,9 @@
   , m_lrx (100.0)
   , m_lry (100.0)
 {
-  NS_LOG_FUNCTION (this);
+    NS_LOG_FUNCTION (this);
 }
-
+    
 void
 AnnotatedTopologyReader::SetBoundingBox (double ulx, double uly, double lrx, double lry)
 {
@@ -84,27 +84,27 @@
 
 AnnotatedTopologyReader::~AnnotatedTopologyReader ()
 {
-  NS_LOG_FUNCTION (this);
+    NS_LOG_FUNCTION (this);
 }
     
 NodeContainer
 AnnotatedTopologyReader::Read (void)
 {
-  ifstream topgen;
-  topgen.open (GetFileName ().c_str ());
-  NodeContainer nodes;
+    ifstream topgen;
+    topgen.open (GetFileName ().c_str ());
+    NodeContainer nodes;
         
-  if (!topgen.is_open ())
+    if ( !topgen.is_open () )
     {
       NS_LOG_ERROR ("Cannot open file " << GetFileName () << " for reading");
-      return nodes;
+        return nodes;
     }
-
-  int linksNumber = 0;
-  int nodesNumber = 0;
         
-  string line;
-  getline (topgen,line);
+    int linksNumber = 0;
+    int nodesNumber = 0;
+        
+    string line;
+    getline (topgen,line);
   istringstream headerLineBuffer (line);
         
   int totnode;
@@ -112,22 +112,22 @@
   headerLineBuffer >> totnode;
   headerLineBuffer >> totlink;
   
-  NS_LOG_INFO ("Annotated topology should have " << totnode << " nodes and " << totlink << " links");
-
-  for (int i = 0; i < totlink && !topgen.eof (); i++)
+    NS_LOG_INFO ("Annotated topology should have " << totnode << " nodes and " << totlink << " links");
+        
+    for (int i = 0; i < totlink && !topgen.eof (); i++)
     {
-      getline (topgen, line);
+        getline (topgen,line);
       istringstream lineBuffer (line);
             
       string from;
       string to;
-      lineBuffer >> from;
-      lineBuffer >> to;
-
-      if ( (!from.empty ()) && (!to.empty ()) )
+        lineBuffer >> from;
+        lineBuffer >> to;
+            
+        if ( (!from.empty ()) && (!to.empty ()) )
         {
-          NS_LOG_INFO ( linksNumber << " From: " << from << " to: " << to );
-
+            NS_LOG_INFO ( linksNumber << " From: " << from << " to: " << to );
+                
           Ptr<Node> fromNode = Names::Find<Node> (m_path, from);
           Ptr<Node> toNode   = Names::Find<Node> (m_path, to);
           
@@ -136,7 +136,7 @@
               fromNode = CreateObject<Node> ();
               Names::Add (m_path, from, fromNode);
               nodes.Add (fromNode);
-              nodesNumber++;
+                nodesNumber++;
             }
                 
           if (toNode == 0)
@@ -144,23 +144,23 @@
               toNode = CreateObject<Node> ();
               Names::Add (m_path, to, toNode);
               nodes.Add (toNode);
-              nodesNumber++;
+                nodesNumber++;
             }
                 
           Link link (fromNode, from, toNode, to);
                 
           string dataRate;
           lineBuffer >> dataRate;
-
+            
           string ospf;
           lineBuffer >> ospf;
-
+                
           string delay;
           lineBuffer >> delay;
-
+                
           string queueSizeNode1;
           lineBuffer >> queueSizeNode1;
-          
+                
           string queueSizeNode2;
           lineBuffer >> queueSizeNode2;
 
@@ -173,65 +173,65 @@
               NS_LOG_ERROR ("File [" << GetFileName () << ":" << i+2 << " wrong format, skipping");
               continue;
             }
-          
+            
           link.SetAttribute ("DataRate", dataRate);
           link.SetAttribute ("OSPF", ospf);
           link.SetAttribute ("Delay", delay);
           link.SetAttribute ("QueueSizeNode1", queueSizeNode1);
           link.SetAttribute ("QueueSizeNode2", queueSizeNode2);
                 
-          AddLink (link);
+            AddLink (link);
                 
-          linksNumber++;
+            linksNumber++;
         }
     }
-
+        
   NS_ASSERT (nodesNumber == totnode && linksNumber == totlink);
         
-  NS_LOG_INFO ("Annotated topology created with " << nodesNumber << " nodes and " << linksNumber << " links");
-  topgen.close ();
-
+    NS_LOG_INFO ("Annotated topology created with " << nodesNumber << " nodes and " << linksNumber << " links");
+    topgen.close ();
+        
   ApplySettings ();
   AssignCoordinates ();
   
-  return nodes;
+    return nodes;
 }
-
+    
 void
 AnnotatedTopologyReader::AssignIpv4Addresses (Ipv4Address base)
 {
   Ipv4AddressHelper address (base, Ipv4Mask ("/24"));
-
+    
   BOOST_FOREACH (const Link &link, m_linksList)
     {
       address.Assign (NetDeviceContainer (link.GetFromNetDevice (),
                                           link.GetToNetDevice ()));
-      
+        
       base = Ipv4Address (base.Get () + 256);
       address.SetBase (base, Ipv4Mask ("/24"));
-    }
-
+        }
+        
   ApplyOspfMetric ();
-}
-
+        }
+        
 void
 AnnotatedTopologyReader::ApplyOspfMetric ()
-{
-  BOOST_FOREACH (const Link &link, m_linksList)
     {
+  BOOST_FOREACH (const Link &link, m_linksList)
+        {
       uint16_t metric = boost::lexical_cast<uint16_t> (link.GetAttribute ("OSPF"));
-      
-      {
+        
+        {
         Ptr<Ipv4> ipv4 = link.GetFromNode ()->GetObject<Ipv4> ();
         NS_ASSERT (ipv4 != 0);
-
+        
         int32_t interfaceId = ipv4->GetInterfaceForDevice (link.GetFromNetDevice ());
         NS_ASSERT (interfaceId >= 0);
-
+        
         ipv4->SetMetric (interfaceId,metric);
-      }
-
-      {
+        }
+        
+        {
         Ptr<Ipv4> ipv4 = link.GetToNode ()->GetObject<Ipv4> ();
         NS_ASSERT (ipv4 != 0);
         
@@ -239,68 +239,68 @@
         NS_ASSERT (interfaceId >= 0);
 
         ipv4->SetMetric (interfaceId,metric);
-      }
     }
 }
+}
 
 void
 AnnotatedTopologyReader::ApplySettings ()
 {
   PointToPointHelper p2p;
-
+    
   // temporary queue, will be changed later
   p2p.SetQueue ("ns3::DropTailQueue",
                 "MaxPackets", StringValue("100"));
-  
+
   BOOST_FOREACH (Link &link, m_linksList)
     {
       NS_LOG_INFO ("DataRate = " + link.GetAttribute("DataRate")+"Kbps");
       p2p.SetDeviceAttribute ("DataRate", StringValue(link.GetAttribute("DataRate")+"Kbps"));
-
+        
       NS_LOG_INFO ("Delay = " + link.GetAttribute("Delay")+"ms");
       p2p.SetChannelAttribute ("Delay", StringValue(link.GetAttribute("Delay")+"ms"));
-      
+        
       NetDeviceContainer nd = p2p.Install(link.GetFromNode (), link.GetToNode ());
       link.SetNetDevices (nd.Get (0), nd.Get (1));
 
       NS_LOG_INFO ("Queue: " << link.GetAttribute("QueueSizeNode1") << " <==> " << link.GetAttribute("QueueSizeNode2"));
-      
+        
       PointerValue txQueueFrom;
       link.GetFromNetDevice ()->GetAttribute ("TxQueue", txQueueFrom);
       NS_ASSERT (txQueueFrom.Get<DropTailQueue> () != 0);
-
+        
       PointerValue txQueueTo;
       link.GetToNetDevice ()->GetAttribute ("TxQueue", txQueueTo);
       NS_ASSERT (txQueueTo.Get<DropTailQueue> () != 0);
-      
+        
       txQueueFrom.Get<DropTailQueue> ()->SetAttribute ("MaxPackets", StringValue (link.GetAttribute("QueueSizeNode1")));
       txQueueTo.  Get<DropTailQueue> ()->SetAttribute ("MaxPackets", StringValue (link.GetAttribute("QueueSizeNode2")));
-    }
-}
+        }
+        }
 
 void
 AnnotatedTopologyReader::AssignCoordinates ()
 {
   UniformVariable randX (m_ulx, m_lrx);
-  double x = 0.0;
+    double x = 0.0;
   UniformVariable randY (m_uly, m_lry);
-  double y = 0.0;
+    double y = 0.0;
 
   BOOST_FOREACH (Link &link, m_linksList)
     {
       Ptr<ConstantPositionMobilityModel> loc = link.GetFromNode ()->GetObject<ConstantPositionMobilityModel> ();
       if (loc != 0)
         continue; // no need to assign twice
-
-      loc = CreateObject<ConstantPositionMobilityModel> ();
+        
+            loc = CreateObject<ConstantPositionMobilityModel> ();
       link.GetFromNode ()->AggregateObject (loc);
         
       x = randX.GetValue();
       y = randY.GetValue();
-      NS_LOG_INFO("X = "<<x <<"Y = "<<y);
-
+        NS_LOG_INFO("X = "<<x <<"Y = "<<y);
+        
       loc->SetPosition (Vector (x, y, 0));
+        }
     }
-}
 
 }
