diff --git a/docs/source/cs.rst b/docs/source/cs.rst
index d3ae9e8..989a595 100644
--- a/docs/source/cs.rst
+++ b/docs/source/cs.rst
@@ -6,7 +6,7 @@
 The Contest Store (CS) is implemented as a set of :ndnsim:`CS entries <nfd::cs::EntryImpl>`),
 ordered by the full data name including the implicit digest.  To manage entries, CS adopts a cache policy interface (:ndnsim:`nfd::cs::Policy`), invoked any time a CS entry is added, removed, updated, or used.
 
-By default, ndnSIM uses NFD's Content Store with an option to use an old-style ndnSIM-specific content store implementations (see :ref:`old_cs`). The supported cache replacement policies are the following:
+The supported cache replacement policies are the following:
 
 +----------------------------------------------+----------------------------------------------------------+
 | **NFD's Content Store Policies**                                                                        |
@@ -55,8 +55,7 @@
 
 - To effectively disable NFD content store an all nodes
 
-  Minimum allowed value for NFD content store maximum size is 1.  If 0 is specified, it will be assumed
-  that the old content store implementation should be used.
+  Minimum allowed value for NFD content store maximum size is 1.
 
       .. code-block:: c++
 
@@ -75,131 +74,9 @@
 - flag indicating whether the Data packet is unsolicited
 - the timestamp at which the cached Data becomes stale
 
-.. _old_cs:
-
-Old Content Store Implementations
-+++++++++++++++++++++++++++++++++
-
-We have also ported the old ndnSIM 1.0 content store implementations to the new code base.
-These implementations feature different cache replacement policies, but have very limited
-support for Interest selectors.  If your scenario relies on proper selector processing,
-do not use these implementations as the simulation results most likely be incorrect.
-
-To select old content store implementations, use :ndnsim:`StackHelper::SetOldContentStore`:
-
-.. code-block:: c++
-
-    ndnHelper.SetOldContentStore("<content store implementation>",
-                                ["<optional parameter>", "<optional parameter's value>" [, ...]]);
-    ...
-    ndnHelper.Install (nodes);
-
-Available old content store implementations are listed in the following table:
-
-
-+----------------------------------------------+----------------------------------------------------------+
-| **Simple content stores**                                                                               |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Lru``                      | **Least recently used (LRU) (default)**                  |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Fifo``                     | First-in-first-Out (FIFO)                                |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Lfu``                      | Least frequently used (LFU)                              |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Random``                   | Random                                                   |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Nocache``                  | Policy that completely disables caching                  |
-+----------------------------------------------+----------------------------------------------------------+
-+----------------------------------------------+----------------------------------------------------------+
-| **Content stores with entry lifetime tracking**                                                         |
-|                                                                                                         |
-| These policies allow evaluation of CS enties lifetime (i.e., how long entries stay in CS)               |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Stats::Lru``               | Least recently used (LRU)                                |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Stats::Fifo``              | Least frequently used (LFU)                              |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Stats::Lfu``               | Random                                                   |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Stats::Random``            | Policy that completely disables caching                  |
-+----------------------------------------------+----------------------------------------------------------+
-+----------------------------------------------+----------------------------------------------------------+
-| **Content stores respecting freshness field of Data packets**                                           |
-|                                                                                                         |
-| These policies cache Data packets only for the time indicated by FreshnessPeriod.                       |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Freshness::Lru``           | Least recently used (LRU)                                |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Freshness::Fifo``          | Least frequently used (LFU)                              |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Freshness::Lfu``           | Random                                                   |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Freshness::Random``        | Policy that completely disables caching                  |
-+----------------------------------------------+----------------------------------------------------------+
-+----------------------------------------------+----------------------------------------------------------+
-| **Content store realization that probabilistically accepts data packet into CS (placement policy)**     |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Probability::Lru``         | Least recently used (LRU)                                |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Probability::Fifo``        | Least frequently used (LFU)                              |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Probability::Lfu``         | Random                                                   |
-+----------------------------------------------+----------------------------------------------------------+
-|   ``ns3::ndn::cs::Probability::Random``      | Policy that completely disables caching                  |
-+----------------------------------------------+----------------------------------------------------------+
-
-Examples:
-
-
-- Select simple LRU policy on node1, simple FIFO policy on node2, and simple random policy on
-  other nodes with maximum CS sizes of 10000 packets:
-
-      .. code-block:: c++
-
-         ndnHelper.SetOldContentStore("ns3::ndn::cs::Lru", "MaxSize", "10000");
-         ndnHelper.Install(node1);
-
-         ndnHelper.SetOldContentStore("ns3::ndn::cs::Fifo", "MaxSize", "10000");
-         ndnHelper.Install(node2);
-
-         ndnHelper.SetOldContentStore("ns3::ndn::cs::Random", "MaxSize", "10000");
-         ...
-         ndnHelper.Install(otherNodes);
-
-.. note::
-
-    If ``MaxSize`` parameter is omitted, then will be used a default value (100).
-
-.. note::
-
-    If ``MaxSize`` is set to 0, then no limit on ContentStore will be enforced
-
-- Disable CS on node2
-
-      .. code-block:: c++
-
-         ndnHelper.SetOldContentStore("ns3::ndn::cs::Nocache");
-         ndnHelper.Install(node3);
-
-- Track lifetime of CS entries (must use ``ns3::ndn::cs::*::LifetimeStats`` policy):
-
-      .. code-block:: c++
-
-         void
-         CacheEntryRemoved(std::string context, Ptr<const ndn::cs::Entry> entry, Time lifetime)
-         {
-             std::cout << entry->GetName() << " " << lifetime.ToDouble(Time::S) << "s" << std::endl;
-         }
-
-         ...
-
-         ndnHelper.SetOldContentStore("ns3::ndn::cs::Stats::Lru", "MaxSize", "10000");
-         ...
-         ndnHelper.Install(nodes);
-
-         // connect to lifetime trace
-         Config::Connect("/NodeList/*/$ns3::ndn::cs::Stats::Lru/WillRemoveEntry", MakeCallback(CacheEntryRemoved));
-
+Misc
+~~~~
+  
 - Get aggregate statistics of CS hit/miss ratio (works with any policy)
 
   The simplest way tro track CS hit/miss statistics is to use :ndnsim:`CsTracer`, in more
