diff --git a/.waf-tools/version.py b/.waf-tools/version.py
index ef734dd..901ae10 100644
--- a/.waf-tools/version.py
+++ b/.waf-tools/version.py
@@ -23,7 +23,7 @@
         p = Utils.subprocess.Popen(cmd, stdout=Utils.subprocess.PIPE,
                                    cwd=submodule.abspath(),
                                    stderr=None, stdin=None)
-        out = str(p.communicate()[0].strip())
+        out = p.communicate()[0].strip().decode('utf-8')
         didGetVersion = (p.returncode == 0 and out != "")
         if didGetVersion:
             if out.startswith(tagPrefix):
@@ -33,7 +33,7 @@
     except OSError:
         pass
 
-    versionFile = submodule.find_node('VERSION')
+    versionFile = submodule.find_node('VERSION.info')
 
     if not didGetVersion and versionFile is not None:
         try:
@@ -49,7 +49,7 @@
         except (OSError, IOError):
             Logs.warn("VERSION file exists, but not readable")
     else:
-        versionFile = submodule.make_node('VERSION')
+        versionFile = submodule.make_node('VERSION.info')
 
     if versionFile:
         try:
diff --git a/NFD b/NFD
index d1d38c8..361b381 160000
--- a/NFD
+++ b/NFD
@@ -1 +1 @@
-Subproject commit d1d38c8558ce6ce71d9ba81ca6cf5dcfd0342820
+Subproject commit 361b381b9b552ff3341aa160858bea1d470d2122
diff --git a/apps/ndn-producer.cpp b/apps/ndn-producer.cpp
index 87e7a94..73f5e72 100644
--- a/apps/ndn-producer.cpp
+++ b/apps/ndn-producer.cpp
@@ -110,17 +110,18 @@
 
   data->setContent(make_shared< ::ndn::Buffer>(m_virtualPayloadSize));
 
-  Signature signature;
   SignatureInfo signatureInfo(static_cast< ::ndn::tlv::SignatureTypeValue>(255));
 
   if (m_keyLocator.size() > 0) {
     signatureInfo.setKeyLocator(m_keyLocator);
   }
 
-  signature.setInfo(signatureInfo);
-  signature.setValue(::ndn::makeNonNegativeIntegerBlock(::ndn::tlv::SignatureValue, m_signature));
+  data->setSignatureInfo(signatureInfo);
 
-  data->setSignature(signature);
+  ::ndn::EncodingEstimator estimator;
+  ::ndn::EncodingBuffer encoder(estimator.appendVarNumber(m_signature), 0);
+  encoder.appendVarNumber(m_signature);
+  data->setSignatureValue(encoder.getBuffer());
 
   NS_LOG_INFO("node(" << GetNode()->GetId() << ") responding with Data: " << data->getName());
 
diff --git a/examples/lfid.cpp b/examples/lfid.cpp
index e2d6f05..5536ef1 100644
--- a/examples/lfid.cpp
+++ b/examples/lfid.cpp
@@ -30,7 +30,7 @@
 #include "ns3/ndnSIM/model/ndn-l3-protocol.hpp"
 #include "ns3/ndnSIM/model/ndn-net-device-transport.hpp"
 //#include "ns3/ndnSIM/NFD/daemon/fw/random-strategy.hpp"
