diff --git a/docs/Doxyfile b/docs/Doxyfile
index b8d1823..0ffcccf 100644
--- a/docs/Doxyfile
+++ b/docs/Doxyfile
@@ -1966,6 +1966,7 @@
                          NS_LOG_COMPONENT_DEFINE \
                          NFD_LOG_INIT \
                          BOOST_CONCEPT_ASSERT \
+                         BOOST_CONCEPT_REQUIRES \
                          PUBLIC_WITH_TESTS_ELSE_PROTECTED=protected \
                          PUBLIC_WITH_TESTS_ELSE_PRIVATE=private \
                          PROTECTED_WITH_TESTS_ELSE_PRIVATE=private \
@@ -1973,7 +1974,11 @@
                          DECL_OVERRIDE \
                          ATTRIBUTE_HELPER_CPP \
                          NDN_CXX_KEYCHAIN_REGISTER_PIB \
-                         NDN_CXX_KEYCHAIN_REGISTER_TPM
+                         NDN_CXX_KEYCHAIN_REGISTER_TPM \
+                         NFD_LOG_INCLASS_TEMPLATE_SPECIALIZATION_DEFINE \
+                         NFD_LOG_INCLASS_2TEMPLATE_SPECIALIZATION_DEFINE \
+                         NDN_CXX_DECL_OVERRIDE=override \
+                         NDN_CXX_DECL_FINAL=final
 
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
diff --git a/docs/redmine_issue.py b/docs/redmine_issue.py
new file mode 100644
index 0000000..35c3b12
--- /dev/null
+++ b/docs/redmine_issue.py
@@ -0,0 +1,70 @@
+# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+# Based on http://doughellmann.com/2010/05/09/defining-custom-roles-in-sphinx.html
+
+"""Integration of Sphinx with Redmine.
+"""
+
+from docutils import nodes, utils
+from docutils.parsers.rst.roles import set_classes
+
+def redmine_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
+    """Link to a Redmine issue.
+
+    Returns 2 part tuple containing list of nodes to insert into the
+    document and a list of system messages.  Both are allowed to be
+    empty.
+
+    :param name: The role name used in the document.
+    :param rawtext: The entire markup snippet, with role.
+    :param text: The text marked with the role.
+    :param lineno: The line number where rawtext appears in the input.
+    :param inliner: The inliner instance that called us.
+    :param options: Directive options for customization.
+    :param content: The directive content for customization.
+    """
+    try:
+        issue_num = int(text)
+        if issue_num <= 0:
+            raise ValueError
+    except ValueError:
+        msg = inliner.reporter.error(
+            'Redmine issue number must be a number greater than or equal to 1; '
+            '"%s" is invalid.' % text, line=lineno)
+        prb = inliner.problematic(rawtext, rawtext, msg)
+        return [prb], [msg]
+    app = inliner.document.settings.env.app
+    node = make_link_node(rawtext, app, 'issues', str(issue_num), options)
+    return [node], []
+
+def make_link_node(rawtext, app, type, slug, options):
+    """Create a link to a Redmine resource.
+
+    :param rawtext: Text being replaced with link node.
+    :param app: Sphinx application context
+    :param type: Link type (issue, changeset, etc.)
+    :param slug: ID of the thing to link to
+    :param options: Options dictionary passed to role func.
+    """
+    #
+    try:
+        base = app.config.redmine_project_url
+        if not base:
+            raise AttributeError
+    except AttributeError, err:
+        raise ValueError('redmine_project_url configuration value is not set (%s)' % str(err))
+    #
+    slash = '/' if base[-1] != '/' else ''
+    ref = base + slash + type + '/' + slug + '/'
+    set_classes(options)
+    node = nodes.reference(rawtext, 'Issue #' + utils.unescape(slug), refuri=ref,
+                           **options)
+    return node
+
+def setup(app):
+    """Install the plugin.
+
+    :param app: Sphinx application context.
+    """
+    app.add_role('issue', redmine_role)
+    app.add_config_value('redmine_project_url', None, 'env')
+    return
diff --git a/docs/source/RELEASE_NOTES.rst b/docs/source/RELEASE_NOTES.rst
index 3b33d33..babf221 100644
--- a/docs/source/RELEASE_NOTES.rst
+++ b/docs/source/RELEASE_NOTES.rst
@@ -5,8 +5,150 @@
 
 All of the ndnSIM documentation is accessible from the `ndnSIM website <http://ndnsim.net>`__.
 