diff --git a/docs/source/helpers.rst b/docs/source/helpers.rst
index 4595c0b..5613a6f 100644
--- a/docs/source/helpers.rst
+++ b/docs/source/helpers.rst
@@ -161,22 +161,6 @@
 
 .. note::
 
-    NFD's content store implementation takes full consideration of Interest selectors.
-    In contrast to that, the old ndnSIM 1.0 content store implementations have very limited
-    support for Interest selectors, but features a number of different replacement policies.
-    If your scenario relies on proper selector processing, do not use these implementations as
-    the simulation results most likely be incorrect.
-
-    To select old content store implementations, use :ndnsim:`SetOldContentStore
-    <StackHelper::SetOldContentStore>` StackHelper method:
-
-          .. code-block:: c++
-
-             ndnHelper.SetOldContentStore("<content store implementation>",
-                                         ["<optional parameter>", "<optional parameter's value>" [, ...]]);
-             ...
-             ndnHelper.Install (nodes);
-
     In simulation scenarios it is possible to select one of :ref:`the existing implementations
     of the content store or implement your own <content store>`.
 
diff --git a/docs/source/metric.rst b/docs/source/metric.rst
index 09d8bc6..716ad93 100644
--- a/docs/source/metric.rst
+++ b/docs/source/metric.rst
@@ -248,8 +248,6 @@
 Content store trace helper
 --------------------------
 
-NOTE: This tracer works ONLY when the OldContentStore structure is used!
-
 - :ndnsim:`ndn::CsTracer`
 
     With the use of :ndnsim:`ndn::CsTracer` it is possible to obtain statistics of cache hits/cache misses on simulation nodes.