-#include "ns3/ndnSIM/NFD/daemon/fw/best-route-strategy2.hpp"
+#include "ns3/ndnSIM/NFD/daemon/fw/best-route-strategy.hpp"
 #include "ns3/ndnSIM/utils/topology/annotated-topology-reader.hpp"
 
 namespace ns3 {
@@ -120,7 +120,7 @@
 
   // IMPORTANT: Some strategy needs to be installed for displayRoutes() to work.
   ndn::StrategyChoiceHelper strategyHelper;
-  strategyHelper.InstallAll<nfd::fw::BestRouteStrategy2>("/");
+  strategyHelper.InstallAll<nfd::fw::BestRouteStrategy>("/");
 
   // TODO: Needs RandomStrategy for test to work!
   // Uncomment after NFD version has been updated.
diff --git a/examples/ndn-csma.cpp b/examples/ndn-csma.cpp
index 5e0ccfd..888b32e 100644
--- a/examples/ndn-csma.cpp
+++ b/examples/ndn-csma.cpp
@@ -55,7 +55,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::CsmaChannel::DataRate", StringValue("1Mbps"));
   Config::SetDefault("ns3::CsmaChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
   CommandLine cmd;
diff --git a/examples/ndn-different-strategy-per-prefix.cpp b/examples/ndn-different-strategy-per-prefix.cpp
index 631674e..a0075df 100644
--- a/examples/ndn-different-strategy-per-prefix.cpp
+++ b/examples/ndn-different-strategy-per-prefix.cpp
@@ -64,7 +64,7 @@
   // Setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("10p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("10p"));
 
   // Read optional command-line parameters
   CommandLine cmd;
diff --git a/examples/ndn-grid-multiple-strategies.cpp b/examples/ndn-grid-multiple-strategies.cpp
index 474feb0..35ce899 100644
--- a/examples/ndn-grid-multiple-strategies.cpp
+++ b/examples/ndn-grid-multiple-strategies.cpp
@@ -64,7 +64,7 @@
   // Setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("10p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("10p"));
 
   // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
   CommandLine cmd;
diff --git a/examples/ndn-grid.cpp b/examples/ndn-grid.cpp
index 6027a0d..0283be0 100644
--- a/examples/ndn-grid.cpp
+++ b/examples/ndn-grid.cpp
@@ -57,7 +57,7 @@
   // Setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("10p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("10p"));
 
   // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
   CommandLine cmd;
diff --git a/examples/ndn-grid.py b/examples/ndn-grid.py
index b7884e7..f13dd43 100644
--- a/examples/ndn-grid.py
+++ b/examples/ndn-grid.py
@@ -51,7 +51,7 @@
 
 Config.SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"))
 Config.SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"))
-Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"))
+Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"))
 
 import sys; cmd = CommandLine(); cmd.Parse(sys.argv);
 
diff --git a/examples/ndn-load-balancer/random-load-balancer-strategy.cpp b/examples/ndn-load-balancer/random-load-balancer-strategy.cpp
index 27756cd..5faf31f 100644
--- a/examples/ndn-load-balancer/random-load-balancer-strategy.cpp
+++ b/examples/ndn-load-balancer/random-load-balancer-strategy.cpp
@@ -49,8 +49,7 @@
 static bool
 canForwardToNextHop(const Face& inFace, shared_ptr<pit::Entry> pitEntry, const fib::NextHop& nexthop)
 {
-  return !wouldViolateScope(inFace, pitEntry->getInterest(), nexthop.getFace()) &&
-    canForwardToLegacy(*pitEntry, nexthop.getFace());
+  return !wouldViolateScope(inFace, pitEntry->getInterest(), nexthop.getFace());
 }
 
 static bool
@@ -61,7 +60,7 @@
 }
 
 void
-RandomLoadBalancerStrategy::afterReceiveInterest(const FaceEndpoint& ingress, const Interest& interest,
+RandomLoadBalancerStrategy::afterReceiveInterest(const Interest& interest, const FaceEndpoint& ingress,
                                                  const shared_ptr<pit::Entry>& pitEntry)
 {
   NFD_LOG_TRACE("afterReceiveInterest");
@@ -92,7 +91,7 @@
     }
   } while (!canForwardToNextHop(ingress.face, pitEntry, *selected));
 
-  this->sendInterest(pitEntry, FaceEndpoint(selected->getFace(), 0), interest);
+  this->sendInterest(interest, selected->getFace(), pitEntry);
 }
 
 const Name&
diff --git a/examples/ndn-load-balancer/random-load-balancer-strategy.hpp b/examples/ndn-load-balancer/random-load-balancer-strategy.hpp
index 1a2e2c0..5c5086a 100644
--- a/examples/ndn-load-balancer/random-load-balancer-strategy.hpp
+++ b/examples/ndn-load-balancer/random-load-balancer-strategy.hpp
@@ -42,7 +42,7 @@
   ~RandomLoadBalancerStrategy() override;
 
   void
-  afterReceiveInterest(const FaceEndpoint& ingress, const Interest& interest,
+  afterReceiveInterest(const Interest& interest, const FaceEndpoint& ingress,
                        const shared_ptr<pit::Entry>& pitEntry) override;
 
   static const Name&
diff --git a/examples/ndn-simple-for-nrt-helper.cpp b/examples/ndn-simple-for-nrt-helper.cpp
index a43ab13..c287487 100644
--- a/examples/ndn-simple-for-nrt-helper.cpp
+++ b/examples/ndn-simple-for-nrt-helper.cpp
@@ -61,7 +61,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
   CommandLine cmd;
diff --git a/examples/ndn-simple-for-nrt-helper/requester-app.cpp b/examples/ndn-simple-for-nrt-helper/requester-app.cpp
index 4a5d2ff..0967879 100644
--- a/examples/ndn-simple-for-nrt-helper/requester-app.cpp
+++ b/examples/ndn-simple-for-nrt-helper/requester-app.cpp
@@ -72,7 +72,7 @@
     m_delegation = delegation;
 
     m_link = ::ndn::Link(Name(m_name).append("/LINK"));
-    m_link.addDelegation(1, m_delegation);
+    m_link.addDelegation(m_delegation);
     ndn::StackHelper::getKeyChain().sign(m_link, ::ndn::security::SigningInfo(::ndn::security::SigningInfo::SIGNER_TYPE_SHA256));
 
     NS_LOG_DEBUG("Created Link Object "<< m_link);
@@ -90,7 +90,7 @@
     auto interest = make_shared<Interest>(m_name);
     interest->setInterestLifetime(time::seconds(1));
     if (m_delegation.size() > 0) {
-      interest->setForwardingHint(m_link.getDelegationList());
+      interest->setForwardingHint({m_link.getDelegationList().begin(), m_link.getDelegationList().end()});
     }
 
     NS_LOG_DEBUG("Sending an Interest for "<< *interest);
diff --git a/examples/ndn-simple-mpi.cpp b/examples/ndn-simple-mpi.cpp
index 6be5e5c..bc7b2fe 100644
--- a/examples/ndn-simple-mpi.cpp
+++ b/examples/ndn-simple-mpi.cpp
@@ -74,7 +74,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Gbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("1ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("10p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("10p"));
 
   bool nullmsg = false;
 
diff --git a/examples/ndn-simple-wifi.cpp b/examples/ndn-simple-wifi.cpp
index d89db34..7c8ed0d 100644
--- a/examples/ndn-simple-wifi.cpp
+++ b/examples/ndn-simple-wifi.cpp
@@ -62,17 +62,16 @@
   //////////////////////
   WifiHelper wifi;
   // wifi.SetRemoteStationManager ("ns3::AarfWifiManager");
-  wifi.SetStandard(WIFI_PHY_STANDARD_80211a);
+  wifi.SetStandard(WIFI_STANDARD_80211a);
   wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager", "DataMode",
                                StringValue("OfdmRate24Mbps"));
 
