diff --git a/helper/ndn-scenario-helper.cpp b/helper/ndn-scenario-helper.cpp
index 0c661da..1be86e6 100644
--- a/helper/ndn-scenario-helper.cpp
+++ b/helper/ndn-scenario-helper.cpp
@@ -144,5 +144,11 @@
   throw std::invalid_argument("Link between " + node1 + " and " + node2 + " does not exist");
 }
 
+StackHelper&
+ScenarioHelper::getStackHelper()
+{
+  return ndnHelper;
+}
+
 } // namespace ndn
 } // namespace ns3
diff --git a/helper/ndn-scenario-helper.hpp b/helper/ndn-scenario-helper.hpp
index 5131daa..52d19b7 100644
--- a/helper/ndn-scenario-helper.hpp
+++ b/helper/ndn-scenario-helper.hpp
@@ -181,6 +181,12 @@
   void
   disableStatusServer();
 
+  /**
+   * \brief Get NDN stack helper, e.g., to adjust its parameters
+   */
+  StackHelper&
+  getStackHelper();
+
 private:
   Ptr<Node>
   getOrCreateNode(const std::string& nodeName);
diff --git a/tests/unit-tests/model/ndn-old-content-store.t.cpp b/tests/unit-tests/model/ndn-old-content-store.t.cpp
new file mode 100644
index 0000000..362988c
--- /dev/null
+++ b/tests/unit-tests/model/ndn-old-content-store.t.cpp
@@ -0,0 +1,73 @@
+/* -*- 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::DropTailQueue::MaxPackets", StringValue("20"));
+
+  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/utils/trie/random-policy.hpp b/utils/trie/random-policy.hpp
index 1e2aa4a..a6e3517 100644
--- a/utils/trie/random-policy.hpp
+++ b/utils/trie/random-policy.hpp
@@ -23,6 +23,7 @@
 /// @cond include_hidden
 
 #include "ns3/random-variable-stream.h"
+#include "ns3/double.h"
 
 #include <boost/intrusive/options.hpp>
 #include <boost/intrusive/set.hpp>
@@ -92,8 +93,8 @@
         , u_rand(CreateObject<UniformRandomVariable>())
         , max_size_(100)
       {
-        u_rand->SetAttribute("Min", UintegerValue(0));
-        u_rand->SetAttribute("Max", UintegerValue(std::numeric_limits<uint32_t>::max()));
+        u_rand->SetAttribute("Min", DoubleValue(0));
+        u_rand->SetAttribute("Max", DoubleValue(std::numeric_limits<uint32_t>::max()));
       }
 
       inline void