diff --git a/examples/ndn-congestion-alt-topo-plugin.cpp b/examples/ndn-congestion-alt-topo-plugin.cpp
index 8779944..9f3775e 100644
--- a/examples/ndn-congestion-alt-topo-plugin.cpp
+++ b/examples/ndn-congestion-alt-topo-plugin.cpp
@@ -69,8 +69,8 @@
 
   // Install NDN stack on all nodes
   ndn::StackHelper ndnHelper;
-  ndnHelper.SetOldContentStore("ns3::ndn::cs::Lru", "MaxSize",
-                               "1"); // ! Attention ! If set to 0, then MaxSize is infinite
+  ndnHelper.setPolicy("nfd::cs::lru");
+  ndnHelper.setCsSize(1);
   ndnHelper.InstallAll();
 
   // Set BestRoute strategy
diff --git a/examples/ndn-congestion-topo-plugin.cpp b/examples/ndn-congestion-topo-plugin.cpp
index fa72462..427620b 100644
--- a/examples/ndn-congestion-topo-plugin.cpp
+++ b/examples/ndn-congestion-topo-plugin.cpp
@@ -57,7 +57,8 @@
 
   // Install NDN stack on all nodes
   ndn::StackHelper ndnHelper;
-  ndnHelper.SetOldContentStore("ns3::ndn::cs::Lru", "MaxSize", "10000");
+  ndnHelper.setPolicy("nfd::cs::lru");
+  ndnHelper.setCsSize(10000);
   ndnHelper.InstallAll();
 
   // Choosing forwarding strategy