-  YansWifiChannelHelper wifiChannel; // = YansWifiChannelHelper::Default ();
+  YansWifiChannelHelper wifiChannel;
   wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
   wifiChannel.AddPropagationLoss("ns3::ThreeLogDistancePropagationLossModel");
   wifiChannel.AddPropagationLoss("ns3::NakagamiPropagationLossModel");
 
-  // YansWifiPhy wifiPhy = YansWifiPhy::Default();
-  YansWifiPhyHelper wifiPhyHelper = YansWifiPhyHelper::Default();
+  YansWifiPhyHelper wifiPhyHelper;
   wifiPhyHelper.SetChannel(wifiChannel.Create());
   wifiPhyHelper.Set("TxPowerStart", DoubleValue(5));
   wifiPhyHelper.Set("TxPowerEnd", DoubleValue(5));
diff --git a/examples/ndn-simple-with-content-freshness.cpp b/examples/ndn-simple-with-content-freshness.cpp
index 48b3c79..b9cfa32 100644
--- a/examples/ndn-simple-with-content-freshness.cpp
+++ b/examples/ndn-simple-with-content-freshness.cpp
@@ -48,7 +48,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
   CommandLine cmd;
diff --git a/examples/ndn-simple-with-link-failure.cpp b/examples/ndn-simple-with-link-failure.cpp
index 29ad00e..971d8fa 100644
--- a/examples/ndn-simple-with-link-failure.cpp
+++ b/examples/ndn-simple-with-link-failure.cpp
@@ -55,7 +55,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
   CommandLine cmd;
diff --git a/examples/ndn-simple-with-pcap.cpp b/examples/ndn-simple-with-pcap.cpp
index bda9208..ff6e78f 100644
--- a/examples/ndn-simple-with-pcap.cpp
+++ b/examples/ndn-simple-with-pcap.cpp
@@ -67,7 +67,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
   CommandLine cmd;
diff --git a/examples/ndn-simple.cpp b/examples/ndn-simple.cpp
index 0e84b4d..0aa129d 100644
--- a/examples/ndn-simple.cpp
+++ b/examples/ndn-simple.cpp
@@ -52,7 +52,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
   CommandLine cmd;
diff --git a/examples/ndn-simple.py b/examples/ndn-simple.py
index 447fd9c..e87b701 100644
--- a/examples/ndn-simple.py
+++ b/examples/ndn-simple.py
@@ -47,7 +47,7 @@
 # Set default parameters for PointToPoint links and channels
 Config.SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"))
 Config.SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"))
-Config.SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"))
+Config.SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"))
 
 # Read optional command-line parameters (e.g., enable visualizer with ./waf --pyrun=<> --visualize
 import sys; cmd = CommandLine(); cmd.Parse(sys.argv);
diff --git a/examples/ndn-triangle-calculate-routes.cpp b/examples/ndn-triangle-calculate-routes.cpp
index 869d443..2e61888 100644
--- a/examples/ndn-triangle-calculate-routes.cpp
+++ b/examples/ndn-triangle-calculate-routes.cpp
@@ -33,7 +33,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
   CommandLine cmd;
diff --git a/examples/ndn-zipf-mandelbrot.cpp b/examples/ndn-zipf-mandelbrot.cpp
index 7fd8d54..9052739 100644
--- a/examples/ndn-zipf-mandelbrot.cpp
+++ b/examples/ndn-zipf-mandelbrot.cpp
@@ -58,7 +58,7 @@
   // Setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("1Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("1ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("10p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("10p"));
 
   // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
   CommandLine cmd;
diff --git a/model/ndn-app-link-service.cpp b/model/ndn-app-link-service.cpp
index e5b1ee7..ad144b6 100644
--- a/model/ndn-app-link-service.cpp
+++ b/model/ndn-app-link-service.cpp
@@ -47,7 +47,7 @@
 }
 
 void
-AppLinkService::doSendInterest(const Interest& interest, const nfd::EndpointId& endpoint)
+AppLinkService::doSendInterest(const Interest& interest)
 {
   NS_LOG_FUNCTION(this << &interest);
 
@@ -56,7 +56,7 @@
 }
 
 void
-AppLinkService::doSendData(const Data& data, const nfd::EndpointId& endpoint)
+AppLinkService::doSendData(const Data& data)
 {
   NS_LOG_FUNCTION(this << &data);
 
@@ -65,7 +65,7 @@
 }
 
 void
