Documentation update
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 54b990e..8f063e3 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -25,7 +25,7 @@
 
 # Add any Sphinx extension module names here, as strings. They can be extensions
 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = [ "sphinx.ext.autodoc", "sphinxcontrib.doxylink" ]
+extensions = [ "sphinx.ext.autodoc", "sphinxcontrib.doxylink", "sphinxcontrib.aafig" ]
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
diff --git a/docs/source/examples.rst b/docs/source/examples.rst
index 3e08120..867f006 100644
--- a/docs/source/examples.rst
+++ b/docs/source/examples.rst
@@ -6,17 +6,24 @@
 
 The first example (``ccnx-simple.cc``) shows very basics of ndnSIM.  In the simulated
 topology there are 3 nodes, connected with point-to-point links, one
-NDN consumer, and one NDN producer::
+NDN consumer, and one NDN producer:
 
-      +----------+     1Mbps      +--------+     1Mbps      +----------+
-      | consumer | <------------> | router | <------------> | producer |
-      +----------+         10ms   +--------+          10ms  +----------+
+.. aafig::
+    :aspect: 60
+    :scale: 120
 
-Consumer requests data from producer with frequency 10 interests per second
-(interests contain constantly increasing sequence number).
+      +----------+                +--------+                +----------+
+      |          |     1Mbps      |        |      1Mbps     |          |
+      | Consumer |<-------------->| Router |<-------------->| Producer |
+      |          |         10ms   |        |         10ms   |          |
+      +----------+                +--------+                +----------+
 
-For every received interest, producer replies with a data packet, containing
-1024 bytes of virtual payload.
+Consumer is simulated using :ndnsim:`CcnxConsumerCbr` reference application and generates Interests towards the producer
+with frequency of 10 Interests per second (see :doc:`applications`).
+
+Producer is simulated using :ndnsim:`CcnxProducer` class, which is used to satisfy all incoming Interests with virtual payload data (1024 bytes).
+
+FIB on every node is populated using default routes (see :doc:`helpers`).
 
 The following code represents all that is necessary to run such a
 simple scenario
@@ -27,32 +34,32 @@
     #include "ns3/network-module.h"
     #include "ns3/point-to-point-module.h"
     #include "ns3/ndnSIM-module.h"
-    
+
     using namespace ns3;
 