diff --git a/examples/ndn-load-balancer/random-load-balancer-strategy.cpp b/examples/ndn-load-balancer/random-load-balancer-strategy.cpp
index 4f61162..27756cd 100644
--- a/examples/ndn-load-balancer/random-load-balancer-strategy.cpp
+++ b/examples/ndn-load-balancer/random-load-balancer-strategy.cpp
@@ -1,12 +1,12 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014,  Regents of the University of California,
- *                      Arizona Board of Regents,
- *                      Colorado State University,
- *                      University Pierre & Marie Curie, Sorbonne University,
- *                      Washington University in St. Louis,
- *                      Beijing Institute of Technology,
- *                      The University of Memphis
+/*
+ * Copyright (c) 2014-2019, Regents of the University of California,
+ *                          Arizona Board of Regents,
+ *                          Colorado State University,
+ *                          University Pierre & Marie Curie, Sorbonne University,
+ *                          Washington University in St. Louis,
+ *                          Beijing Institute of Technology,
+ *                          The University of Memphis
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon).
  * See AUTHORS.md for complete list of NFD authors and contributors.
@@ -29,7 +29,7 @@
 
 #include <ndn-cxx/util/random.hpp>
 
-#include "core/logger.hpp"
+#include "daemon/common/logger.hpp"
 
 NFD_LOG_INIT("RandomLoadBalancerStrategy");
 
@@ -61,7 +61,7 @@
 }
 
 void
-RandomLoadBalancerStrategy::afterReceiveInterest(const Face& inFace, const Interest& interest,
+RandomLoadBalancerStrategy::afterReceiveInterest(const FaceEndpoint& ingress, const Interest& interest,
                                                  const shared_ptr<pit::Entry>& pitEntry)
 {
   NFD_LOG_TRACE("afterReceiveInterest");
@@ -75,7 +75,7 @@
   const fib::NextHopList& nexthops = fibEntry.getNextHops();
 
   // Ensure there is at least 1 Face is available for forwarding
-  if (!hasFaceForForwarding(inFace, nexthops, pitEntry)) {
+  if (!hasFaceForForwarding(ingress.face, nexthops, pitEntry)) {
     this->rejectPendingInterest(pitEntry);
     return;
   }
@@ -90,9 +90,9 @@
     for (selected = nexthops.begin(); selected != nexthops.end() && currentIndex != randomIndex;
          ++selected, ++currentIndex) {
     }
-  } while (!canForwardToNextHop(inFace, pitEntry, *selected));
+  } while (!canForwardToNextHop(ingress.face, pitEntry, *selected));
 
-  this->sendInterest(pitEntry, selected->getFace(), interest);
+  this->sendInterest(pitEntry, FaceEndpoint(selected->getFace(), 0), interest);
 }
 
 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 ef11ae8..1a2e2c0 100644
--- a/examples/ndn-load-balancer/random-load-balancer-strategy.hpp
+++ b/examples/ndn-load-balancer/random-load-balancer-strategy.hpp
@@ -38,10 +38,11 @@
 public:
   RandomLoadBalancerStrategy(Forwarder& forwarder, const Name& name = getStrategyName());
 
-  virtual ~RandomLoadBalancerStrategy() override;
+  virtual
+  ~RandomLoadBalancerStrategy() override;
 
-  virtual void
-  afterReceiveInterest(const Face& inFace, const Interest& interest,
+  void
+  afterReceiveInterest(const FaceEndpoint& ingress, const Interest& interest,
                        const shared_ptr<pit::Entry>& pitEntry) override;
 
   static const Name&
diff --git a/examples/ndn-simple-wifi.cpp b/examples/ndn-simple-wifi.cpp
index 3d6891e..d89db34 100644
--- a/examples/ndn-simple-wifi.cpp
+++ b/examples/ndn-simple-wifi.cpp
@@ -105,7 +105,8 @@
   ndn::StackHelper ndnHelper;
   // ndnHelper.AddNetDeviceFaceCreateCallback (WifiNetDevice::GetTypeId (), MakeCallback
   // (MyNetDeviceFaceCallback));
-  ndnHelper.SetOldContentStore("ns3::ndn::cs::Lru", "MaxSize", "1000");
+  ndnHelper.setPolicy("nfd::cs::lru");
+  ndnHelper.setCsSize(1000);
   ndnHelper.SetDefaultRoutes(true);
   ndnHelper.Install(nodes);
 
diff --git a/examples/ndn-simple-with-different-sizes-content-store.cpp b/examples/ndn-simple-with-different-sizes-content-store.cpp
deleted file mode 100644
index 355d37d..0000000
--- a/examples/ndn-simple-with-different-sizes-content-store.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2011-2015  Regents of the University of California.
- *
- * This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and
- * contributors.
- *
- * ndnSIM is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * ndnSIM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * ndnSIM, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
-
-// ndn-simple-with-different-sizes-content-store.cc
-
-#include "ns3/core-module.h"
-#include "ns3/network-module.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/ndnSIM-module.h"
-
-namespace ns3 {
-
-/**
- * This scenario simulates a very simple network topology:
- *
- *
- *      +----------+     1Mbps      +--------+     1Mbps      +----------+
- *      | consumer | <------------> | router | <------------> | producer |
- *      +----------+         10ms   +--------+          10ms  +----------+
- *
- * This scenario demonstrates how to use content store that responds to Freshness parameter set in
- *Datas.
- * That is, if producer set Freshness field to 2 seconds, the corresponding content object will not
- *be cached
- * more than 2 seconds (can be cached for a shorter time, if entry is evicted earlier)
- *
- *     NS_LOG=ndn.Consumer ./waf --run ndn-simple-with-different-sizes-content-store
- */
-
-int
-main(int argc, char* argv[])
-{
-  // 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"));
-
-  // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
-  CommandLine cmd;
-  cmd.Parse(argc, argv);
-
-  // Creating nodes
-  NodeContainer nodes;
-  nodes.Create(3);
-
-  // Connecting nodes using two links
-  PointToPointHelper p2p;
-  p2p.Install(nodes.Get(0), nodes.Get(1));
-  p2p.Install(nodes.Get(1), nodes.Get(2));
-
-  // Install NDN stack on all nodes
-  ndn::StackHelper ndnHelper;
-  ndnHelper.SetDefaultRoutes(true);
-  ndnHelper.SetOldContentStore(
-    "ns3::ndn::cs::Freshness::Lru"); // don't set up max size here, will use default value = 100
-  ndnHelper.InstallAll();
-
-  // set up max sizes, after NDN stack is installed
-  Config::Set("/NodeList/0/$ns3::ndn::ContentStore/MaxSize",
-              UintegerValue(
-                1)); // number after nodeList is global ID of the node (= node->GetId ())
-  Config::Set("/NodeList/1/$ns3::ndn::ContentStore/MaxSize", UintegerValue(2));
-  Config::Set("/NodeList/2/$ns3::ndn::ContentStore/MaxSize", UintegerValue(200));
-
-  // Installing applications
-
-  // Consumer
-  ndn::AppHelper consumerHelper("ns3::ndn::ConsumerCbr");
-  // Consumer will request /prefix/0, /prefix/1, ...
-  consumerHelper.SetPrefix("/prefix");
-  consumerHelper.SetAttribute("Frequency", StringValue("10")); // 10 interests a second
-  consumerHelper.Install(nodes.Get(0));                        // first node
-
-  // Producer
-  ndn::AppHelper producerHelper("ns3::ndn::Producer");
-  // Producer will reply to all requests starting with /prefix
-  producerHelper.SetPrefix("/prefix");
-  producerHelper.SetAttribute("PayloadSize", StringValue("1024"));
-  producerHelper.Install(nodes.Get(2)); // last node
-
-  Simulator::Stop(Seconds(20.0));
-
-  Simulator::Run();
-  Simulator::Destroy();
-
-  return 0;
-}
-
-} // namespace ns3
-
-int
-main(int argc, char* argv[])
-{
-  return ns3::main(argc, argv);
-}
diff --git a/examples/ndn-tree-cs-tracers.cpp b/examples/ndn-tree-cs-tracers.cpp
index cee7302..5cac62b 100644
--- a/examples/ndn-tree-cs-tracers.cpp
+++ b/examples/ndn-tree-cs-tracers.cpp
@@ -69,8 +69,8 @@
 
   // Install NDN stack on all nodes
   ndn::StackHelper ndnHelper;