-AppLinkService::doSendNack(const lp::Nack& nack, const nfd::EndpointId& endpoint)
+AppLinkService::doSendNack(const lp::Nack& nack)
 {
   NS_LOG_FUNCTION(this << &nack);
 
diff --git a/model/ndn-app-link-service.hpp b/model/ndn-app-link-service.hpp
index 21c50d1..40f05de 100644
--- a/model/ndn-app-link-service.hpp
+++ b/model/ndn-app-link-service.hpp
@@ -60,13 +60,13 @@
 
 private:
   virtual void
-  doSendInterest(const Interest& interest, const nfd::EndpointId& endpoint) override;
+  doSendInterest(const Interest& interest) override;
 
   virtual void
-  doSendData(const Data& data, const nfd::EndpointId& endpoint) override;
+  doSendData(const Data& data) override;
 
   virtual void
-  doSendNack(const lp::Nack& nack, const nfd::EndpointId& endpoint) override;
+  doSendNack(const lp::Nack& nack) override;
 
   virtual void
   doReceivePacket(const Block& packet, const nfd::EndpointId& endpoint) override
diff --git a/model/ndn-block-header.cpp b/model/ndn-block-header.cpp
index 6665fa4..5a6177f 100644
--- a/model/ndn-block-header.cpp
+++ b/model/ndn-block-header.cpp
@@ -140,7 +140,7 @@
           ::ndn::Buffer::const_iterator first, last;
           std::tie(first, last) = p.get<lp::FragmentField>(0);
           try {
-            Block fragmentBlock(&*first, std::distance(first, last));
+            Block fragmentBlock(::ndn::make_span(&*first, std::distance(first, last)));
             decodeAndPrint(fragmentBlock);
           }
           catch (const tlv::Error& error) {
diff --git a/model/ndn-common.hpp b/model/ndn-common.hpp
index b0cfe7a..849627b 100644
--- a/model/ndn-common.hpp
+++ b/model/ndn-common.hpp
@@ -27,7 +27,6 @@
 
 #include <ndn-cxx/interest.hpp>
 #include <ndn-cxx/encoding/block.hpp>
-#include <ndn-cxx/signature.hpp>
 #include <ndn-cxx/signature-info.hpp>
 #include <ndn-cxx/name.hpp>
 #include <ndn-cxx/data.hpp>
@@ -62,7 +61,6 @@
 using ::ndn::Interest;
 using ::ndn::Data;
 using ::ndn::KeyLocator;
-using ::ndn::Signature;
 using ::ndn::SignatureInfo;
 using ::ndn::Block;
 using ::ndn::KeyChain;
diff --git a/model/ndn-net-device-transport.cpp b/model/ndn-net-device-transport.cpp
index e0439f0..ffa7a1f 100644
--- a/model/ndn-net-device-transport.cpp
+++ b/model/ndn-net-device-transport.cpp
@@ -106,7 +106,7 @@
 }
 
 void
-NetDeviceTransport::doSend(const Block& packet, const nfd::EndpointId& endpoint)
+NetDeviceTransport::doSend(const Block& packet)
 {
   NS_LOG_FUNCTION(this << "Sending packet from netDevice with URI"
                   << this->getLocalUri());
diff --git a/model/ndn-net-device-transport.hpp b/model/ndn-net-device-transport.hpp
index 22b07de..d3c26ac 100644
--- a/model/ndn-net-device-transport.hpp
+++ b/model/ndn-net-device-transport.hpp
@@ -62,7 +62,7 @@
   doClose() override;
 
   virtual void
-  doSend(const Block& packet, const nfd::EndpointId& endpoint) override;
+  doSend(const Block& packet) override;
 
   void
   receiveFromNetDevice(Ptr<NetDevice> device,
diff --git a/model/null-transport.hpp b/model/null-transport.hpp
index 3c27e1f..07858d0 100644
--- a/model/null-transport.hpp
+++ b/model/null-transport.hpp
@@ -54,7 +54,7 @@
   }
 
   void
-  doSend(const Block& packet, const nfd::EndpointId& endpoint) final
+  doSend(const Block& packet) final
   {
   }
 };
diff --git a/ndn-cxx b/ndn-cxx
index f2a5806..f849c5e 160000
--- a/ndn-cxx
+++ b/ndn-cxx
@@ -1 +1 @@
-Subproject commit f2a5806bf49432ee7d1f98e98b1bc66b31a4aa54
+Subproject commit f849c5ef310da8375f3546e354ba9c9b1155bc59
diff --git a/tests/unit-tests/NFD/ncc.t.cpp b/tests/unit-tests/NFD/ncc.t.cpp
index 9884292..cc396d5 100644
--- a/tests/unit-tests/NFD/ncc.t.cpp
+++ b/tests/unit-tests/NFD/ncc.t.cpp
@@ -33,7 +33,7 @@
   {
     Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
     Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("1ms"));
-    Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("500p"));
+    Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("500p"));
 
       //            Creating a 3 node topology                //
       //                                                      //
diff --git a/tests/unit-tests/helper/lfid-routing-helper.t.cpp b/tests/unit-tests/helper/lfid-routing-helper.t.cpp
index 77eed91..1c0dfbb 100644
--- a/tests/unit-tests/helper/lfid-routing-helper.t.cpp
+++ b/tests/unit-tests/helper/lfid-routing-helper.t.cpp
@@ -24,7 +24,7 @@
 #include "model/ndn-l3-protocol.hpp"
 #include "model/ndn-net-device-transport.hpp"
 
-#include "NFD/daemon/fw/best-route-strategy2.hpp"
+#include "NFD/daemon/fw/best-route-strategy.hpp"
 
 #include "ns3/channel.h"
 #include "ns3/net-device.h"
@@ -73,7 +73,7 @@
 
   // IMPORTANT: Some strategy needs to be installed for test to work.
   ndn::StrategyChoiceHelper str;
-  str.InstallAll<nfd::fw::BestRouteStrategy2>("/");
+  str.InstallAll<nfd::fw::BestRouteStrategy>("/");
 
   int numNexthops = 0;
 
