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)