-  ndnHelper.SetOldContentStore("ns3::ndn::cs::Lru", "MaxSize",
-                               "100"); // default ContentStore parameters
+  ndnHelper.setPolicy("nfd::cs::lru");
+  ndnHelper.setCsSize(100);
   ndnHelper.InstallAll();
 
   // Choosing forwarding strategy
diff --git a/examples/ndn-tree-with-l2tracer.cpp b/examples/ndn-tree-with-l2tracer.cpp
index ab80675..200ae1a 100644
--- a/examples/ndn-tree-with-l2tracer.cpp
+++ b/examples/ndn-tree-with-l2tracer.cpp
@@ -38,7 +38,8 @@
   /****************************************************************************/
   // Install NDN stack on all nodes
   ndn::StackHelper ndnHelper;
-  ndnHelper.SetOldContentStore("ns3::ndn::cs::Lru", "MaxSize", "1000");
+  ndnHelper.setPolicy("nfd::cs::lru");
+  ndnHelper.setCsSize(1000);
   ndnHelper.InstallAll();
   /****************************************************************************/
   // Installing global routing interface on all nodes
diff --git a/helper/ndn-stack-helper.cpp b/helper/ndn-stack-helper.cpp
index 09f0d8c..cf60551 100644
--- a/helper/ndn-stack-helper.cpp
+++ b/helper/ndn-stack-helper.cpp
@@ -53,7 +53,6 @@
   : m_isForwarderStatusManagerDisabled(false)
   , m_isStrategyChoiceManagerDisabled(false)
   , m_needSetDefaultRoutes(false)
-  , m_maxCsSize(100)
 {
   setCustomNdnCxxClocks();
 
@@ -173,7 +172,7 @@
     ndn->getConfig().put("ndnSIM.disable_strategy_choice_manager", true);
   }
 