diff --git a/tests/unit-tests/helper/ndn-global-routing-helper.t.cpp b/tests/unit-tests/helper/ndn-global-routing-helper.t.cpp
index fe2c43b..e018508 100644
--- a/tests/unit-tests/helper/ndn-global-routing-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-global-routing-helper.t.cpp
@@ -91,14 +91,12 @@
 
   auto ndn = Names::Find<Node>("A1")->GetObject<ndn::L3Protocol>();
   for (const auto& entry : ndn->getForwarder()->getFib()) {
-    bool isFirst = true;
     for (auto& nextHop : entry.getNextHops()) {
       auto& face = nextHop.getFace();
       auto transport = dynamic_cast<NetDeviceTransport*>(face.getTransport());
       if (transport == nullptr)
         continue;
       BOOST_CHECK_EQUAL(Names::FindName(transport->GetNetDevice()->GetChannel()->GetDevice(1)->GetNode()), "C1");
-      isFirst = false;
     }
   }
 }
@@ -136,14 +134,12 @@
 
   auto ndn = Names::Find<Node>("A2")->GetObject<ndn::L3Protocol>();
   for (const auto& entry : ndn->getForwarder()->getFib()) {
-    bool isFirst = true;
     for (auto& nextHop : entry.getNextHops()) {
       auto& face = nextHop.getFace();
       auto transport = dynamic_cast<NetDeviceTransport*>(face.getTransport());
       if (transport == nullptr)
         continue;
       BOOST_CHECK_EQUAL(Names::FindName(transport->GetNetDevice()->GetChannel()->GetDevice(1)->GetNode()), "B2");
-      isFirst = false;
     }
   }
 }
diff --git a/tests/unit-tests/helper/ndn-link-control-helper.t.cpp b/tests/unit-tests/helper/ndn-link-control-helper.t.cpp
index 0df5280..983edb5 100644
--- a/tests/unit-tests/helper/ndn-link-control-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-link-control-helper.t.cpp
@@ -32,7 +32,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   createTopology({
       {"1", "2"},
@@ -77,7 +77,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   // Connecting nodes in 6 node topology:                        //
   //                                                             //
diff --git a/tests/unit-tests/helper/ndn-network-region-table-helper.t.cpp b/tests/unit-tests/helper/ndn-network-region-table-helper.t.cpp
index 868b9dc..4acc09d 100644
--- a/tests/unit-tests/helper/ndn-network-region-table-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-network-region-table-helper.t.cpp
@@ -26,9 +26,6 @@
 namespace ns3 {
 namespace ndn {
 
-using ::ndn::Delegation;
-using ::ndn::DelegationList;
-
 BOOST_AUTO_TEST_SUITE(HelperNdnNetworkRegionTableHelper)
 
 class BasicFixture : public ScenarioHelperWithCleanupFixture
@@ -95,14 +92,12 @@
   ::ndn::Face m_face;
 };
 
-DelegationList
+std::vector<Name>
 makeHint(const Name& delegation)
 {
-  Delegation del;
-  del.name = Name(delegation);
-  del.preference = 1;
-  DelegationList list({del});
-  return list;
+  std::vector<Name> ret;
+  ret.push_back(delegation);
+  return ret;
 }
 
 class MultiNodeWithAppFixture : public ScenarioHelperWithCleanupFixture
diff --git a/tests/unit-tests/helper/ndn-stack-helper.t.cpp b/tests/unit-tests/helper/ndn-stack-helper.t.cpp
index 2fc98b6..94f06c1 100644
--- a/tests/unit-tests/helper/ndn-stack-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-stack-helper.t.cpp
@@ -32,7 +32,7 @@
   // setting default parameters for PointToPoint links and channels
   Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
   Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+  Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
   // Creating nodes
   NodeContainer nodes;
diff --git a/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp b/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp
index f1a8a14..9c82c45 100644
--- a/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp
@@ -33,7 +33,7 @@
   {
     Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
     Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("1ms"));
-    Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("500p"));
+    Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("500p"));
 
     // Creating two 3 node topologies:                      //
     //                                                      //
@@ -150,7 +150,7 @@
   }
 
   void
-  afterReceiveInterest(const nfd::FaceEndpoint& ingress, const Interest& interest,
+  afterReceiveInterest(const Interest& interest, const nfd::FaceEndpoint& ingress,
                        const shared_ptr<nfd::pit::Entry>& pitEntry) override
   {
     // this strategy doesn't forward interests
diff --git a/tests/unit-tests/model/ndn-block-header.t.cpp b/tests/unit-tests/model/ndn-block-header.t.cpp
index 9360998..4bfaae4 100644
--- a/tests/unit-tests/model/ndn-block-header.t.cpp
+++ b/tests/unit-tests/model/ndn-block-header.t.cpp
@@ -66,7 +66,7 @@
     packet->AddHeader(header);
     boost::test_tools::output_test_stream output;
     packet->Print(output);
-    BOOST_CHECK(output.is_equal("ns3::ndn::Packet (Interest: /prefix?CanBePrefix&Nonce=10)"));
+    BOOST_CHECK(output.is_equal("ns3::ndn::Packet (Interest: /prefix?CanBePrefix&Nonce=0000000a)"));
   }
 }
 
@@ -107,7 +107,7 @@
     packet->AddHeader(header);
     boost::test_tools::output_test_stream output;
     packet->Print(output);
-    BOOST_CHECK(output.is_equal("ns3::ndn::Packet (NDNLP(Interest: /prefix?CanBePrefix&Nonce=10))"));
+    BOOST_CHECK(output.is_equal("ns3::ndn::Packet (NDNLP(Interest: /prefix?CanBePrefix&Nonce=0000000a))"));
   }
 
   lpPacket.add<::ndn::lp::NackField>(::ndn::lp::NackHeader().setReason(::ndn::lp::NackReason::NO_ROUTE));
