diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e35d885
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+_build
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ade5cef
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,153 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = _build
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html       to make standalone HTML files"
+	@echo "  dirhtml    to make HTML files named index.html in directories"
+	@echo "  singlehtml to make a single large HTML file"
+	@echo "  pickle     to make pickle files"
+	@echo "  json       to make JSON files"
+	@echo "  htmlhelp   to make HTML files and a HTML help project"
+	@echo "  qthelp     to make HTML files and a qthelp project"
+	@echo "  devhelp    to make HTML files and a Devhelp project"
+	@echo "  epub       to make an epub"
+	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+	@echo "  text       to make text files"
+	@echo "  man        to make manual pages"
+	@echo "  texinfo    to make Texinfo files"
+	@echo "  info       to make Texinfo files and run them through makeinfo"
+	@echo "  gettext    to make PO message catalogs"
+	@echo "  changes    to make an overview of all changed/added/deprecated items"
+	@echo "  linkcheck  to check all external links for integrity"
+	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	-rm -rf $(BUILDDIR)/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+	@echo
+	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/NDNspecification.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/NDNspecification.qhc"
+
+devhelp:
+	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+	@echo
+	@echo "Build finished."
+	@echo "To view the help file:"
+	@echo "# mkdir -p $$HOME/.local/share/devhelp/NDNspecification"
+	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/NDNspecification"
+	@echo "# devhelp"
+
+epub:
+	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+	@echo
+	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make' in that directory to run these through (pdf)latex" \
+	      "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through pdflatex..."
+	$(MAKE) -C $(BUILDDIR)/latex all-pdf
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+	@echo
+	@echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+	@echo
+	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo
+	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+	@echo "Run \`make' in that directory to run these through makeinfo" \
+	      "(use \`make info' here to do that automatically)."
+
+info:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo "Running Texinfo files through makeinfo..."
+	make -C $(BUILDDIR)/texinfo info
+	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+	@echo
+	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..1a4a69f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,36 @@
+Prerequisites
+=============
+
+To "compile" documentation into html form you would need to install Sphinx documentation package, which should be relatively trivial.
+
+If you're on OSX platform:
+
+- If you have macports, then
+
+    sudo port install py27-sphinx
+    sudo port selectsphinx py27-sphinx
+
+- Install from source: http://sphinx-doc.org/install.html
+
+- Install from .pkg binary package: http://named-data.net/binaries/sphinx-doc-0.2.pkg
+
+If you're on Ubuntu Linux:
+
+    sudo apt-get install python-sphinx
+
+Compilation
+===========
+
+Just type
+
+    make html
+
+And a set of HTML pages will be build under ``_build/html``
+
+
+You can also type
+
+    make latexpdf
+
+This way Sphinx will prepare .tex file and will try to build .pdf document.
+
diff --git a/conf.py b/conf.py
new file mode 100644
index 0000000..7a84fc0
--- /dev/null
+++ b/conf.py
@@ -0,0 +1,242 @@
+# -*- coding: utf-8 -*-
+#
+# NDN specification documentation build configuration file, created by
+# sphinx-quickstart on Wed Nov 20 16:17:43 2013.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# 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('.'))
+
+# -- General configuration -----------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = []
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'NDN Common Client Libraries API'
+copyright = u'2013, NDN Project Team'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '0.1'
+# The full version, including alpha/beta/rc tags.
+release = '0.1a2'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+html_theme = 'pyramid'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'ndn_ccl_api'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+latex_elements = {
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', 'ndn-ccl-api.tex', u'NDN Common Client Libraries API',
+   u'NDN Project Team', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+# latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output --------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    ('index', 'ndn-ccl-api', u'NDN Common Client Libraries API',
+     [u'NDN Project Team'], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output ------------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+  ('index', 'ndn-ccl-api', u'NDN Common Client Libraries API',
+   u'NDN Project Team', 'NDN_CCL_API', 'NDN Common Client Libraries API.',
+   'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
diff --git a/data.rst b/data.rst
new file mode 100644
index 0000000..6ce1cab
--- /dev/null
+++ b/data.rst
@@ -0,0 +1,162 @@
+.. _Data:
+
+Data Class
+==========
+
+:[C++]:
+    Namespace: ``ndn``
+
+:[Python]:
+    Module: ``pyndn``
+
+Data Constructor
+----------------
+
+Create a new Data with the optional values.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Data(
+    
+        [const Name& name]
+    
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    var Data = function Data(
+    
+        [name         // Name]
+    
+    )
+
+:[Python]:
+
+.. code-block:: python
+
+    def __init__(self
+    
+        [, name       // Name]
+    
+    )
+
+:Parameters:
+
+    - ``name``
+	(optional) The name for the data packet.
+
+Data.getContent Method
+----------------------
+
+Get content of the Data packet.
+
+:[C++]:
+
+.. code-block:: c++
+
+    const Blob& getContent() const;
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns Blob
+    Data.prototype.getContent = function()
+    
+:Returns:
+
+    A pointer to the content byte array.
+
+Data.setContent Method
+----------------------
+
+Set content to point to an existing byte array.
+
+:[C++]:
+
+.. code-block:: c++
+
+    void setContent(
+    
+        const Blob& content
+    
+    );
+
+:Parameters:
+
+    - ``content``
+	The pointer to the byte array.
+
+Data.wireDecode Method
+----------------------
+
+Decode the input using a particular wire format and update this Data. If wireFormat is the default wire format, also set the defaultWireEncoding field to the input.
+
+:[C++]:
+
+.. code-block:: c++
+
+    void wireDecode(
+    
+        const std::vector<uint8_t>& input
+	[, WireFormat& wireFormat]
+    
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    ContentObject.prototype.decode = function(
+    
+        input // Uint8Array
+        [, wireFormat // WireFormat]
+    
+    )
+
+:Parameters:
+
+    - ``input``
+	The input byte array to be decoded.
+
+    - ``wireFormat``
+	(optional) A WireFormat object used to decode the input. If omitted, use WireFormat getDefaultWireFormat().
+
+Data.wireEncode Method
+----------------------
+
+Encode this Data for a particular wire format. If wireFormat is the default wire format, also set the defaultWireEncoding field to the encoded result.
+
+:[C++]:
+
+.. code-block:: c++
+
+    SignedBlob wireEncode(
+    
+        [WireFormat& wireFormat]
+    
+    ) const;
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns Uint8Array
+    ContentObject.prototype.encode = function(
+    
+        [wireFormat // WireFormat]
+    
+    )
+
+:Parameters:
+
+    - wireFormat
+	(optional) A WireFormat object used to encode the input. If omitted, use WireFormat getDefaultWireFormat ().
+
+:Returns:
+
+    The encoded byte array as a SignedBlob.
diff --git a/face.rst b/face.rst
new file mode 100644
index 0000000..5ad2303
--- /dev/null
+++ b/face.rst
@@ -0,0 +1,367 @@
+.. _Face:
+
+Face Class
+==========
+
+:[C++]:
+    Namespace: ``ndn``
+
+:[Python]:
+    Module: ``pyndn``
+
+Face Constructor (explicit Transport)
+-------------------------------------
+
+Create a new Face object with the given Transport to manage NDN communication.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Face(
+    
+        const ptr_lib::shared_ptr<Transport>& transport
+        const ptr_lib::shared_ptr<const Transport::ConnectionInfo>& connectionInfo
+    
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    var Face = function Face(
+    
+        [settings // associative array]
+    
+    )
+
+:[Python]:
+
+.. code-block:: python
+
+    def __init__(self)
+
+:Parameters:
+
+    - ``transport``
+	An object of a subclass of Transport to use for communication.
+
+    - ``connectionInfo``
+	This must be a ConnectionInfo from the same subclass of Transport as transport.
+
+    - ``settings``
+	(JavaScript only) An associative array with the following defaults:
+
+	.. code-block:: javascript
+
+            getTransport: function() { return new WebSocketTransport(); },
+            getHostAndPort: transport.defaultGetHostAndPort,
+                 // a function, on each call it returns a new { host: host, port: port } or null if there are no more hosts.
+            host: null, // If null, use getHostAndPort when connecting.
+            port: 9696
+
+Face Constructor (default Transport)
+------------------------------------
+
+Create a new Face object with optional settings to manage NDN communication.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Face(
+    
+        [const char* host]
+        [, unsigned short port]
+    
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    var Face = function Face(
+    
+        [settings // associative array]
+    
+    )
+
+:[Python]:
+
+.. code-block:: python
+
+    def __init__(self)
+
+:Parameters:
+
+    - ``host``
+	(optional) The host to connect to. If omitted, use “localhost” with the default TcpTransport.
+
+    - ``port``
+	(optional) The port to connect to. If omitted, use 6363 with the default TcpTransport.
+
+    - ``settings``
+	(JavaScript only) (optional) An associative array with the following defaults:
+
+	.. code-block:: javascript
+
+            getTransport: function() { return new WebSocketTransport(); },
+            getHostAndPort: transport.defaultGetHostAndPort,
+                // a function, on each call it returns a new { host: host, port: port } or null if there are no more hosts.
+            host: null, // If null, use getHostAndPort when connecting.
+            port: 9696
+
+Face.expressInterest Method (from Interest)
+-------------------------------------------
+
+Send the interest through the transport, read the entire response and call onData. If the interest times out according to interest lifetime, call onTimeout (if not omitted).
+
+C++ only: Your application must call processEvents.
+
+:[C++]:
+
+.. code-block:: c++
+
+    unsigned int expressInterest(
+    
+        const Interest& interest,
+        const OnData& onData,
+        [, const OnTimeout& onTimeout]
+        [, WireFormat& wireFormat]
+    
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    Face.prototype.expressInterest = function(
+    
+        interest     // Interest
+        onData,      // function
+        [, onTimeout // function]
+    
+    )
+
+:Parameters:
+
+    - ``interest``
+	The Interest to send which includes the interest lifetime for the timeout.
+
+    - ``onData``
+	When a matching data packet is received, this calls ``onData(interest, data)`` where:
+
+	    - ``interest`` is the interest given to expressInterest.
+	    - ``data`` is the received Data object.
+
+    - ``onTimeout``
+	(optional) If the interest times out according to the interest lifetime, this calls ``onTimeout(interest)`` where:
+
+	    - ``interest`` is the interest given to expressInterest.
+
+    - ``wireFormat``
+	(optional) A WireFormat object used to encode the message. If omitted, use WireFormat getDefaultWireFormat ().
+
+:Returns:
+
+    The pending interest ID which can be used with removePendingInterest.
+
+Face.expressInterest Method (from Name)
+---------------------------------------
+
+Encode name as an Interest, using the interestTemplate if supplied, send the interest through the transport, read the entire response and call onData. If the interest times out according to interest lifetime, call onTimeout (if not omitted).
+C++ only: Your application must call processEvents.
+
+:[C++]:
+
+.. code-block:: c++
+
+    unsigned int expressInterest(
+    
+        const Name& name,
+        [, const Interest* interestTemplate]
+        const OnData& onData,
+        [, const OnTimeout& onTimeout]
+        [, WireFormat& wireFormat]
+    
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    Face.prototype.expressInterest = function(
+    
+        name,               // Name
+        [, interestTemplate // Interest]
+        onData,             // function
+        [, onTimeout        // function]
+    
+    )
+
+:[Python]:
+
+.. code-block:: python
+
+    def expressInterest(self,
+    
+        name                # Name
+        closure             # Closure
+        [, interestTemplate # Interest]
+    
+    )
+
+:Parameters:
+
+    - ``name``
+	The Name for the interest.
+
+    - ``interestTemplate``
+	(optional) If not omitted, copy the interest selectors from this Interest. If omitted, use a default interest lifetime.
+
+    - ``onData``
+	When a matching data packet is received, this calls ``onData(interest, data)`` where:
+
+	    - ``interest`` is the interest given to expressInterest.
+	    - ``data`` is the received Data object.
+
+    - ``onTimeout``
+	(optional) If the interest times out according to the interest lifetime, this calls ``onTimeout(interest)`` where:
+
+	    - ``interest`` is the interest given to expressInterest.
+
+    - ``wireFormat``
+	(optional) A WireFormat object used to encode the message. If omitted, use WireFormat getDefaultWireFormat ().
+
+:Returns:
+
+    The pending interest ID which can be used with removePendingInterest.
+
+Face.removePendingInterest Method
+---------------------------------
+
+Remove the pending interest entry with the pendingInterestId from the pending interest table. This does not affect another pending interest with a different pendingInterestId, even it if has the same interest name. If there is no entry with the pendingInterestId, do nothing.
+
+:[C++]:
+
+.. code-block:: c++
+
+    void removePendingInterest(
+    
+        unsigned int pendingInterestId
+    
+    );
+
+:Parameters:
+
+    - ``pendingInterestId``
+	The ID returned from expressInterest.
+
+Face.registerPrefix Method
+--------------------------
+
+Register prefix with the connected NDN hub and call onInterest when a matching interest is received.
+
+C++ only: Your application must call processEvents.
+
+:[C++]:
+
+.. code-block:: c++
+
+    unsigned int registerPrefix(
+    
+        const Name& prefix,
+        const OnInterest& onInterest,
+        const OnRegisterFailed& onRegisterFailed,
+        [, ForwardingFlags flags]
+        [, WireFormat& wireFormat]
+    
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    Face.prototype.registerPrefix = function(
+    
+        name,             // Name
+        onInterest        // function
+        onRegisterFailed  // function
+        [, flags          // ForwardingFlags]
+    
+    )
+
+:[Python]:
+
+.. code-block:: python
+
+    def setInterestFilter(self,
+    
+        name     # Name
+        closure  # Closure
+        [, flags # int]
+    
+    )
+
+:Parameters:
+
+    - ``prefix``
+	The Name prefix.
+
+    - ``onInterest``
+	When an interest is received which matches the name prefix, this calls ``onInterest(prefix, interest, transport, registeredPrefixId)`` where:
+
+	    - ``prefix`` is the prefix given to registerPrefix.
+	    - ``interest`` is the received interest.
+	    - ``transport`` is the Transport with the connection which received the interest. You must encode a signed Data packet and send it using transport.send().
+	    - ``registeredPrefixId`` is the registered prefix ID which can be used with removeRegisteredPrefix.
+
+    - ``onRegisterFailed``
+	If failed to retrieve the connected hub's ID or failed to register the prefix, this calls onRegisterFailed(prefix) where:
+	    - ``prefix`` is the prefix given to registerPrefix.
+
+    - ``flags``
+	(optional) The flags for finer control of which interests are forward to the application.  If omitted, use the default flags defined by the default ForwardingFlags constructor.
+
+    - ``wireFormat``
+	(optional) A WireFormat object used to encode the message. If omitted, use WireFormat getDefaultWireFormat ().
+
+:Returns:
+
+    The registered prefix ID which can be used with removeRegisteredPrefix.
+
+Face.removeRegisteredPrefix Method
+----------------------------------
+
+Remove the registered prefix entry with the registeredPrefixId from the pending interest table.  This does not affect another registered prefix with a different registeredPrefixId, even it if has the same prefix name. If there is no entry with the registeredPrefixId, do nothing.
+
+:[C++]:
+
+.. code-block:: c++
+
+    void removeRegisteredPrefix(
+    
+        unsigned int registeredPrefixId
+    
+    );
+
+:Parameters:
+
+    - ``registeredPrefixId``
+	The ID returned from registerPrefix.
+
+Face.processEvents Method
+-------------------------
+
+C++ only: Process any data to receive and call data or timeout callbacks.  This is non-blocking and will return immediately if there is no data to receive.  You should repeatedly call this from an event loop, with calls to sleep as needed so that the loop doesn't use 100% of the CPU.  Since processEvents modifies the pending interest table, your application should make sure that it calls processEvents in the same thread as expressInterest (which also modifies the pending interest table).
+
+:[C++]:
+
+.. code-block:: c++
+
+    void processEvents();
+
+:Throw:
+
+    This may throw an exception for reading data or in the callback for processing the data.  If you call this from an main event loop, you may want to catch and log/disregard all exceptions.
+
diff --git a/index.rst b/index.rst
new file mode 100644
index 0000000..eb3c1a6
--- /dev/null
+++ b/index.rst
@@ -0,0 +1,24 @@
+
+NDN Common Client Libraries API
+===============================
+
+This documents the API for the NDN client libraries, showing the classes and method declarations for C++, JavaScript and Python.
+
+Table of Contents:
+
+.. toctree::
+   name
+   interest
+   data
+   signature
+   face
+   :maxdepth: 2
+
+
+.. Indices and tables
+.. ==================
+
+.. * :ref:`genindex`
+.. * :ref:`modindex`
+.. * :ref:`search`
+
diff --git a/interest.rst b/interest.rst
new file mode 100644
index 0000000..614b354
--- /dev/null
+++ b/interest.rst
@@ -0,0 +1,197 @@
+.. _Interest:
+
+Interest Class
+==============
+
+:[C++]:
+    Namespace: ``ndn``
+
+:[Python]:
+    Module: ``pyndn``
+
+Interest Constructor
+--------------------
+
+Create a new Interest with the optional values.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Interest(
+    
+        [const Name& name]
+        [, int minSuffixComponents]
+        [, int maxSuffixComponents]
+        [, const PublisherPublicKeyDigest& publisherPublicKeyDigest]
+        [, const Exclude& exclude]
+        [, int childSelector]
+        [, int answerOriginKind]
+        [, int scope]
+        [, Milliseconds interestLifetimeMilliseconds]
+        [, const std::vector<uint8_t>& nonce]
+    
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    var Interest = function Interest (
+    
+        [name                           // Name]
+        [, minSuffixComponents          // number]
+        [, maxSuffixComponents          // number]
+        [, publisherPublicKeyDigest     // PublisherPublicKeyDigest]
+        [, exclude                      // Exclude]
+        [, childSelector                // number]
+        [, answerOriginKind             // number]
+        [, scope                        // number]
+        [, interestLifetimeMilliseconds // number]
+        [, nonce                        // Uint8Array]
+    
+    )
+
+:[Python]:
+
+.. code-block:: python
+
+    def __init__(self
+    
+        [, name                     // Name]
+        [, minSuffixComponents      // int]
+        [, maxSuffixComponents      // int]
+        [, publisherPublicKeyDigest // string]
+        [, exclude                  // Exclude]
+        [, childSelector            // int]
+        [, answerOriginKind         // int]
+        [, scope                    // int]
+        [, interestLifetime         // float]
+        [, nonce                    // string]
+    
+    )
+
+:Parameters:
+
+    - ``name``
+	(optional) The name of the content.
+
+.. TODO: define other parameters
+
+Interest.wireDecode Method
+--------------------------
+
+Decode the input using a particular wire format and update this Interest.
+
+:[C++]:
+
+.. code-block:: c++
+
+    void decode(
+    
+        const std::vector<uint8_t>& input
+        [,WireFormat& wireFormat]
+    
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    Interest.prototype.decode = function(
+    
+        input         // Uint8Array
+        [, wireFormat // WireFormat]
+        
+    )
+
+:Parameters:
+
+    - ``input``
+	The input byte array to be decoded.
+
+    - ``wireFormat``
+	(optional) A WireFormat object used to decode the input. If omitted, use WireFormat getDefaultWireFormat ().
+
+
+Interest.wireEncode Method
+--------------------------
+
+Encode this Interest for a particular wire format.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Blob encode(
+    
+        [WireFormat& wireFormat]
+    
+    ) const;
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns Uint8Array
+    Interest.prototype.encode = function(
+    
+        [wireFormat // WireFormat]
+    
+    )
+
+:Parameters:
+
+    - ``wireFormat``
+	(optional) A WireFormat object used to encode the input. If omitted, use use WireFormat getDefaultWireFormat ().
+
+:Returns:
+
+    The encoded byte array.
+
+Interest.matchesName Method
+---------------------------
+
+Return true if the components of this Interest’s name are the same as the leading components of the given name, and the name conforms to the interest selectors.
+
+:[C++]:
+
+.. code-block:: c++
+
+    bool matchesName(
+    
+        const Name& name
+    
+    ) const;
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns boolean
+    Interest.prototype.matchesName = function(
+    
+	name // Name
+    
+    )
+
+:[Python]:
+
+.. code-block:: python
+
+    # Returns True or False
+    def matches_name(self,
+    
+        name # Name
+    
+    )
+
+:Parameters:
+
+    - ``name``
+	The Name to check against this Interest.
+
+:Returns:
+
+    True if this interest’s name and interest selectors match the name.
+
diff --git a/name.rst b/name.rst
new file mode 100644
index 0000000..20e1543
--- /dev/null
+++ b/name.rst
@@ -0,0 +1,444 @@
+.. _Name.Component:
+
+Name.Component Class
+====================
+
+A Name.Component is holds a read-only name component value
+
+:[C++]:
+
+    Namespace: ``ndn``
+
+Name.Component Constructor
+--------------------------
+
+Create a new Name.Component, copying the optional value.
+
+
+:[C++]:
+
+.. code-block:: c++
+
+    ndn::Name::Component(
+        [const std::vector<uint8_t>& value]
+    );
+
+:Parameters:
+
+    - ``value``
+	(optional) The content byte array to copy.
+
+Name.Component.toEscapedString Method
+-------------------------------------
+
+Convert this component value by escaping characters according to the NDN URI Scheme.
+
+:[C++]:
+
+.. code-block:: c++
+
+    std::string toEscapedString() const ();
+
+:Returns:
+
+    The escaped string.
+
+.. _Name:
+
+Name Class
+==========
+
+A Name holds an array of Name.Component and represents an NDN name.
+
+:[C++]:
+    Namespace: ``ndn``
+
+:[Python]:
+    Module: ``pyndn``
+
+Name Constructor (array of components)
+--------------------------------------
+
+Create a new Name with the optional components.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name(
+	[const std::vector<Name::Component>& components]
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    var Name = function Name (
+        [components   // Array<Uint8Array>]    
+    )
+
+:[Python]:
+
+.. code-block:: python
+
+    def __init__(self
+	[, components // Array<string>]
+    )
+    
+:Parameters:
+
+    - ``components``
+	(optional) The array of name components.
+
+Name Constructor (from URI)
+---------------------------
+
+Parse the uri according to the NDN URI Scheme and create the Name with the components.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name(
+	const char* uri
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    var Name = function Name (
+	uri // string
+    )
+
+:Parameters:
+
+    - ``uri``
+	The URI in NDN URI Scheme.
+
+Name.toUri Method
+-----------------
+
+Return the escaped name string according to the NDN URI Scheme.
+
+:[C++]:
+
+.. code-block:: c++
+
+    std::string toUri() const ();
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns string
+    Name.prototype.toUri = function();
+
+:Returns:
+
+The escaped name string according to the NDN URI Scheme.
+
+Name.size Method
+----------------
+
+Get the number of components.
+
+:[C++]:
+
+.. code-block:: c++
+
+    size_t getComponentCount() const;
+
+:Returns:
+
+    The number of components.
+
+Name.get Method
+---------------
+
+Get a Name Component by index number.
+
+:[C++]:
+
+.. code-block:: c++
+
+    const Component& getComponent(
+        size_t i
+    ) const;
+
+:Parameters:
+
+    - ``i``
+	The index of the component to get, starting from 0.
+
+:Returns:
+
+    The Name.Component.
+
+Name.getPrefix Method
+---------------------
+
+Get a new Name with the first nComponents components of this Name.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name getPrefix(
+        size_t nComponents
+    ) const;
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns Name
+    Name.prototype.getPrefix = function(
+        nComponents  // Number
+    );
+
+:Parameters:
+
+    - nComponents
+	The number of prefix components. If larger than the number of components in this name, return a copy of this Name.
+
+:Returns:
+
+    A new Name.
+
+Name.getSubName Method
+----------------------
+
+Get a new name, constructed as a subset of components.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name getSubName(
+        size_t iStartComponent
+	[, size_t nComponents]
+    ) const;
+
+:Parameters:
+
+    - ``iStartComponent``
+	The index if the first component to get.
+
+    - ``nComponents``
+	(optional) The number of components starting at iStartComponent. If omitted, return components until the end of the name.
+
+:Returns:
+
+    A new Name.
+
+Name.match Method
+-----------------
+
+Check if the N components of this name are the same as the first N components of the given name.
+
+:[C++]:
+
+.. code-block:: c++
+
+    bool match(
+	const Name& name
+    ) const;
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns boolean
+    Name.prototype.match = function(
+        name  // Name
+    );
+
+:Parameters:
+
+    - ``name``
+	The Name to check.
+
+    - ``nComponents``
+	The number of components starting at iStartComponent. If omitted, return components until the end of the name.
+
+:Returns:
+
+    true if this matches the given name, otherwise false.  This always returns true if this name is empty.
+
+Name.append Method (copy byte array)
+------------------------------------
+
+Append a new component, copying from byte array.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name& append(
+	const std::vector<uint8_t>& value
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns this Name
+    Name.prototype.append = function(
+        value  // Array<number>|ArrayBuffer|Uint8Array
+    )
+
+:Parameters:
+
+    - ``value``
+	The component byte array to copy.
+
+:Returns:
+
+    This name so that you can chain calls to append.
+
+Name.append Method (from Blob)
+------------------------------
+
+Append a new component, taking another pointer to the byte array in the Blob.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name& append(
+	const Blob& value
+    );
+
+:Parameters:
+
+    - ``value``
+	The Blob with the pointer to the byte array.
+
+:Returns:
+
+    This name so that you can chain calls to append.
+
+Name.append Method (from Component)
+-----------------------------------
+
+Append the component to this name.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name& append(
+	const Name::Component& value
+    );
+
+:Parameters:
+
+    - ``value``
+	The Name.Component to append.
+
+:Returns:
+
+    This name so that you can chain calls to append.
+
+Name.append Method (from Name)
+------------------------------
+
+Append the components of the given name to this name.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name& append(
+	const Name& name
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns this Name
+    Name.prototype.append = function(
+        value  // Name
+    )
+
+:Parameters:
+
+    - ``name``
+	The Name with components to append.
+
+:Returns:
+
+    This name so that you can chain calls to append.
+
+Name.appendSegment Method
+-------------------------
+
+Append a component with the encoded segment number.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name& appendSegment(
+        uint64_t segment
+    );
+
+:[JavaScript]:
+
+.. code-block:: javascript
+
+    // Returns this Name
+    Name.prototype.appendSegment = function(
+	segment  // Number
+    )
+
+:Parameters:
+
+    - ``segment``
+	The integer segment number to be encoded.
+
+:Returns:
+
+    This name so that you can chain calls to append.
+
+Name.appendVersion Method
+-------------------------
+
+Append a component with the encoded version number. Note that this encodes the exact value of version without converting from a time representation.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Name& appendVersion(
+	uint64_t version
+    );
+
+:Parameters:
+
+    - ``version``
+	The version number to be encoded.
+
+:Returns:
+
+    This name so that you can chain calls to append.
+
+Other Name getter and setter methods
+------------------------------------
+
+.. code-block:: javascript
+
+    // Returns a new Name
+    Name.prototype.cut = function(
+	minusComponents  // number
+    )
+    
+    // Returns number
+    Name.prototype.indexOfFileName = function()
+    
+    // Returns Boolean
+    Name.prototype.equalsName = function(
+	name            // Name
+    )
diff --git a/signature.rst b/signature.rst
new file mode 100644
index 0000000..7daa06c
--- /dev/null
+++ b/signature.rst
@@ -0,0 +1,64 @@
+.. _Signature:
+
+Signature Class
+===============
+
+A Signature is an abstract base class providing methods to work with the signature information in a Data packet. You must create an object of a subclass, for example Sha256WithRsaSignature.
+
+:[C++]:
+    Namespace: ``ndn``
+
+:[Python]:
+    Module: ``pyndn``
+
+Signature.clone Method
+----------------------
+
+Return a pointer to a new Signature which is a copy of this signature. This is abstract, the subclass must implement it.
+
+:[C++]:
+
+.. code-block:: c++
+
+    virtual ptr_lib::shared_ptr<Signature> clone() const = 0;
+
+:Returns:
+
+An now object of a subclass of Signature which is a clone of this object.
+
+Sha256WithRsaSignature Class
+============================
+
+A Sha256WithRsaSignature extends Signature and holds the signature bits and other info representing a SHA256-with-RSA signature in a data packet.
+
+:[C++]:
+    Namespace: ``ndn``
+
+:[Python]:
+    Module: ``pyndn``
+
+Sha256WithRsaSignature Constructor
+----------------------------------
+
+Create a new Sha256WithRsaSignature object.
+
+:[C++]:
+
+.. code-block:: c++
+
+    Sha256WithRsaSignature();
+
+Sha256WithRsaSignature.clone Method
+-----------------------------------
+
+Return a pointer to a new Sha256WithRsaSignature which is a copy of this signature.
+
+:[C++]:
+
+.. code-block:: c++
+
+    virtual ptr_lib::shared_ptr<Signature> clone() const;
+
+:Returns:
+
+    A new Sha256WithRsaSignature object.
