Updating documentation
diff --git a/docs/source/applications.rst b/docs/source/applications.rst
new file mode 100644
index 0000000..9fe1f5e
--- /dev/null
+++ b/docs/source/applications.rst
@@ -0,0 +1,136 @@
+ndnSIM applications
+===================
+
+ndnSIM includes a few reference applications that can be used as a base for NDN simulations.
+
+Reference applications
+++++++++++++++++++++++
+
+CcnxConsumerCbr
+^^^^^^^^^^^^^^^
+
+:ndnsim:`CcnxConsumerCbr` an application that generates Interest traffic with predefined pattern (constant frequency, constant average rate with inter-Interest gap distributed uniformly at random, exponentially at random, etc.).
+
+.. code-block:: c++
+
+   // Create application using the app helper
+   CcnxAppHelper helper ("ns3::CcnxConsumerCbr");
+
+This applications has the following attributes:
+
+* Frequency
+
+  .. note::
+     default: ``1.0`` (1 per second)
+
+  Either exact (for contant version) or expected (for randomized version) frequency with which Interests are generated
+
+  .. code-block:: c++
+
+     // Set attribute using the app helper
+     helper.SetAttribute ("Frequency", DoubleValue (1.0));
+
+* Randomize
+
+  .. note::
+     default: ``"none"``
+
+  Specify whether to do randomization for inter-Interest gap or not.  The following variants are currently supported:
+  
+  - ``"none"``: no randomization
+ 
+  - ``"uniform"``: uniform distribution in range (0, 1/Frequency)
+
+  - ``"exponential"``: exponential distribution with mean 1/Frequency
+
+  .. code-block:: c++
+
+     // Set attribute using the app helper
+     helper.SetAttribute ("Randomize", StringValue ("uniform"));
+
+CcnxConsumerBatches
+^^^^^^^^^^^^^^^^^^^
+
+:ndnsim:`CcnxConsumerBatches` is an on-off-style application gen- erating a specified number of Interests at specified points of simulation.
+
+.. code-block:: c++
+
+   // Create application using the app helper
+   CcnxAppHelper consumerHelper ("ns3::CcnxConsumerBatches");
+
+This applications has the following attributes:
+
+* Batches
+
+  .. note::
+     default: Empty
+
+  Specify exact pattern of Interest packets, specifying when and how many Interest packets should be sent. 
+  The following example defines that 1 Interest should be requested at time 1s, 5 Interests at time 5s, and 2 Interests at time 10s.:
+
+  .. code-block:: c++
+
+     // Set attribute using the app helper
+     helper.SetAttribute ("Batches", StringValue ("1s 1 2s 5 10s 2"));
+
+
+CcnxConsumerWindow
+^^^^^^^^^^^^^^^^^^
+
+:ndnsim:`CcnxConsumerWindow` is an application generating a variable rate Interest traffic. It relies on an optional NACK-Interest feature and implements a simple sliding-window-based Interest generation mecha- nism.
+
+.. code-block:: c++
+
+   // Create application using the app helper
+   CcnxAppHelper consumerHelper ("ns3::CcnxConsumerWindow");
+
+
+This applications has the following attributes:
+
+* Window
+
+  .. note::
+     default: ``1``
+
+  Initial number of Interests that will be send out without waiting for the data (number of outstanding Interests)
+
+* PayloadSize
+
+  .. note::
+     default: ``1040``
+
+  Expected size of the Data payload (necessary only when Size is specified)
+
+* Size
+
+  .. note::
+     default: ``-1``
+
+  Amount of data to be requested (will stop issuing Interests after ``Size`` data is received)
+
+  If ```Size`` is set to -1, Interests will be requested till the end of the simulation.
+
+CcnxProducer
+^^^^^^^^^^^^
+
+:ndnsim:`CcnxProducer` a simple Interest-sink application, which replying every incoming Interest with Data packet with a specified size and name same as in Interest.
+
+.. code-block:: c++
+
+   // Create application using the app helper
+   CcnxAppHelper consumerHelper ("ns3::CcnxProducer");
+
+
+Custom applications
++++++++++++++++++++
+
+Applications interact with the core of the system using AppFace realization of Face abstraction. 
+To simplify implementation of specific NDN application, ndnSIM provides a base CcnxApp class that takes care of creating CcnxAppFace and registering it inside the NDN protocol stack, as well as provides default processing for incoming Interest and Data packets.
+
+Base CcnxApp class
+^^^^^^^^^^^^^^^^^^
+
+
+
+Example
+^^^^^^^
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 8da1d3a..54b990e 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 = []
+extensions = [ "sphinx.ext.autodoc", "sphinxcontrib.doxylink" ]
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
@@ -240,3 +240,8 @@
 
 # How to display URL addresses: 'footnote', 'no', or 'inline'.
 #texinfo_show_urls = 'footnote'
+
+doxylink = {
+  'ndnsim' : ('ndnSIM.tag', '../../doxygen/html/'),
+}
+
diff --git a/docs/source/helpers.rst b/docs/source/helpers.rst
new file mode 100644
index 0000000..51a3b16
--- /dev/null
+++ b/docs/source/helpers.rst
@@ -0,0 +1,173 @@
+ndnSIM helpers
+==============
+
+Helpers are very important components of ndnSIM, especially for writing simulation scenarios.
+The following summarizes helpers and their basic usage.
+
+CcnxStackHelper
+---------------
+
+:ndnsim:`CcnxStackHelper` is used to install ndnSIM network stack on requested nodes, as well to provide a simple way configure several important parameters of NDN simulation.
+
+Example::
+
+   CcnxStackHelper ccnxHelper;
+   NodeContainer nodes;
+   ...
+   ccnxHelper.Install (nodes);
+
+Forwarding strategy
++++++++++++++++++++
+
+Forwarding strategy parameter **must** be set before installing stack on a node.
+
+  Currently, there are 2 implemented forwarding strategies that can be used in simulations:
+
+  - :ndnsim:`CcnxFloodingStrategy` (default)
+
+      Interests will be forwarded to all available faces available for a route (FIB entry).
+      If there are no available GREEN or YELLOW faces, interests is dropped.
+
+      .. code-block:: c++
+
+         ccnxHelper.SetForwardingStrategy ("ns3::CcnxFloodingStrategy");
+	 ...
+	 ccnxHelper.Install (nodes);
+	 
+      
+
+  - :ndnsim:`CcnxFloodingStrategy` with smart forwarding
+
+      If GREEN face is available, Interest will be sent to the highest-ranked GREEN face. 
+      If not, Interest will be forwarded to all available faces available for a route (FIB entry)/
+      If there are no available GREEN or YELLOW faces, interests is dropped.
+
+      .. code-block:: c++
+
+         Config::SetDefault ("ns3::CcnxFloodingStrategy::SmartFlooding", BooleanValue (true));
+         ccnxHelper.SetForwardingStrategy ("ns3::CcnxFloodingStrategy");
+	 ...
+	 ccnxHelper.Install (nodes);
+
+  - :ndnsim:`CcnxBestRouteStrategy`
+
+      If GREEN face is available, Interest will be sent to the highest-ranked GREEN face.
+      If not, Interest will be forwarded to the highest-ranked YELLOW face.
+      If there are no available GREEN or YELLOW faces, interests is dropped.
+
+      .. code-block:: c++
+
+         ccnxHelper.SetForwardingStrategy ("ns3::CcnxBestRouteStrategy");
+	 ...
+	 ccnxHelper.Install (nodes);
+
+Default routes
+++++++++++++++
+
+.. note::
+   Disabled by default
+
+In simple topologies, like in :doc:`examples <examples>`, or when
+simulating broadcast environment, it is possible to set up *default*
+FIB entries using :ndnsim:`CcnxStackHelper::SetDefaultRoutes` call.
+More specifically, every installed NDN stack will have a FIB entry to ``/`` prefix, containing all available faces.
+
+The following should be done before installing stack on a node:
+
+  .. code-block:: c++
+
+     ccnxHelper.SetDefaultRoutes (true);
+     ...
+     ccnxHelper.Install (nodes);
+
+
+Manually routes
++++++++++++++++
+
+Routes can be configured manually using :ndnsim:`CcnxStackHelper::AddRoute` static methods of :ndnsim:`CcnxStackHelper`.
+
+These routes **should** be created **after** installing NDN stack on a node:
+
+  .. code-block:: c++
+
+     ccnxHelper.Install (nodes);
+     ...
+     Ptr<Node> node = ...     // FIB entry will be added to FIB on this node
+     std::string prefix = ... // some prefix
+     Ptr<CcnxFace> face = ... // NDN face that belongs to the node and through which prefix is accessible
+     int32_t metric = ...     // some routing metric
+     CcnxStackHelper::AddRoute (node, prefix, face, metric);
+
+
+.. Enable optional interest limiting
+.. +++++++++++++++++++++++++++++++++
+
+.. EnableLimits
+
+CcnxGlobalRoutingHelper
+-----------------------
+
+To simplify FIB management in large topologies, ndnSIM contains a global routing controller (:ndnsim:`helper <CcnxGlobalRoutingHelper>` and :ndnsim:`special interface <CcnxGlobalRouter>`), similar in spirit to ``Ipv4GlobalRoutingHelper``.
+
+There are several necessary steps, in order to take advantage of the global routing controller:
+
+* install :ndnsim:`special interfaces <CcnxGlobalRouter>` on nodes
+
+   .. code-block:: c++
+   
+     NodeContainer nodes;
+     ...
+     CcnxGlobalRoutingHelper ccnxGlobalRoutingHelper;
+     ccnxGlobalRoutingHelper.Install (nodes);
+   
+* specify which node exports which prefix using :ndnsim:`CcnxGlobalRoutingHelper::AddOrigins`
+
+   .. code-block:: c++
+   
+     Ptr<Node> producer; // producer node that exports prefix
+     std::string prefix; // exported prefix
+     ...
+     ccnxGlobalRoutingHelper.AddOrigins (prefix, producer);
+   
+* calculate and install FIBs on every node using :ndnsim:`CcnxGlobalRoutingHelper::CalculateRoutes`
+
+   .. code-block:: c++
+   
+     ccnxGlobalRoutingHelper.CalculateRoutes ();
+   
+
+CcnxAppHelper
+---------------
+
+:ndnsim:`CcnxAppHelper` simplifies task of creating, configuring, and installing ndnSIM applications.
+
+
+The basic usage of the :ndnsim:`CcnxAppHelper`:
+
+* Create helper for specific applications class:
+
+   .. code-block:: c++
+
+      // Create helper for the consumer generating Interests with constant rate
+      CcnxAppHelper consumerHelper ("ns3::CcnxConsumerCbr");
+
+* Assign prefix on which application operates (either generating Interests using this name or satisfying Interests for this name) using :ndnsim:`CcnxAppHelper::SetPrefix`:
+
+   .. code-block:: c++
+
+      consumerHelper.SetPrefix (prefix);
+
+* Assign application-specific attributes using :ndnsim:`CcnxAppHelper::SetAttribute`:
+
+   .. code-block:: c++
+
+      // Set frequency parameter
+      consumerHelper.SetAttribute ("Frequency", StringValue ("10")); // 10 interests a second
+
+* Install application on one or more nodes:
+
+   .. code-block:: c++
+
+      NodeContainer nodes;
+      ...
+      consumerHelper.Install (nodes)
diff --git a/docs/source/index.rst b/docs/source/index.rst
index ad6750f..db110f4 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -6,8 +6,9 @@
 Contents:
 
 .. toctree::
-   :maxdepth: 2
+   :maxdepth: 4
 
    intro
    helpers
+   applications
    examples
diff --git a/docs/source/intro.rst b/docs/source/intro.rst
index b4a03b5..0566861 100644
--- a/docs/source/intro.rst
+++ b/docs/source/intro.rst
@@ -123,7 +123,7 @@
 Logging
 -----------------
 
-Almost every component in ndnSIM exports logging interface, so it is possible in debug compilation of simulator to track many details. For example, by enabling logging of CcnxFace and CcnxConsumer will show everything what happens on CcnxFace and CcnxConsumer classes::
+Almost every component in ndnSIM exports logging interface, so it is possible in debug compilation of simulator to track many details. For example, by enabling logging of :ndnsim:`CcnxFace` and :ndnsim:`CcnxConsumer` will show everything what happens on :ndnsim:`CcnxFace` and :ndnsim:`CcnxConsumer` classes::
 
     NS_LOG=CcnxFace:CcnxConsumer ./waf --run=ccnx-simple
 
@@ -134,7 +134,7 @@
 
 Overall structure of ndnSIM is described in our technical report.
 
-It is also possible to build doxygen documentation of ndnSIM API (in ns-3/doc/html/), provided that doxygen and graphviz modules are installed on system::
+It is also possible to build doxygen documentation of ndnSIM API (in ``ns-3/doc/html/``), provided that ``doxygen`` and ``graphviz`` modules are installed on system::
 
     ./waf doxygen
 
@@ -142,23 +142,28 @@
 A very short guide to the code
 ==============================
 
-All the NDN related code is in ns-3/src/ndnSIM
+All the NDN related code is in ``ns-3/src/ndnSIM``
 
 +-----------------+---------------------------------------------------------------------+
 | Folder          | Description                                                         |
 +=================+=====================================================================+
-| ``examples/``   | contain several example scenarios                                   |
+| ``model/``      | implementation of NDN base: :ndnsim:`CcnxL3Protocol`, faces         |
+|                 | (:ndnsim:`CcnxFace`, :ndnsim:`CcnxNetDeviceFace`, forwarding        |
+|                 | :ndnsim:`CcnxLocalFace`),                                           |
+|                 | strategies (:ndnsim:`CcnxForwardingStrategy`,                       |
+|                 | :ndnsim:`CcnxFloodingStrategy`, :ndnsim:`CcnxBestRouteStrategy`),   |
+|                 | etc.                                                                |
 +-----------------+---------------------------------------------------------------------+
 | ``apps/``       | applications (in NS-3 sense) that can be installed on the nodes.    |
-|                 | Right now we have one producer (``CcnxProducer``) and a collection  |
-|                 | of consumer (``CcnxConsumerCbr``, ``CcnxConsumerWindow``,           |
-|                 | ``CcnxConsumerBatches``).  See doxygen documentation or source      |
-|                 | code for details                                                    |
+|                 | Right now we have one producer (:ndnsim:`CcnxProducer`) and a       |
+|                 | collection  of consumer (:ndnsim:`CcnxConsumerCbr`,                 |
+|                 | :ndnsim:`CcnxConsumerWindow`,                                       |
+|                 | :ndnsim:`CcnxConsumerBatches`).  See doxygen documentation or       |
+|                 | source  code for details                                            |
 +-----------------+---------------------------------------------------------------------+
-| ``helper/``     | a number of useful helpers                                          |
+| ``helper/``     | a number of :doc:`useful helpers <helpers>`                         |
 +-----------------+---------------------------------------------------------------------+
-| ``model/``      | implementation of NDN base: L3 protocol, faces, forwarding          |
-|                 | strategies, etc.                                                    |
+| ``examples/``   | contain :doc:`several example scenarios <examples>`                 |
 +-----------------+---------------------------------------------------------------------+
 | ``utils/``      | helper classes                                                      |
 +-----------------+---------------------------------------------------------------------+