@@ -118,7 +118,7 @@
     packet->AddHeader(header);
     boost::test_tools::output_test_stream output;
     packet->Print(output);
-    BOOST_CHECK(output.is_equal("ns3::ndn::Packet (NDNLP(NACK(NoRoute) for Interest: /prefix?CanBePrefix&Nonce=10))"));
+    BOOST_CHECK(output.is_equal("ns3::ndn::Packet (NDNLP(NACK(NoRoute) for Interest: /prefix?CanBePrefix&Nonce=0000000a))"));
   }
 
   lpPacket.remove<::ndn::lp::NackField>();
@@ -131,7 +131,7 @@
     packet->AddHeader(header);
     boost::test_tools::output_test_stream output;
     packet->Print(output);
-    BOOST_CHECK(output.is_equal("ns3::ndn::Packet (NDNLP(Interest: /prefix?CanBePrefix&Nonce=10))"));
+    BOOST_CHECK(output.is_equal("ns3::ndn::Packet (NDNLP(Interest: /prefix?CanBePrefix&Nonce=0000000a))"));
   }
 
   lpPacket.set<::ndn::lp::FragCountField>(2);
diff --git a/tests/unit-tests/ndn-cxx/face.t.cpp b/tests/unit-tests/ndn-cxx/face.t.cpp
index 98d880b..a86e329 100644
--- a/tests/unit-tests/ndn-cxx/face.t.cpp
+++ b/tests/unit-tests/ndn-cxx/face.t.cpp
@@ -37,7 +37,7 @@
   {
     Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
     Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-    Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+    Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
     createTopology({{"A", "B"}});
     addRoutes({{"A", "B", "/test", 1}});
@@ -83,7 +83,7 @@
 {
   FactoryCallbackApp::Install(getNode("B"), [this] () -> shared_ptr<void> {
       return make_shared<BasicProducer>("/test", [this] (const Name& interest) {
-          BOOST_CHECK_EQUAL(interest, "/test/prefix/%FE%00");
+          BOOST_CHECK_EQUAL(interest, "/test/prefix/seq=0");
           this->hasFired = true;
         },
         [] {
diff --git a/tests/unit-tests/utils/tracers/ndn-app-delay-tracer.t.cpp b/tests/unit-tests/utils/tracers/ndn-app-delay-tracer.t.cpp
index fe9b380..46e731f 100644
--- a/tests/unit-tests/utils/tracers/ndn-app-delay-tracer.t.cpp
+++ b/tests/unit-tests/utils/tracers/ndn-app-delay-tracer.t.cpp
@@ -39,7 +39,7 @@
     // setting default parameters for PointToPoint links and channels
     Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
     Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-    Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+    Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
     createTopology({
         {"1", "2"},
diff --git a/tests/unit-tests/utils/tracers/ndn-l3-rate-tracer.t.cpp b/tests/unit-tests/utils/tracers/ndn-l3-rate-tracer.t.cpp
index 1a23ae4..7443675 100644
--- a/tests/unit-tests/utils/tracers/ndn-l3-rate-tracer.t.cpp
+++ b/tests/unit-tests/utils/tracers/ndn-l3-rate-tracer.t.cpp
@@ -39,7 +39,7 @@
     // setting default parameters for PointToPoint links and channels
     Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
     Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-    Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
+    Config::SetDefault("ns3::DropTailQueue<Packet>::MaxSize", StringValue("20p"));
 
     createTopology({
         {"1"},
diff --git a/utils/dummy-keychain.cpp b/utils/dummy-keychain.cpp
index 3f62a4e..7294c1e 100644
--- a/utils/dummy-keychain.cpp
+++ b/utils/dummy-keychain.cpp
@@ -66,8 +66,8 @@
 const std::string DummyPib::SCHEME = "pib-dummy";
 const std::string DummyTpm::SCHEME = "tpm-dummy";
 
-NDN_CXX_V2_KEYCHAIN_REGISTER_PIB_BACKEND(DummyPib);
-NDN_CXX_V2_KEYCHAIN_REGISTER_TPM_BACKEND(DummyTpm);
+NDN_CXX_KEYCHAIN_REGISTER_PIB_BACKEND(DummyPib);
+NDN_CXX_KEYCHAIN_REGISTER_TPM_BACKEND(DummyTpm);
 
 DummyPib::DummyPib(const std::string& locator)
 {
@@ -132,8 +132,7 @@
 }
 
 void
-DummyPib::addKey(const Name& identity, const Name& keyName,
-                 const uint8_t* key, size_t keyLen)
+DummyPib::addKey(const Name& identity, const Name& keyName, span<const uint8_t> key)
 {
 }
 
@@ -148,7 +147,7 @@
     typedef boost::iostreams::stream<boost::iostreams::array_source> arrayStream;
     arrayStream
     is(reinterpret_cast<const char*>(DUMMY_CERT), sizeof(DUMMY_CERT));
-    auto cert = io::load<v2::Certificate>(is, io::BASE64);
+    auto cert = io::load<Certificate>(is, io::BASE64);
     return cert->getPublicKey();
 }
 
@@ -178,7 +177,7 @@
 }
 
 void
-DummyPib::addCertificate(const v2::Certificate& certificate)
+DummyPib::addCertificate(const Certificate& certificate)
 {
 }
 
@@ -187,15 +186,15 @@
 {
 }
 
-v2::Certificate
+Certificate
 DummyPib::getCertificate(const Name& certificateName) const
 {
-  static shared_ptr<v2::Certificate> cert = nullptr;
+  static shared_ptr<Certificate> cert = nullptr;
   if (cert == nullptr) {
     typedef boost::iostreams::stream<boost::iostreams::array_source> arrayStream;
     arrayStream
     is(reinterpret_cast<const char*>(DUMMY_CERT), sizeof(DUMMY_CERT));
-    cert = io::load<v2::Certificate>(is, io::BASE64);
+    cert = io::load<Certificate>(is, io::BASE64);
   }
 
   return *cert;
@@ -214,15 +213,15 @@
 {
 }
 
-v2::Certificate
+Certificate
 DummyPib::getDefaultCertificateOfKey(const Name& keyName) const
 {
-  static shared_ptr<v2::Certificate> cert = nullptr;
+  static shared_ptr<Certificate> cert = nullptr;
   if (cert == nullptr) {
     typedef boost::iostreams::stream<boost::iostreams::array_source> arrayStream;
     arrayStream
     is(reinterpret_cast<const char*>(DUMMY_CERT), sizeof(DUMMY_CERT));
-    cert = io::load<v2::Certificate>(is, io::BASE64);
+    cert = io::load<Certificate>(is, io::BASE64);
   }
 
   return *cert;
@@ -246,20 +245,19 @@
 }
 
 ConstBufferPtr
-DummyKeyHandle::doSign(DigestAlgorithm digestAlgorithm, const uint8_t* buf, size_t size) const
+DummyKeyHandle::doSign(DigestAlgorithm digestAlgorithm, const InputBuffers& bufs) const
 {
   return make_shared<Buffer>(DUMMY_SIGNATURE, sizeof(DUMMY_SIGNATURE));
 }
 
 bool
-DummyKeyHandle::doVerify(DigestAlgorithm digestAlgorithm, const uint8_t* buf, size_t bufLen,
-                         const uint8_t* sig, size_t sigLen) const
+DummyKeyHandle::doVerify(DigestAlgorithm digestAlgorithm, const InputBuffers& bufs, span<const uint8_t> sig) const
 {
   throw Error("Not supported");
 }
 
 ConstBufferPtr
-DummyKeyHandle::doDecrypt(const uint8_t* cipherText, size_t cipherTextLen) const
+DummyKeyHandle::doDecrypt(span<const uint8_t> cipherText) const
 {
   throw Error("Not supported");
 }
@@ -331,7 +329,7 @@
 }
 
 void
-DummyTpm::doImportKey(const Name& keyName, const uint8_t* pkcs8, size_t pkcs8Len, const char* pw, size_t pwLen)
+DummyTpm::doImportKey(const Name& keyName, span<const uint8_t> pkcs8, const char* pw, size_t pwLen)
 {
   throw Error("Not supported");
 }
diff --git a/utils/dummy-keychain.hpp b/utils/dummy-keychain.hpp
index 7f8b0a3..95ee50e 100644
--- a/utils/dummy-keychain.hpp
+++ b/utils/dummy-keychain.hpp
@@ -83,8 +83,7 @@
   hasKey(const Name& keyName) const override;
 
   void
-  addKey(const Name& identity, const Name& keyName, const uint8_t* key,
-         size_t keyLen) override;
+  addKey(const Name& identity, const Name& keyName, span<const uint8_t> key) override;
 
   void
   removeKey(const Name& keyName) override;
@@ -106,12 +105,12 @@
   hasCertificate(const Name& certName) const override;
 
   void
-  addCertificate(const v2::Certificate& certificate) override;
+  addCertificate(const Certificate& certificate) override;
 
   void
   removeCertificate(const Name& certName) override;
 
-  v2::Certificate
+  Certificate
   getCertificate(const Name& certificateName) const override;
 
   std::set<Name>
@@ -120,7 +119,7 @@
   void
   setDefaultCertificateOfKey(const Name& keyName, const Name& certName) override;
 
-  v2::Certificate
+  Certificate
   getDefaultCertificateOfKey(const Name& keyName) const override;
 
   static std::string
@@ -145,14 +144,13 @@
 
 private:
   ConstBufferPtr
-  doSign(DigestAlgorithm digestAlgorithm, const uint8_t* buf, size_t size) const final;
+  doSign(DigestAlgorithm digestAlgorithm, const InputBuffers& bufs) const final;
 
   bool
-  doVerify(DigestAlgorithm digestAlgorithm, const uint8_t* buf, size_t bufLen,
-           const uint8_t* sig, size_t sigLen) const final;
+  doVerify(DigestAlgorithm digestAlgorithm, const InputBuffers& bufs, span<const uint8_t> sig) const final;
 
   ConstBufferPtr
-  doDecrypt(const uint8_t* cipherText, size_t cipherTextLen) const final;
+  doDecrypt(span<const uint8_t> cipherText) const final;
 
   ConstBufferPtr
   doDerivePublicKey() const final;
@@ -211,7 +209,7 @@
   doExportKey(const Name& keyName, const char* pw, size_t pwLen) final;
 
   void
-  doImportKey(const Name& keyName, const uint8_t* pkcs8, size_t pkcs8Len, const char* pw, size_t pwLen) final;
+  doImportKey(const Name& keyName, span<const uint8_t> pkcs8, const char* pw, size_t pwLen) final;
 
   void
   doImportKey(const Name& keyName, shared_ptr<transform::PrivateKey> key) final;
diff --git a/utils/tracers/ndn-app-delay-tracer.cpp b/utils/tracers/ndn-app-delay-tracer.cpp
index d893a72..63fdf73 100644
--- a/utils/tracers/ndn-app-delay-tracer.cpp
+++ b/utils/tracers/ndn-app-delay-tracer.cpp
@@ -197,13 +197,12 @@
 void
 AppDelayTracer::Connect()
 {
-  Config::ConnectWithoutContext("/NodeList/" + m_node
-                                  + "/ApplicationList/*/LastRetransmittedInterestDataDelay",
-                                MakeCallback(&AppDelayTracer::LastRetransmittedInterestDataDelay,
-                                             this));
+  Config::ConnectWithoutContextFailSafe("/NodeList/" + m_node + "/ApplicationList/*/LastRetransmittedInterestDataDelay",
+                                        MakeCallback(&AppDelayTracer::LastRetransmittedInterestDataDelay,
+                                                     this));
 
-  Config::ConnectWithoutContext("/NodeList/" + m_node + "/ApplicationList/*/FirstInterestDataDelay",
-                                MakeCallback(&AppDelayTracer::FirstInterestDataDelay, this));
+  Config::ConnectWithoutContextFailSafe("/NodeList/" + m_node + "/ApplicationList/*/FirstInterestDataDelay",
+                                        MakeCallback(&AppDelayTracer::FirstInterestDataDelay, this));
 }
 
 void
diff --git a/wscript b/wscript
index 94206b4..1dbb9f4 100644
--- a/wscript
+++ b/wscript
@@ -30,7 +30,7 @@
 
     conf.check_cxx(lib='pthread', uselib_store='PTHREAD', define_name='HAVE_PTHREAD', mandatory=False)
     conf.check_sqlite3(mandatory=True)
-    conf.check_openssl(mandatory=True, use='OPENSSL', atleast_version=0x10001000)
+    conf.check_openssl(mandatory=True, use='OPENSSL', atleast_version='1.1.1')
 
     if not conf.env['LIB_BOOST']:
         conf.report_optional_feature("ndnSIM", "ndnSIM", False,
@@ -77,15 +77,22 @@
     conf.write_config_header('../../ns3/ndnSIM/NFD/core/config.hpp', remove=False)
 
 def build(bld):
-    (base, build, split) = bld.getVersion('NFD')
+    (base, build, VERSION_SPLIT) = bld.getVersion('NFD')
+
+    vmajor = int(VERSION_SPLIT[0])
+    vminor = int(VERSION_SPLIT[1]) if len(VERSION_SPLIT) >= 2 else 0
+    vpatch = int(VERSION_SPLIT[2]) if len(VERSION_SPLIT) >= 3 else 0
+
     bld(features="subst",
         name="version-NFD",
         source='NFD/core/version.hpp.in', target='../../ns3/ndnSIM/NFD/core/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])
+        VERSION=vmajor * 1000000 + vminor * 1000 + vpatch,
+        VERSION_MAJOR=str(vmajor),
+        VERSION_MINOR=str(vminor),
+        VERSION_PATCH=str(vpatch))
 
     bld(features="subst",
         name="versioncpp-NFD",
@@ -93,8 +100,10 @@
         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])
+        VERSION=vmajor * 1000000 + vminor * 1000 + vpatch,
+        VERSION_MAJOR=str(vmajor),
+        VERSION_MINOR=str(vminor),
+        VERSION_PATCH=str(vpatch))
 
     bld.objects(
         features="cxx",
@@ -103,15 +112,21 @@
         includes='../../ns3/ndnSIM/NFD',
         use='version-NFD versioncpp-NFD')
 
-    (base, build, split) = bld.getVersion('ndn-cxx')
+    (base, build, VERSION_SPLIT) = bld.getVersion('ndn-cxx')
+    vmajor = int(VERSION_SPLIT[0])
+    vminor = int(VERSION_SPLIT[1]) if len(VERSION_SPLIT) >= 2 else 0
+    vpatch = int(VERSION_SPLIT[2]) if len(VERSION_SPLIT) >= 3 else 0
+
     bld(features="subst",
         name="version-ndn-cxx",
         source='ndn-cxx/ndn-cxx/version.hpp.in', target='../../ns3/ndnSIM/ndn-cxx/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])
+        VERSION=vmajor * 1000000 + vminor * 1000 + vpatch,
+        VERSION_MAJOR=str(vmajor),
+        VERSION_MINOR=str(vminor),
+        VERSION_PATCH=str(vpatch))
 
     deps = ['core', 'network', 'point-to-point', 'topology-read', 'mobility', 'internet']
     if 'ns3-visualizer' in bld.env['NS3_ENABLED_MODULES']:
@@ -125,7 +140,8 @@
                                         'ndn-cxx/ndn-cxx/net/network-monitor*.cpp',
                                         'ndn-cxx/ndn-cxx/util/dummy-client-face.cpp',
                                         'ndn-cxx/ndn-cxx/**/*osx.cpp',
-                                        'ndn-cxx/ndn-cxx/net/network-interface.cpp'])
+                                        'ndn-cxx/ndn-cxx/net/network-interface.cpp',
+                                        'ndn-cxx/**/*-android.cpp'])
 
     nfdSrc = bld.path.ant_glob(['%s/**/*.cpp' % dir for dir in ['NFD/core', 'NFD/daemon']],
                                excl=['NFD/daemon/main.cpp',
