diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..d01dda7
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "NFD"]
+	path = NFD
+	url = https://github.com/named-data-ndnSIM/NFD
diff --git a/.waf-tools/version.py b/.waf-tools/version.py
new file mode 100644
index 0000000..ef734dd
--- /dev/null
+++ b/.waf-tools/version.py
@@ -0,0 +1,60 @@
+# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+from waflib.Configure import conf
+from waflib import Utils
+import os
+
+def splitVersion(version):
+    base = version.split('-')[0]
+    split = [v for v in base.split('.')]
+    return base, version, split
+
+@conf
+def getVersion(conf, submodule, **kw):
+    tagPrefix = kw.get('tag', '%s-' % submodule)
+    baseVersion = kw.get('base_version', '0.0.0')
+    submodule = conf.path.find_node(submodule)
+
+    gitVersion = baseVersion
+
+    didGetVersion = False
+    try:
+        cmd = ['git', 'describe', '--always', '--match', '%s*' % tagPrefix]
+        p = Utils.subprocess.Popen(cmd, stdout=Utils.subprocess.PIPE,
+                                   cwd=submodule.abspath(),
+                                   stderr=None, stdin=None)
+        out = str(p.communicate()[0].strip())
+        didGetVersion = (p.returncode == 0 and out != "")
+        if didGetVersion:
+            if out.startswith(tagPrefix):
+                gitVersion = out[len(tagPrefix):]
+            else:
+                gitVersion = "%s-commit-%s" % (baseVersion, out)
+    except OSError:
+        pass
+
+    versionFile = submodule.find_node('VERSION')
+
+    if not didGetVersion and versionFile is not None:
+        try:
+            return splitVersion(versionFile.read())
+        except (OSError, IOError):
+            pass
+
+    # version was obtained from git, update VERSION file if necessary
+    if versionFile is not None:
+        try:
+            version = versionFile.read()
+            versionFile = None # no need to update
+        except (OSError, IOError):
+            Logs.warn("VERSION file exists, but not readable")
+    else:
+        versionFile = submodule.make_node('VERSION')
+
+    if versionFile:
+        try:
+            versionFile.write(gitVersion)
+        except (OSError, IOError):
+            Logs.warn("VERSION file is not writeable")
+
+    return splitVersion(gitVersion)
diff --git a/NFD b/NFD
new file mode 160000
index 0000000..92f9bb0
--- /dev/null
+++ b/NFD
@@ -0,0 +1 @@
+Subproject commit 92f9bb004266f99d092ac0156fdb7ad951d7f0ee
diff --git a/docs/source/getting-started.rst b/docs/source/getting-started.rst
index 9a5d0aa..cea91d2 100644
--- a/docs/source/getting-started.rst
+++ b/docs/source/getting-started.rst
@@ -124,7 +124,7 @@
     git clone https://github.com/named-data/ndn-cxx.git ndn-cxx
     git clone https://github.com/named-data-ndnSIM/ns-3-dev.git ns-3
     git clone https://github.com/named-data-ndnSIM/pybindgen.git pybindgen
-    git clone https://github.com/named-data-ndnSIM/ndnSIM.git ns-3/src/ndnSIM
+    git clone --recursive https://github.com/named-data-ndnSIM/ndnSIM.git ns-3/src/ndnSIM
 
 The few modification to the base NS-3 code are necessary to run ndnSIM, and the code is
 periodically synchronized with the official developer branch.  Eventually, all the changes will
@@ -256,7 +256,7 @@
         cd ndnSIM
         git clone https://github.com/named-data-ndnSIM/ns-3-dev.git ns-3
         git clone https://github.com/named-data-ndnSIM/pybindgen.git pybindgen
-        git clone https://github.com/named-data-ndnSIM/ndnSIM.git ns-3/src/ndnSIM
+        git clone --recursive https://github.com/named-data-ndnSIM/ndnSIM.git ns-3/src/ndnSIM
 
         # Build and install NS-3 and ndnSIM
         cd ns-3
diff --git a/wscript b/wscript
index a0e0adc..53fc23f 100644
--- a/wscript
+++ b/wscript
@@ -13,12 +13,12 @@
 
 def options(opt):
     opt.load(['dependency-checker',
-              'doxygen', 'sphinx_build', 'type_traits', 'compiler-features'],
+              'doxygen', 'sphinx_build', 'type_traits', 'compiler-features', 'version'],
              tooldir=['%s/.waf-tools' % opt.path.abspath()])
 
 def configure(conf):
     conf.load(['dependency-checker',
-               'doxygen', 'sphinx_build', 'type_traits', 'compiler-features'])
+               'doxygen', 'sphinx_build', 'type_traits', 'compiler-features', 'version'])
 
     conf.env['ENABLE_NDNSIM']=False
 
@@ -72,7 +72,18 @@
 
     conf.report_optional_feature("ndnSIM", "ndnSIM", True, "")
 
+    conf.write_config_header('NFD/config.hpp', remove=False)
+
 def build(bld):
+    (base, build, split) = bld.getVersion('NFD')
+    bld(features="subst",
+        source='NFD/version.hpp.in', target='NFD/version.hpp',
+        install_path=None,
+        VERSION_STRING=base,
+        VERSION_BUILD="%s-ndnSIM" % build,
+        VERSION=int(split[0]) * 1000000 + int(split[1]) * 1000 + int(split[2]),
+        VERSION_MAJOR=split[0], VERSION_MINOR=split[1], VERSION_PATCH=split[2])
+
     deps = ['core', 'network', 'point-to-point', 'topology-read', 'mobility', 'internet']
     if 'ns3-visualizer' in bld.env['NS3_ENABLED_MODULES']:
         deps.append('visualizer')
@@ -95,10 +106,19 @@
         bld.env['MODULES_NOT_BUILT'].append('ndnSIM')
         return
 
-    module_dirs = ['NFD', 'apps', 'helper', 'model', 'utils']
+    module_dirs = ['NFD/core', 'NFD/daemon', 'apps', 'helper', 'model', 'utils']
 
     module.source = bld.path.ant_glob(['%s/**/*.cpp' % dir for dir in module_dirs],
-                                      excl=['model/ip-faces/*'])
+                                      excl=['model/ip-faces/*',
+                                            'NFD/core/network-interface.cpp',
+                                            'NFD/daemon/main.cpp',
+                                            'NFD/daemon/nfd.*',
+                                            'NFD/daemon/face/ethernet*',
+                                            'NFD/daemon/face/multicast-udp*',
+                                            'NFD/daemon/face/tcp*',
+                                            'NFD/daemon/face/udp*',
+                                            'NFD/daemon/face/unix-stream*',
+                                            'NFD/daemon/face/websocket*'])
 
     module.full_headers = [p.path_from(bld.path) for p in bld.path.ant_glob(
         ['%s/**/*.hpp' % dir for dir in module_dirs])]
