diff --git a/docs/Doxyfile b/docs/Doxyfile
index ec68f04..ef4976b 100644
--- a/docs/Doxyfile
+++ b/docs/Doxyfile
@@ -571,6 +571,7 @@
 # with spaces.
 
 INPUT                  = ../model ../helper ../utils ../apps \
+						 ../plugins/topology ../plugins/mobility \
 						 introspected-doxygen.h doxygen.h
 
 # introspected-doxygen.h should be manually created:
diff --git a/docs/source/applications.rst b/docs/source/applications.rst
index fb2b4fb..ac4150f 100644
--- a/docs/source/applications.rst
+++ b/docs/source/applications.rst
@@ -132,10 +132,11 @@
 
 
 
-Example
-^^^^^^^
+Customer example
+^^^^^^^^^^^^^^^^
 
-The following code shows how a simple ndnSIM application can be created.  For details refer to API documentation of ndnSIM and NS-3.
+The following code shows how a simple ndnSIM application can be created.  
+For details refer to API documentation of ndnSIM and NS-3.
 
 .. code-block:: c++
 
@@ -230,3 +231,78 @@
         std::cout << "DATA received for name " << contentObject->GetName () << std::endl; 
       }
     };
+
+Producer example (Interest hijacker)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The following code demonstrates how to implement a basic producer application that "hijacks" all incoming Interests.
+
+.. code-block:: c++
+
+    #include "ns3/core-module.h"
+    #include "ns3/network-module.h"
+    #include "ns3/ndnSIM-module.h"
+        
+    using namespace ns3;
+    
+    class Hijacker : public ndn::App
+    {
+    public: 
+      static TypeId
+      GetTypeId ();
+            
+      Hijacker ()
+      {
+      }
+    
+      // inherited from NdnApp
+      void OnInterest (const Ptr<const ndn::InterestHeader> &interest, Ptr<Packet> packet)
+      {
+        ndn::App::OnInterest (interest, packet); // forward call to perform app-level tracing
+        // do nothing else (hijack interest)
+      }
+    
+    protected:
+      // inherited from Application base class.
+      virtual void
+      StartApplication ()
+      {
+        App::StartApplication ();
+    
+        // equivalent to setting interest filter for "/" prefix
+        Ptr<ndn::Fib> fib = GetNode ()->GetObject<ndn::Fib> ();
+        Ptr<ndn::fib::Entry> fibEntry = fib->Add ("/", m_face, 0);
+        fibEntry->UpdateStatus (m_face, ndn::fib::FaceMetric::NDN_FIB_GREEN);
+      }
+    
+      virtual void
+      StopApplication ()
+      {
+        App::StopApplication ();
+      }
+    };
+    
+    // Necessary if you are planning to use ndn::AppHelper
+    NS_OBJECT_ENSURE_REGISTERED (Hijacker);
+    
+    TypeId
+    Hijacker::GetTypeId ()
+    {
+      static TypeId tid = TypeId ("ndn::Hijacker")
+        .SetParent<ndn::App> ()
+        .AddConstructor<Hijacker> ()
+        ;
+            
+      return tid;
+    }
+
+
+After defining this class, you can use it with :ndnsim:`ndn::AppHelper`. For example:
+
+.. code-block:: c++
+
+    ...
+    ndn::AppHelper producerHelper ("ndn::Hijacker");
+    producerHelper.Install (producerNode);
+    ...
+
diff --git a/docs/source/boost-custom-install.rst b/docs/source/boost-custom-install.rst
index 34ae785..860269a 100644
--- a/docs/source/boost-custom-install.rst
+++ b/docs/source/boost-custom-install.rst
@@ -1,3 +1,5 @@
+.. _boost-custom-install:
+
 Installing boost libraries
 ==========================
 
diff --git a/docs/source/examples.rst b/docs/source/examples.rst
index 5ea290e..d65f4eb 100644
--- a/docs/source/examples.rst
+++ b/docs/source/examples.rst
@@ -1,6 +1,8 @@
 Examples
 ========
 
+.. _simple-scenario:
+
 Simple scenario
 ---------------
 
@@ -45,6 +47,10 @@
       Config::SetDefault ("ns3::PointToPointChannel::Delay", StringValue ("10ms"));
       Config::SetDefault ("ns3::DropTailQueue::MaxPackets", StringValue ("20"));
 
+      // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
+      CommandLine cmd;
+      cmd.Parse (argc, argv);
+
       // Creating nodes
       NodeContainer nodes;
       nodes.Create (3);
@@ -89,6 +95,8 @@
      NS_LOG=ndn.Consumer:ndn.Producer ./waf --run=ndn-simple
 
 
+.. _9-node-grid-example:
+ 
 9-node grid example
 -------------------
 
@@ -144,6 +152,10 @@
       Config::SetDefault ("ns3::PointToPointChannel::Delay", StringValue ("10ms"));
       Config::SetDefault ("ns3::DropTailQueue::MaxPackets", StringValue ("20"));
         
+      // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
+      CommandLine cmd;
+      cmd.Parse (argc, argv);
+
       // Creating 3x3 topology
       PointToPointHelper p2p;
       PointToPointGridHelper grid (3, 3, p2p);
