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