-    int 
+    int
     main (int argc, char *argv[])
     {
       // setting default parameters for PointToPoint links and channels
       Config::SetDefault ("ns3::PointToPointNetDevice::DataRate", StringValue ("1Mbps"));
       Config::SetDefault ("ns3::PointToPointChannel::Delay", StringValue ("10ms"));
       Config::SetDefault ("ns3::DropTailQueue::MaxPackets", StringValue ("20"));
-      
+
       // Creating nodes
       NodeContainer nodes;
       nodes.Create (3);
-    
+
       // Connecting nodes using two links
       PointToPointHelper p2p;
       p2p.Install (nodes.Get (0), nodes.Get (1));
       p2p.Install (nodes.Get (1), nodes.Get (2));
-    
+
       // Install CCNx stack on all nodes
       CcnxStackHelper ccnxHelper;
       ccnxHelper.SetDefaultRoutes (true);
       ccnxHelper.InstallAll ();
 
-      // Installing applications    
+      // Installing applications
 
       // Consumer
       CcnxAppHelper consumerHelper ("ns3::CcnxConsumerCbr");
@@ -60,13 +67,119 @@
       consumerHelper.SetPrefix ("/prefix");
       consumerHelper.SetAttribute ("Frequency", StringValue ("10")); // 10 interests a second
       consumerHelper.Install (nodes.Get (0)); // first node
-      
+
       // Producer
       CcnxAppHelper producerHelper ("ns3::CcnxProducer");
       // Producer will reply to all requests starting with /prefix
       producerHelper.SetPrefix ("/prefix");
       producerHelper.SetAttribute ("PayloadSize", StringValue("1024"));
       producerHelper.Install (nodes.Get (2)); // last node
+
+      Simulator::Stop (Seconds (20.0));
+
+      Simulator::Run ();
+      Simulator::Destroy ();
+
+      return 0;
+    }
+
+If this code is placed into ``scratch/ccnx-simple.cc`` and NS-3 is compiled in debug mode, you can run and see progress of the
+simulation using the following command (in optimized mode nothing will be printed out)::
+
+     NS_LOG=CcnxConsumer:CcnxProducer ./waf --run=ccnx-simple
+
+
+9-node grid example
+-------------------
+
+This scenario (``ccnx-grid.cc``) simulates using a grid topology build with PointToPointGrid NS-3 module
+
+.. aafig::
+    :aspect: 60
+    :scale: 120
+
+    /--------\	    /-\	        /-\
+    |Consumer|<---->| |<------->| |
+    \--------/	    \-/	        \-/
+	^   	     ^ 	         ^
+        |            |           |   1Mbps/10ms delay
+        v            v           v
+       /-\          /-\         /-\
+       | |<-------->| |<------->| |
+       \-/          \-/         \-/
+	^   	     ^ 	         ^
+        |            |           |
+        v            v           v
+       /-\	    /-\	     /--------\
+       | |<-------->| |<---->|Producer|
+       \-/          \-/      \--------/
+
+
+FIB is populated using :ndnsim:`CcnxGlobalRoutingHelper` (see :doc:`helpers`).
+
+Consumer is simulated using :ndnsim:`CcnxConsumerCbr` reference application and generates Interests towards the producer
+with frequency of 10 Interests per second (see :doc:`applications`).
+
+Producer is simulated using :ndnsim:`CcnxProducer` class, which is used to satisfy all incoming Interests with virtual payload data (1024 bytes).
+
+
+The following code represents all that is necessary to run such a
+simple scenario
+
+.. code-block:: c++
+
+    #include "ns3/core-module.h"
+    #include "ns3/network-module.h"
+    #include "ns3/point-to-point-module.h"
+    #include "ns3/point-to-point-grid.h"
+    #include "ns3/ndnSIM-module.h"
+    
+    using namespace ns3;
+    
+    int 
+    main (int argc, char *argv[])
+    {
+      // Setting default parameters for PointToPoint links and channels
+      Config::SetDefault ("ns3::PointToPointNetDevice::DataRate", StringValue ("1Mbps"));
+      Config::SetDefault ("ns3::PointToPointChannel::Delay", StringValue ("10ms"));
+      Config::SetDefault ("ns3::DropTailQueue::MaxPackets", StringValue ("20"));
+        
+      // Creating 3x3 topology
+      PointToPointHelper p2p;
+      PointToPointGridHelper grid (3, 3, p2p);
+      grid.BoundingBox(100,100,200,200);
+    
+      // Install CCNx stack on all nodes
+      CcnxStackHelper ccnxHelper;
+      ccnxHelper.InstallAll ();
+    
+      // Installing global routing interface on all nodes
+      CcnxGlobalRoutingHelper ccnxGlobalRoutingHelper;
+      ccnxGlobalRoutingHelper.InstallAll ();
+      
+      // Getting containers for the consumer/producer
+      Ptr<Node> producer = grid.GetNode (nGrid-1, nGrid-1);
+      NodeContainer consumerNodes;
+      consumerNodes.Add (grid.GetNode (0,0));
+      
+      // Install CCNx applications
+      std::string prefix = "/prefix";
+      
+      CcnxAppHelper consumerHelper ("ns3::CcnxConsumerCbr");
+      consumerHelper.SetPrefix (prefix);
+      consumerHelper.SetAttribute ("Frequency", StringValue ("10")); // 10 interests a second
+      consumerHelper.Install (consumerNodes);
+      
+      CcnxAppHelper producerHelper ("ns3::CcnxProducer");
+      producerHelper.SetPrefix (prefix);
+      producerHelper.SetAttribute ("PayloadSize", StringValue("1024"));
+      producerHelper.Install (producer);
+    
+      // Add /prefix origins to CcnxGlobalRouter
+      ccnxGlobalRoutingHelper.AddOrigins (prefix, producer);
+    
+      // Calculate and install FIBs
+      ccnxGlobalRoutingHelper.CalculateRoutes ();
       
       Simulator::Stop (Seconds (20.0));
         
@@ -76,7 +189,9 @@
       return 0;
     }
     
-If NS-3 is compiled in debug mode, you can run and see progress of the
-simulation using the following command::
 
-     NS_LOG=CcnxConsumer:CcnxProducer ./waf --run=ccnx-simple
+If this code is placed into ``scratch/ccnx-grid.cc`` and NS-3 is compiled in debug mode, you can run and see progress of the
+simulation using the following command (in optimized mode nothing will be printed out)::
+
+    NS_LOG=CcnxConsumer:CcnxProducer ./waf --run=ccnx-grid
+
diff --git a/examples/ccnx-grid.cc b/examples/ccnx-grid.cc
index a0f98ad..f5ed94f 100644
--- a/examples/ccnx-grid.cc
+++ b/examples/ccnx-grid.cc
@@ -42,11 +42,7 @@
  *
  * All links are 1Mbps with propagation 10ms delay. 
  *
- * FIB is populated based on hacks of GlobalRoutingController: in
- * addition to normal assignment of IP addresses for every NetDevice
- * interface, every node is assigned an IP address that numerically
- * equals to node id (i.e., if node id is 15, the special address is
- * 0.0.0.15/255.255.255.255).
+ * FIB is populated using CcnxGlobalRoutingHelper.
  *
  * Consumer requests data from producer with frequency 10 interests per second
  * (interests contain constantly increasing sequence number).