@@ -195,3 +207,125 @@
 
     NS_LOG=ndn.Consumer:ndn.Producer ./waf --run=ndn-grid
 
+.. _9-node-grid-example-using-topology-plugin:
+
+9-node grid example using topology plugin
+-----------------------------------------
+
+Instead of defining topology directly as in :ref:`simple-scenario` or using specialized helpers as in :ref:`9-node-grid-example`, ndnSIM provides experimental extended versions of TopologyReader classes: :ndnsim:`AnnotatedTopologyReader` and :ndnsim:`RocketfuelWeightsReader`.
+
+While :ndnsim:`RocketfuelWeightsReader` is a specialized version intended to be used with `Rocketfuel <http://www.cs.washington.edu/research/networking/rocketfuel/>`_ topology and link weights files (examples will be provided later), :ndnsim:`AnnotatedTopologyReader` is a general-use tool that allows creation of any custom topologies.  
+The based format for the input file the :ndnsim:`AnnotatedTopologyReader` expects::
+
+    # any empty lines and lines starting with '#' symbol is ignored
+
+    # The file should contain exactly two sections: router and link, each starting with the corresponding keyword
+
+    # router section defines topology nodes and their relative positions (e.g., to use in visualizer)
+    router
+
+    # each line in this section represents one router and should have the following data
+    # node  comment     yPos    xPos
+    Node0   NA          3       1
+    Node1   NA          3       2
+    Node2   NA          3       3
+    Node3   NA          2       1
+    Node4   NA          2       2
+    Node5   NA          2       3
+    Node6   NA          1       1
+    Node7   NA          1       2
+    Node8   NA          1       3
+    # Note that `node` can be any string. It is possible to access to the node by name using Names::Find, see examples.
+
+    # link section defines point-to-point links between nodes and characteristics of these links
+    link
+
+    # Each line should be in the following format (only first two are required, the rest can be omitted)
+    # srcNode   dstNode     bandwidth   metric  delay   queue
+    # bandwidth: link bandwidth
+    # metric: routing metric
+    # delay:  link delay
+    # queue:  MaxPackets for transmission queue on the link (both directions)
+    Node0       Node1       1Mbps       1       10ms    10
+    Node0       Node3       1Mbps       1       10ms    10
+    Node1       Node2       1Mbps       1       10ms    10
+    Node1       Node4       1Mbps       1       10ms    10
+    Node2       Node5       1Mbps       1       10ms    10
+    Node3       Node4       1Mbps       1       10ms    10
+    Node3       Node6       1Mbps       1       10ms    10
+    Node4       Node5       1Mbps       1       10ms    10
+    Node4       Node7       1Mbps       1       10ms    10
+    Node5       Node8       1Mbps       1       10ms    10
+    Node6       Node7       1Mbps       1       10ms    10
+    Node7       Node8       1Mbps       1       10ms    10
+
+
+If you save the topology file to `topo.txt` in the current directory, then the following code will duplicate the functionality of :ref:`9-node-grid-example` but with the use of :ndnsim:`AnnotatedTopologyReader`:
+
+.. code-block:: c++
+
+    #include "ns3/core-module.h"
+    #include "ns3/network-module.h"
+    #include "ns3/ndnSIM-module.h"
+    
+    using namespace ns3;
+    
+    int 
+    main (int argc, char *argv[])
+    {
+      CommandLine cmd;
+      cmd.Parse (argc, argv);
+    
+      AnnotatedTopologyReader topologyReader ("", 25);
+      topologyReader.SetFileName ("topo.txt");
+      topologyReader.Read (); 
+        
+      // Install CCNx stack on all nodes
+      ndn::StackHelper ccnxHelper;
+      ccnxHelper.InstallAll ();
+        
+      // Installing global routing interface on all nodes
+      ndn::GlobalRoutingHelper ccnxGlobalRoutingHelper;
+      ccnxGlobalRoutingHelper.InstallAll ();
+          
+      // Getting containers for the consumer/producer
+      Ptr<Node> producer = Names::Find<Node> ("Node8");
+      NodeContainer consumerNodes;
+      consumerNodes.Add (Names::Find<Node> ("Node0"));
+          
+      // Install CCNx applications
+      std::string prefix = "/prefix";
+          
+      ndn::AppHelper consumerHelper ("ns3::ndn::ConsumerCbr");
+      consumerHelper.SetPrefix (prefix);
+      consumerHelper.SetAttribute ("Frequency", StringValue ("100")); // 100 interests a second
+      consumerHelper.Install (consumerNodes);
+          
+      ndn::AppHelper producerHelper ("ns3::ndn::Producer");
+      producerHelper.SetPrefix (prefix);
+      producerHelper.SetAttribute ("PayloadSize", StringValue("1024"));
+      producerHelper.Install (producer);
+        
+      // Add /prefix origins to ndn::GlobalRouter
+      ccnxGlobalRoutingHelper.AddOrigins (prefix, producer);
+        
+      // Calculate and install FIBs
+      ccnxGlobalRoutingHelper.CalculateRoutes ();
+          
+      Simulator::Stop (Seconds (20.0));
+            
+      Simulator::Run ();
+      Simulator::Destroy ();
+            
+      return 0;
+    }
+    
+As you can see, scenario code became more compact and more readable.
+
+:ndnsim:`AnnotatedTopologyReader` provides two ways to access topology nodes.  
+First, you can use the method :ndnsim:`AnnotatedTopologyReader::GetNodes` which returns NodeContainer.
+
+Alternatively, nodes can be accessed by name using `Names::Find<Node> ("nodename")` call, as in the above example.
+For this purpose,:ndnsim:`AnnotatedTopologyReader` automatically registers all created nodes with names specified in topology file.
+For more information about `Names` class, please refer to `NS-3 documentation <.. http://www.nsnam.org/doxygen/classns3_1_1_names.html>`_
+.
diff --git a/docs/source/faq.rst b/docs/source/faq.rst
new file mode 100644
index 0000000..3c3f9ec
--- /dev/null
+++ b/docs/source/faq.rst
@@ -0,0 +1,88 @@
+FAQ
+===
+
+Boost libraries
+---------------
+
+.. topic:: Custom boost libraries compilation problem
+
+    I'm trying to use custom boost libraries, but something is going wrong. What should I do?
+
+Please refer to :ref:`boost-custom-install` section for an example how custom boost libraries could be built.
+
+
+Visualizer problems
+-------------------
+
+.. topic:: Visualizer module is not working
+
+    Every time I'm trying to run visualizer, I get the following error::
+
+        Waf: Entering directory `/ndnSIM/ns-3/build'
+        Could not find a task generator for the name 'ns3-visualizer'..
+
+Something is wrong with your python bindings and python bindings dependencies. 
+Please follow the :ref:`requirements` section that lists what should be installed in order to run visualizer.
+
+Code questions
+--------------
+
+.. topic:: Failing a link between nodes
+
+    How can I fail a link between to NDN nodes?
+
+
+Right now, NS-3 does not provide ability to actually "break" the link between nodes in NS-3.
+However, exactly the same effect can be achieved by making an interface (:ndnsim:`ndn::Face`) up or down (:ndnsim:`ndn::Face::SetUp(true)` or :ndnsim:`ndn::Face::SetUp(false)`).
+
+Here is an example of function to "fail" a point-to-point link between two NDN nodes:
+
+.. code-block:: c++
+
+    // hijacker is more than an application. just disable all faces
+    void
+    FailLinks (Ptr<Node> node1, Ptr<Node> node2)
+    {
+      Ptr<ndn::L3Protocol> ndn1 = node1->GetObject<ndn::L3Protocol> ();
+      Ptr<ndn::L3Protocol> ndn2 = node2->GetObject<ndn::L3Protocol> ();
+    
+      // iterate over all faces to find the right one
+      for (uint32_t faceId = 0; faceId < ndn1->GetNFaces (); faceId++)
+        {
+          Ptr<ndn::NetDeviceFace> ndFace = ndn1->GetFace (faceId)->GetObject<ndn::NetDeviceFace> ();
+          if (ndFace == 0) continue;
+     
+          Ptr<PointToPointNetDevice> nd1 = ndFace->GetNetDevice ()->GetObject<PointToPointNetDevice> ();
+          if (nd1 == 0) continue;
+     
+          Ptr<Channel> channel = nd1->GetChannel ();
+          if (channel == 0) continue;
+     
+          Ptr<PointToPointChannel> ppChannel = DynamicCast<PointToPointChannel> (channel);
+     
+          Ptr<NetDevice> nd2 = ppChannel->GetDevice (0);
+          if (nd2->GetNode () == node1)
+            nd2 = ppChannel->GetDevice (1);
+     
+          if (nd2->GetNode () == node2)
+            {
+              Ptr<ndn::Face> face1 = ndn1->GetFaceByNetDevice (nd1);
+              Ptr<ndn::Face> face2 = ndn2->GetFaceByNetDevice (nd2);
+     
+              face1->SetUp (false);
+              face2->SetUp (false);
+              break;
+            }
+        }
+    }
+     
+
+General questions
+-----------------
+
+.. topic:: Errors/bugs reporting
+
+    I found an error in the documentation / bug in the code. What should I do?
+
+Please create an issue for the documentation error or code bug.  
+We will try to resolve the problem as fast as we can.
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 3a2f47e..510cf3a 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -12,4 +12,5 @@
    helpers
    applications
    examples
+   faq
    boost-custom-install
diff --git a/docs/source/intro.rst b/docs/source/intro.rst
index 5ec2355..4a7252a 100644
--- a/docs/source/intro.rst
+++ b/docs/source/intro.rst
@@ -70,6 +70,8 @@
 
 ndnSIM has been successfully compiled and used under Ubuntu Linux 12.04 (stock gcc, boost 1.48), Mac OS 10.8 (gcc-4.2 apple/llvm, macports gcc 4.7, boost 1.49 or 1.50).
 
+.. _requirements:
+
 Requirements
 -------------
 
