diff --git a/model/annotated-topology-reader.cc b/model/annotated-topology-reader.cc
index 76880a5..eb56339 100644
--- a/model/annotated-topology-reader.cc
+++ b/model/annotated-topology-reader.cc
@@ -39,7 +39,6 @@
 #include "ns3/ipv4-address.h"
 
 #include "ns3/constant-position-mobility-model.h"
-#include "ns3/random-variable.h"
 
 #include <boost/foreach.hpp>
 #include <boost/lexical_cast.hpp>
@@ -53,42 +52,48 @@
 
 NS_LOG_COMPONENT_DEFINE ("AnnotatedTopologyReader");
     
-NS_OBJECT_ENSURE_REGISTERED (AnnotatedTopologyReader);
-    
-TypeId AnnotatedTopologyReader::GetTypeId (void)
-{
-  static TypeId tid = TypeId ("ns3::AnnotatedTopologyReader")
-    .SetParent<Object> ()
-    ;
-  return tid;
-}
-    
 AnnotatedTopologyReader::AnnotatedTopologyReader (const std::string &path)
   : m_path (path)
-  // , m_ulx (0)
-  // , m_uly (0)
-  // , m_lrx (100.0)
-  // , m_lry (100.0)
+  , m_randX (0, 100.0)
+  , m_randY (0, 100.0)
 {
   NS_LOG_FUNCTION (this);
 }
     
-// void
-// AnnotatedTopologyReader::SetBoundingBox (double ulx, double uly, double lrx, double lry)
-// {
-//   NS_LOG_FUNCTION (this << ulx << uly << lrx << lry);
+void
+AnnotatedTopologyReader::SetBoundingBox (double ulx, double uly, double lrx, double lry)
+{
+  NS_LOG_FUNCTION (this << ulx << uly << lrx << lry);
   
-//   m_ulx = ulx;
-//   m_uly = uly;
-//   m_lrx = lrx;
-//   m_lry = lry;
-// }
+  m_randX = UniformVariable (ulx, lrx);
+  m_randY = UniformVariable (uly, lry);
+}
 
 AnnotatedTopologyReader::~AnnotatedTopologyReader ()
 {
   NS_LOG_FUNCTION (this);
 }
 
+Ptr<Node>
+AnnotatedTopologyReader::CreateNode (const std::string name)
+{
+  return CreateNode (name, m_randX.GetValue (), m_randX.GetValue ());
+}
+
+Ptr<Node>
+AnnotatedTopologyReader::CreateNode (const std::string name, double posX, double posY)
+{
+  Ptr<Node> node = CreateObject<Node> ();
+  Ptr<ConstantPositionMobilityModel> loc = CreateObject<ConstantPositionMobilityModel> ();
+  node->AggregateObject (loc);
+
+  loc->SetPosition (Vector (posX, posY, 0));
+
+  Names::Add (m_path, name, node);
+
+  return node;
+}
+
 NodeContainer
 AnnotatedTopologyReader::Read (void)
 {
@@ -102,9 +107,6 @@
       return nodes;
     }
 
-  uint32_t linksNumber = 0;
-  uint32_t nodesNumber = 0;
-
   while (!topgen.eof ())
     {
       string line;
@@ -125,15 +127,8 @@
       double latitude, longitude;
 
       lineBuffer >> name >> city >> latitude >> longitude;
-      Ptr<Node> node = CreateObject<Node> ();
-      Ptr<ConstantPositionMobilityModel> loc = CreateObject<ConstantPositionMobilityModel> ();
-      node->AggregateObject (loc);
-
-      loc->SetPosition (Vector (2*longitude, -2*latitude, 0));
-
-      Names::Add (m_path, name, node);
+      Ptr<Node> node = CreateNode (name, 2*longitude, -2*latitude);
       nodes.Add (node);
-      nodesNumber++;
     }
 
   map<string, set<string> > processedLinks; // to eliminate duplications
@@ -175,11 +170,9 @@
 
       AddLink (link);
       NS_LOG_DEBUG ("New link " << from << " <==> " << to << " / " << capacity << "Kbps with " << metric << " metric");
-                
-      linksNumber++;
     }
         
-  NS_LOG_INFO ("Annotated topology created with " << nodesNumber << " nodes and " << linksNumber << " links");
+  NS_LOG_INFO ("Annotated topology created with " << nodes.GetN () << " nodes and " << LinksSize () << " links");
   topgen.close ();
         
   ApplySettings ();