-Release 2.0
------------
+Release 2.1 (Changes since release 2.0)
+---------------------------------------
+
+Release date: September 4, 2015
+
+Overview
+~~~~~~~~
+
+- Integration with ndn-cxx and NFD codebases has been refactored to include ndn-cxx and
+  NFD repositories as git submodules within ndnSIM repository (:issue:`3138`).
+
+  This refactoring simplifies upgrading ndn-cxx and NFD to new versions and prevents old
+  simulation code to break because of API changes in newer versions of ndn-cxx library.
+
+  .. note::
+     In order to retrieve the marked versions of ndn-cxx and NFD, use ``--recursive``
+     option to the git clone command or run ``git submodule update --init`` after clone,
+     pull, or merge.
+
+- The official home for ndnSIM codebase has been moved to `GitHub named-data-ndnSIM
+  organization <https://github.com/named-data-ndnSIM>`__ (:issue:`3123`):
+
+  * `ndnSIM codebase <https://github.com/named-data-ndnSIM/ndnSIM>`__
+  * `Modified version of ndn-cxx <https://github.com/named-data-ndnSIM/ndn-cxx>`__
+  * `Modified version of NFD <https://github.com/named-data-ndnSIM/NFD>`__
+  * `Modified version of NS-3 <https://github.com/named-data-ndnSIM/ns-3-dev>`__
+  * `Modified version of python bindings generator <https://github.com/named-data-ndnSIM/pybindgen>`__
+
+- Modified version of NS-3 was updated to (rebased on top of) version 2.23-dev, with
+  ndnSIM codebase adjusted to reflect API changes (:issue:`3122`)
+
+- NFD and ndn-cxx has been upgraded to version 0.3.4 (:issue:`3125`)
+  
+New features
+~~~~~~~~~~~~
+
+- ndnSIM-specific version of :ndnsim:`ndn::Face` (:issue:`2370`)
+
+  The updated version of :ndnsim:`ndn::Face` specially designed to allow writing
+  simulation applications in the same way as real applications.  It is also possible to
+  directly use codebase of the existing applications to drive simulations, provided that
+  the codebase meets or can be adjusted to meet the requirements listed in
+  :doc:`guide-to-simulate-real-apps`.
+
+- Full support for NFD'S RIB manager (:issue:`2370`)
+
+  .. note::
+     RIB manager support is currently available only for applications based on ndn-cxx.
+     :ndnsim:`FibHelper::AddRoute` and :ndnsim:`FibHelper::RemoveRoute` used by
+     :ndnsim:`ndn::Producer` and :ndnsim:`ndn::GlobalRoutingHelper` are currently
+     interacting directly with NFD's FIB manager.  This issue will be resolved in the next
+     release of ndnSIM (:issue:`3121`)
+
+- Tutorial and example on how to speed up simulations with MPI module of NS-3:
+  `<http://ndnsim.net/2.0/parallel-simulations.html>`__
+
+- Two new helpers to simplify writing basic simulation scenarios:
+
+  - :ndnsim:`ScenarioHelper` leverages C++11 constructs to write scenarios. Example:
+
+    .. code-block:: c++
+
+         ScenarioHelper helper;
+         helper.createTopology({
+             {"1", "2"},
+             {"2", "3"}
+           });
+
+         helper.addRoutes({
+             {"1", "2", "/prefix", 1},
+             {"2", "3", "/prefix", 1}
+           });
+
+         helper.addApps({
+             {"1", "ns3::ndn::ConsumerCbr",
+                 {{"Prefix", "/prefix"}, {"Frequency", "1"}},
+                 "0s", "100s"},
+             {"3", "ns3::ndn::Producer",
+                 {{"Prefix", "/prefix"}, {"PayloadSize", "1024"}},
+                 "0s", "100s"}
+           });
+
+
+  - :ndnsim:`FactoryCallbackApp` simplifies creation of basic apps without creating a
+    separate class that is derived from ``ns3::Applications``. Example:
+
+    .. code-block:: c++
+
+        class SomeApp
+        {
+        public:
+          SomeApp(size_t initParameter);
+          ...
+        };
+
+        FactoryCallbackApp::Install(node, [] () -> shared_ptr<void> {
+            return make_shared<SomeApp>(42);
+          })
+          .Start(Seconds(1.01));
+
+Improvements and bug fixes
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- Updates of ndnSIM documentation
+
+  * Updated the structure for the `ndnSIM website index page <http://ndnsim.net>`__
+  * Updated installation instructions to reflect refactoring and relocation of ndnSIM codebase
+  * API documentation (doxygen) improvements
+  * Updated list of ndnSIM research papers
+
+- The NDN stack can now be updated to handle any simulation topology changes after
+  its initial installation on a node (:issue:`2717`)
+
+- Application ID that appears in :ndnsim:`ndn::AppDelayTracer` output is now ID of the
+  application on the node, not ID of the application face that was used previously.
+
+- FibHelper has been extended to support route removals (:issue:`2358`)
+
+- ndnSIM codebase now partially covered with unit-tests (:issue:`2369`, :issue:`3059`,
+  :issue:`2783`)
+
+- Bugfixes:
+
+  * In :ndnsim:`ndn::GlobalRoutingHelper::CalculateAllPossibleRoutes` that caused crash in
+    some cases (:issue:`2535`)
+
+  * In FailLink and Uplink methods of :ndnsim:`ndn::LinkControlHelper` class that affected
+    more links than requested (:issue:`2783`)
+
+  * With hop count of data packets retrieved from the Contest Store of NFD (:issue:`2764`)
+
+  * In :ndnsim:`ndn::Producer` application that caused a wrong dummy signature to be added
+    to the constructed data packets (:issue:`2927`)
+
+
+
+********************************************************************************
+
+
+
+Release 2.0 (Changes since release 1.0)
+---------------------------------------
+
+Release date: January 13, 2015
 
 Overview
 ~~~~~~~~
