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.