-  ndn->getConfig().put("tables.cs_max_packets", (m_maxCsSize == 0) ? 1 : m_maxCsSize);
+  ndn->getConfig().put("tables.cs_max_packets", m_maxCsSize);
 
   ndn->setCsReplacementPolicy(m_csPolicyCreationFunc);
 
diff --git a/helper/ndn-stack-helper.hpp b/helper/ndn-stack-helper.hpp
index c2ab6f0..f9ff0f8 100644
--- a/helper/ndn-stack-helper.hpp
+++ b/helper/ndn-stack-helper.hpp
@@ -255,7 +255,7 @@
   ObjectFactory m_ndnFactory;
 
   bool m_needSetDefaultRoutes;
-  size_t m_maxCsSize;
+  size_t m_maxCsSize = 100;
 
   typedef std::function<std::unique_ptr<nfd::cs::Policy>()> PolicyCreationCallback;
   PolicyCreationCallback m_csPolicyCreationFunc;
diff --git a/model/ndn-block-header.cpp b/model/ndn-block-header.cpp
index 78d4f5c..fbab70f 100644
--- a/model/ndn-block-header.cpp
+++ b/model/ndn-block-header.cpp
@@ -139,8 +139,13 @@
 
           ::ndn::Buffer::const_iterator first, last;
           std::tie(first, last) = p.get<lp::FragmentField>(0);
-          Block fragmentBlock(&*first, std::distance(first, last));
-          decodeAndPrint(fragmentBlock);
+          try {
+            Block fragmentBlock(&*first, std::distance(first, last));
+            decodeAndPrint(fragmentBlock);
+          }
+          catch (const tlv::Error& error) {
+            os << "Non-TLV bytes (size: " << std::distance(first, last) << ")";
+          }
         }
         os << ")";
         break;
diff --git a/tests/other/ndn-test.cpp b/tests/other/ndn-test.cpp
index c720bd6..da86f31 100644
--- a/tests/other/ndn-test.cpp
+++ b/tests/other/ndn-test.cpp
@@ -26,7 +26,6 @@
 
 #include <sys/time.h>
 #include "ns3/ndnSIM/utils/mem-usage.hpp"
-#include "ns3/ndnSIM/model/cs/ndn-content-store.hpp"
 #include "ns3/ndnSIM/utils/mem-usage.hpp"
 
 namespace ns3 {
@@ -63,7 +62,6 @@
   printStats(std::ostream& os, Time nextPrintTime, double beginRealTime);
 
 private:
-  std::string m_oldContentStore;
   size_t m_csSize;
   double m_interestRate;
   bool m_shouldEvaluatePit;
@@ -110,16 +108,9 @@
     if (pitSize != 0)
       pitCount += pitSize;
 
-    if (true != true) {
-      Ptr<ndn::ContentStore> cs = (*node)->GetObject<ndn::ContentStore>();
-      if (cs != 0)
-        csCount += cs->GetSize();
-    }
-    else {
-      auto csSize = (*node)->GetObject<ndn::L3Protocol>()->getForwarder()->getCs().size();
-      if (csSize != 0)
-        csCount += csSize;
-    }
+    auto csSize = (*node)->GetObject<ndn::L3Protocol>()->getForwarder()->getCs().size();
+    if (csSize != 0)
+      csCount += csSize;
   }
 
   os << "pit:" << pitCount << "\t";
@@ -163,9 +154,6 @@
 
   // Read optional command-line parameters (e.g., enable visualizer with ./waf --run=<> --visualize
   CommandLine cmd;