@@ -36,7 +178,7 @@
 New Features
 ~~~~~~~~~~~~
 
--  Integration with NFD codebase:
+-  Integration with NFD codebase.
 -  A realistic behavior is added to the simulations.
 -  Forwarding plane extensions can be used in both ndnSIM simulations and real NFD deployment.
 -  Per namespace forwarding strategies for different namespaces (one strategy per namespace).
diff --git a/docs/source/_templates/indexcontent.html b/docs/source/_templates/indexcontent.html
index 55a4b08..0a9cfbb 100644
--- a/docs/source/_templates/indexcontent.html
+++ b/docs/source/_templates/indexcontent.html
@@ -93,6 +93,7 @@
           <p class="biglink"><a class="biglink" href="http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim" target="_blank">ndnSIM mailing list</a><br/>
             <span class="linkdescr"><a href="http://www.lists.cs.ucla.edu/pipermail/ndnsim/" target="_blank">mailing list archives</a></span></p>
 
+          <p class="biglink"><a class="biglink" href="{{ pathto("meta/authors") }}">ndnSIM Team</a></p>
           <p class="biglink"><a class="biglink" href="{{ pathto("meta/copying") }}">Copyright and License</a></p>
         </div>
       </td>
diff --git a/docs/source/conf.py b/docs/source/conf.py
index c648be3..8a5d508 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -11,12 +11,12 @@
 # All configuration values have a default; values that are commented out
 # serve to show the default.
 
-import sys, os
+import sys, os, re
 
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
 # documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.insert(0, os.path.abspath('.'))
+sys.path.insert(0, os.path.abspath('..'))
 
 # -- General configuration -----------------------------------------------------
 
@@ -25,8 +25,32 @@
 
 # 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", "sphinx.ext.mathjax", "sphinxcontrib.doxylink", "sphinxcontrib.aafig", "sphinxcontrib.googleanalytics", "sphinxcontrib.bibtex" ]
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.mathjax',
+    'sphinxcontrib.doxylink',
+    'sphinxcontrib.aafig',
+    'sphinxcontrib.googleanalytics',
+    'sphinxcontrib.bibtex',
+    'redmine_issue'
+]
 
+# def addExtensionIfExists(extension):
+#     try:
+#         __import__(extension)
+#         extensions.append(extension)
+#     except ImportError:
+#         sys.stderr.write("Extension '%s' in not available. "
+#                          "Some documentation may not build correctly.\n" % extension)
+#         sys.stderr.write("To install, use \n"
+#                          "  sudo pip install %s\n" % extension.replace('.', '-'))
+
+# addExtensionIfExists('sphinxcontrib.doxylink')
+
+# if os.getenv('GOOGLE_ANALYTICS', None):
+#     addExtensionIfExists('sphinxcontrib.googleanalytics')
+
+    
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
 
@@ -255,3 +279,5 @@
 aafig_format = {'latex': 'pdf', 'html': 'svg', 'text': None}
 
 # aafig_default_options = dict(Fixed=True)
+
+redmine_project_url = "http://redmine.named-data.net/"
diff --git a/docs/source/intro.rst b/docs/source/intro.rst
index 4c4c981..f976b8d 100644
--- a/docs/source/intro.rst
+++ b/docs/source/intro.rst
@@ -49,7 +49,7 @@
 
 Specifically, the simulator directly uses NFD implementations of :nfd:`pending Interest
 table (PIT) <nfd::Pit>`, :nfd:`forwarding information base (FIB) <nfd::Fib>`, and
-:nfd:`content store <nfd::Cs>` data structures.  In addition to that, ndnSIM allows
+:nfd:`content store <nfd::cs::Cs>` data structures.  In addition to that, ndnSIM allows
 experimentation with :ndnSIM:`ndnSIM-specific content store <ndn::ContentStore>` along
 with its cache replacement policies ported from the previous version of ndnSIM.
 
diff --git a/docs/source/meta/authors.rst b/docs/source/meta/authors.rst
new file mode 100644
index 0000000..875d98f
--- /dev/null
+++ b/docs/source/meta/authors.rst
@@ -0,0 +1,4 @@
+ndnSIM Team
+===========
+
+.. include:: ../../../AUTHORS
