diff --git a/examples/abilene-topology.txt b/examples/abilene-topology.txt
index 0eeb3f7..5063137 100644
--- a/examples/abilene-topology.txt
+++ b/examples/abilene-topology.txt
@@ -1,16 +1,16 @@
 12  15
-1   2   9920000 1   1   100 100
-2   5   9920000 1176    1   100 100
-2   6   2480000 587 1   100 100
-2   12  9920000 846 1   100 100
-3   6   9920000 260 1   100 100
-3   9   9920000 700 1   100 100
-4   7   9920000 639 1   100 100
-4   10  9920000 1295 1   100 100
-4   11  9920000 2095    1   100 100
-5   7   9920000 902 1   100 100
-5   8   9920000 1893 1   100 100
-6   7   9920000 548 1   100 100
-8   10  9920000 366 1   100 100
-9   12  9920000 233 1   100 100
-10  11  9920000 861 1   100 100
+1   2   9920000 1   1   100 100 116 34  116 34
+2   5   9920000 1176    1   100 100 116 34  104 30
+2   6   2480000 587 1   100 100 116 34  114 40
+2   12  9920000 846 1   100 100 116 34  123 39
+3   6   9920000 260 1   100 100 112 42  114 40
+3   9   9920000 700 1   100 100 112 42  126 41
+4   7   9920000 639 1   100 100 95  41  103 39
+4   10  9920000 1295 1   100 100    95  41  78  37
+4   11  9920000 2095    1   100 100 95  41  78  48
+5   7   9920000 902 1   100 100 104 30  103 39
+5   8   9920000 1893 1   100 100    104 30  82  34
+6   7   9920000 548 1   100 100 114 40  103 39
+8   10  9920000 366 1   100 100 82  34  78  37
+9   12  9920000 233 1   100 100 126 41  123 39
+10  11  9920000 861 1   100 100 78  37  78  48
diff --git a/model/annotated-topology-reader.cc b/model/annotated-topology-reader.cc
index 1c66523..d8bbc7e 100644
--- a/model/annotated-topology-reader.cc
+++ b/model/annotated-topology-reader.cc
@@ -146,7 +146,31 @@
             {
                 link.SetAttribute ("QueueSizeNode2", linkAttr);
             }
-                
+            
+            lineBuffer >> linkAttr;
+            if ( !linkAttr.empty () )
+            {
+                link.SetAttribute ("X1", linkAttr);
+            }
+            
+            lineBuffer >> linkAttr;
+            if ( !linkAttr.empty () )
+            {
+                link.SetAttribute ("Y1", linkAttr);
+            }
+            
+            lineBuffer >> linkAttr;
+            if ( !linkAttr.empty () )
+            {
+                link.SetAttribute ("X2", linkAttr);
+            }
+            
+            lineBuffer >> linkAttr;
+            if ( !linkAttr.empty () )
+            {
+                link.SetAttribute ("Y2", linkAttr);
+            }
+
             AddLink (link);
                 
             linksNumber++;
@@ -447,6 +471,19 @@
     int i = 0;
     for ( iter2 = this->LinksBegin (); iter2 != this->LinksEnd (); iter2++, i++ )
     {
+        std::string x1str = iter2->GetAttribute("X1");
+        uint16_t x1 = atoi(x1str.c_str());
+        
+        std::string x2str = iter2->GetAttribute("X2");
+        uint16_t x2 = atoi(x2str.c_str());
+        
+        
+        std::string y1str = iter2->GetAttribute("Y1");
+        uint16_t y1 = atoi(y1str.c_str());
+        
+        std::string y2str = iter2->GetAttribute("Y2");
+        uint16_t y2 = atoi(y2str.c_str());
+        
         NodeContainer twoNodes = nc[i];
         
         Ptr<Node> nd = twoNodes.Get(0);
@@ -464,8 +501,8 @@
             nd->AggregateObject (loc);
         }
         
-        x = randX.GetValue();
-        y = randY.GetValue();
+        x = x1; //randX.GetValue();
+        y = y1; //randY.GetValue();
         NS_LOG_INFO("X = "<<x <<"Y = "<<y);
         Vector locVec (x, y, 0);
         loc->SetPosition (locVec);
@@ -478,55 +515,12 @@
             nd2->AggregateObject (loc2);
         }
         
-        x = randX.GetValue();
-        y = randY.GetValue();
+        x = x2; //randX.GetValue();
+        y = y2; //randY.GetValue();
         NS_LOG_INFO("X = "<<x <<"Y = "<<y);
         Vector locVec2 (x, y, 0);
         loc2->SetPosition (locVec2);
     }
-    /*
-        double xDist; 
-        double yDist; 
-        if (lrx > ulx)
-        {
-            xDist = lrx - ulx;
-        }
-        else
-        {
-            xDist = ulx - lrx;
-        }
-        if (lry > uly)
-        {
-            yDist = lry - uly;
-        }
-        else
-        {
-            yDist = uly - lry;
-        }
-        double xAdder = xDist / m_xSize;
-        double yAdder = yDist / m_ySize;
-        double yLoc = yDist / 2;
-        for (uint32_t i = 0; i < m_ySize; ++i)
-        {
-            double xLoc = xDist / 2;
-            for (uint32_t j = 0; j < m_xSize; ++j)
-            {
-                Ptr<Node> node = GetNode (i, j);
-                Ptr<ConstantPositionMobilityModel> loc = node->GetObject<ConstantPositionMobilityModel> ();
-                if (loc ==0)
-                {
-                    loc = CreateObject<ConstantPositionMobilityModel> ();
-                    node->AggregateObject (loc);
-                }
-                Vector locVec (xLoc, yLoc, 0);
-                loc->SetPosition (locVec);
-                
-                xLoc += xAdder;
-            }
-            yLoc += yAdder;
-        }
-    }
-*/
 }
 }
 
diff --git a/model/annotated-topology-reader.h b/model/annotated-topology-reader.h
index ca0bc48..174330a 100644
--- a/model/annotated-topology-reader.h
+++ b/model/annotated-topology-reader.h
@@ -54,7 +54,7 @@
 * \brief This class reads annotated topology and apply settings to the corresponding nodes and links
 * Input File Format
 * 1st line is     NumberOfNodes    TAB     NumberofLinks
-* Nth line is     NodeID1  TAB    NodeID2   TAB  DataRateKBPS TAB OSPF   TAB    DelayMiliseconds   TAB   QueueSizeInPacketsNode1     TAB    QueueSizeInPacketsNode2 
+* Nth line is     NodeID1  TAB    NodeID2   TAB  DataRateKBPS TAB OSPF   TAB    DelayMiliseconds   TAB   QueueSizeInPacketsNode1     TAB    QueueSizeInPacketsNode2    TAB    X-coordinate-node1     TAB    Y-coordinate-node1  TAB    X-coordinate-node2     TAB    Y-coordinate-node2
 *
 */
 class AnnotatedTopologyReader : public TopologyReader