-  cmd.AddValue("old-cs", "Old content store to use "
-                         "(e.g., ns3::ndn::cs::Lru, ns3::ndn::cs::Lfu, ...)",
-               m_oldContentStore);
   cmd.AddValue("cs-size", "Maximum number of cached packets per node", m_csSize);
   cmd.AddValue("rate", "Interest rate", m_interestRate);
   cmd.AddValue("pit", "Perform PIT evaluation if this parameter is true",
@@ -189,10 +177,6 @@
   ndn::StackHelper ndnHelper;
   ndnHelper.setCsSize(m_csSize);
 
-  if (!m_oldContentStore.empty()) {
-    ndnHelper.SetOldContentStore(m_oldContentStore, "MaxSize", std::to_string(m_csSize));
-  }
-
   ndnHelper.InstallAll();
 
   ndn::FibHelper::AddRoute(nodes.Get(0), "/", nodes.Get(1), 10);
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 1e59f14..3d79ffa 100644
--- a/tests/unit-tests/helper/ndn-link-control-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-link-control-helper.t.cpp
@@ -18,7 +18,7 @@
  **/
 
 #include "helper/ndn-link-control-helper.hpp"
-#include "NFD/core/scheduler.hpp"
+#include "daemon/common/global.hpp"
 
 #include "../tests-common.hpp"
 
@@ -54,16 +54,16 @@
   Simulator::Schedule(Seconds(5.1), ndn::LinkControlHelper::FailLink, getNode("1"), getNode("2"));
   Simulator::Schedule(Seconds(10.1), ndn::LinkControlHelper::UpLink, getNode("1"), getNode("2"));
 
-  nfd::scheduler::schedule(time::milliseconds(5200), [&] {
+  nfd::getScheduler().schedule(time::milliseconds(5200), [&] {
       BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 6);
       BOOST_CHECK_EQUAL(getFace("1", "2")->getCounters().nInData, 6);
     });
 
-  nfd::scheduler::schedule(time::milliseconds(10200), [&] {
+  nfd::getScheduler().schedule(time::milliseconds(10200), [&] {
       BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 6);
       BOOST_CHECK_EQUAL(getFace("1", "2")->getCounters().nInData, 6);
     });
-  nfd::scheduler::schedule(time::milliseconds(15100), [&] {
+  nfd::getScheduler().schedule(time::milliseconds(15100), [&] {
       BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 11);
       BOOST_CHECK_EQUAL(getFace("1", "2")->getCounters().nInData, 11);
     });
@@ -119,27 +119,27 @@
           "0s", "100s"}
     });
 
-  nfd::scheduler::schedule(time::milliseconds(10100), [&] {
+  nfd::getScheduler().schedule(time::milliseconds(10100), [&] {
       LinkControlHelper::FailLink(getNode("1"), getNode("2"));
     });
 
   // just before link failure
-  nfd::scheduler::schedule(time::milliseconds(10050), [&] {
+  nfd::getScheduler().schedule(time::milliseconds(10050), [&] {
       BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 11);
       BOOST_CHECK_EQUAL(getFace("3", "1")->getCounters().nInInterests, 11);
     });
 
   // just before link recovery
-  nfd::scheduler::schedule(time::milliseconds(20050), [&] {
+  nfd::getScheduler().schedule(time::milliseconds(20050), [&] {
       BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 11);
       BOOST_CHECK_EQUAL(getFace("3", "1")->getCounters().nInInterests, 21);
     });
 
-  nfd::scheduler::schedule(time::milliseconds(20100), [&] {
+  nfd::getScheduler().schedule(time::milliseconds(20100), [&] {
       LinkControlHelper::UpLink(getNode("1"), getNode("2"));
     });
 
-  nfd::scheduler::schedule(time::milliseconds(30050), [&] {
+  nfd::getScheduler().schedule(time::milliseconds(30050), [&] {
       BOOST_CHECK_EQUAL(getFace("2", "1")->getCounters().nInInterests, 21);
       BOOST_CHECK_EQUAL(getFace("3", "1")->getCounters().nInInterests, 31);
     });
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 cbcec2e..f1a8a14 100644
--- a/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp
+++ b/tests/unit-tests/helper/ndn-strategy-choice-helper.t.cpp
@@ -149,9 +149,9 @@
     this->setInstanceName(name);
   }
 
-  virtual void
-  afterReceiveInterest(const Face& inFace, const Interest& interest,
-                       const shared_ptr<nfd::pit::Entry>& pitEntry)
+  void
+  afterReceiveInterest(const nfd::FaceEndpoint& ingress, const Interest& interest,
+                       const shared_ptr<nfd::pit::Entry>& pitEntry) override
   {
     // this strategy doesn't forward interests
   }
diff --git a/tests/unit-tests/model/ndn-old-content-store.t.cpp b/tests/unit-tests/model/ndn-old-content-store.t.cpp
deleted file mode 100644
index c2e9c43..0000000
--- a/tests/unit-tests/model/ndn-old-content-store.t.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2011-2016  Regents of the University of California.
- *
- * This file is part of ndnSIM. See AUTHORS for complete list of ndnSIM authors and
- * contributors.
- *
- * ndnSIM is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation,
- * either version 3 of the License, or (at your option) any later version.
- *
- * ndnSIM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * ndnSIM, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
-
-
-#include "../tests-common.hpp"
-
-namespace ns3 {
-namespace ndn {
-
-BOOST_FIXTURE_TEST_SUITE(ModelNdnOldContentStore, ScenarioHelperWithCleanupFixture)
-
-BOOST_AUTO_TEST_CASE(RandomPolicy)
-{
-  Config::SetDefault("ns3::PointToPointNetDevice::DataRate", StringValue("10Mbps"));
-  Config::SetDefault("ns3::PointToPointChannel::Delay", StringValue("10ms"));
-  Config::SetDefault("ns3::QueueBase::MaxSize", StringValue("20p"));
-
-  getStackHelper().SetOldContentStore("ns3::ndn::cs::Random", "MaxSize", "10");
-
-  createTopology({
-      {"1", "2"},
-    });
-
-  addRoutes({
-      {"1", "2", "/prefix", 1},
-    });
-
-  addApps({
-      {"1", "ns3::ndn::ConsumerCbr",
-          {{"Prefix", "/prefix"}, {"Frequency", "10"}},
-          "0s", "9.99s"},
-      {"2", "ns3::ndn::Producer",
-          {{"Prefix", "/prefix"}, {"PayloadSize", "1024"}},
-          "0s", "100s"}
-    });
-
-  Simulator::Stop(Seconds(20.001));
-  Simulator::Run();
-
-  std::map<std::string, std::vector<Name>> entries;
-  for (const std::string& node : {"1", "2"}) {
-    auto cs = getNode(node)->GetObject<ContentStore>();
-    auto& nodeCs = entries[node];
-    for (auto it = cs->Begin(); it != cs->End(); it = cs->Next(it)) {
-      nodeCs.push_back(it->GetName());
-    }
-  }
-
-  BOOST_CHECK_EQUAL(entries["1"].size(), 10);
-  BOOST_CHECK_EQUAL(entries["2"].size(), 10);
-  BOOST_CHECK(entries["1"] != entries["2"]); // this test has a small chance of failing
-}
-
-BOOST_AUTO_TEST_SUITE_END()
-
-} // namespace ndn
-} // namespace ns3
diff --git a/tests/unit-tests/ndn-cxx/face.t.cpp b/tests/unit-tests/ndn-cxx/face.t.cpp
index 6eb39c2..32a1c1c 100644
--- a/tests/unit-tests/ndn-cxx/face.t.cpp
+++ b/tests/unit-tests/ndn-cxx/face.t.cpp
@@ -220,9 +220,9 @@
     m_face.expressInterest(Interest(Name(name).appendSegment(seqNo)).setCanBePrefix(true), std::bind([=] (const Data& data) {
           onData(data.getName());
 
-          m_event = m_scheduler.scheduleEvent(time::seconds(1),
-                                              std::bind(&MultipleInterest::expressNextInterest, this,
-                                                        name, seqNo + 1, onData, onTimeout, onNack));
+          m_event = m_scheduler.schedule(time::seconds(1),
+                                         std::bind(&MultipleInterest::expressNextInterest, this,
+                                                   name, seqNo + 1, onData, onTimeout, onNack));
         }, _2),
       std::bind(onNack),
       std::bind(onTimeout));
