diff --git a/helper/ndn-fib-helper.cpp b/helper/ndn-fib-helper.cpp
index 6218aeb..dddcc8a 100644
--- a/helper/ndn-fib-helper.cpp
+++ b/helper/ndn-fib-helper.cpp
@@ -59,7 +59,7 @@
   commandName.append(encodedParameters);
 
   shared_ptr<Interest> command(make_shared<Interest>(commandName));
-  StackHelper::getKeyChain().signWithSha256(*command);
+  StackHelper::getKeyChain().sign(*command);
 
   Ptr<L3Protocol> l3protocol = node->GetObject<L3Protocol>();
   shared_ptr<nfd::FibManager> fibManager = l3protocol->getFibManager();
@@ -77,7 +77,7 @@
   commandName.append(encodedParameters);
 
   shared_ptr<Interest> command(make_shared<Interest>(commandName));
-  StackHelper::getKeyChain().signWithSha256(*command);
+  StackHelper::getKeyChain().sign(*command);
 
   Ptr<L3Protocol> L3protocol = node->GetObject<L3Protocol>();
   shared_ptr<nfd::FibManager> fibManager = L3protocol->getFibManager();
diff --git a/helper/ndn-stack-helper.cpp b/helper/ndn-stack-helper.cpp
index 5e2038c..6e45281 100644
--- a/helper/ndn-stack-helper.cpp
+++ b/helper/ndn-stack-helper.cpp
@@ -41,7 +41,7 @@
 
 StackHelper::StackHelper()
   : m_needSetDefaultRoutes(false)
-  , m_shouldUseNfdCs(true)
+  , m_maxCsSize(100)
 {
   setCustomNdnCxxClocks();
 
@@ -96,14 +96,13 @@
 }
 
 void
-StackHelper::SetContentStore(const std::string& contentStore, const std::string& attr1,
-                             const std::string& value1, const std::string& attr2,
-                             const std::string& value2, const std::string& attr3,
-                             const std::string& value3, const std::string& attr4,
-                             const std::string& value4)
+StackHelper::SetOldContentStore(const std::string& contentStore, const std::string& attr1,
+                                const std::string& value1, const std::string& attr2,
+                                const std::string& value2, const std::string& attr3,
+                                const std::string& value3, const std::string& attr4,
+                                const std::string& value4)
 {
-  NS_ASSERT_MSG(m_shouldUseNfdCs == false,
-                "First choose not to use NFD's CS and then select the replacement policy");
+  m_maxCsSize = 0;
 
   m_contentStoreFactory.SetTypeId(contentStore);
   if (attr1 != "")
@@ -117,15 +116,9 @@
 }
 
 void
-StackHelper::SetContentStoreChoice(bool shouldUseNfdCs)
+StackHelper::setCsSize(size_t maxSize)
 {
-  m_shouldUseNfdCs = shouldUseNfdCs;
-}
-
-bool
-StackHelper::shouldUseNfdCs() const
-{
-  return m_shouldUseNfdCs;
+  m_maxCsSize = maxSize;
 }
 
 Ptr<FaceContainer>
@@ -157,12 +150,15 @@
 
   Ptr<L3Protocol> ndn = m_ndnFactory.Create<L3Protocol>();
 
+  ndn->getConfig().put("tables.cs_max_packets", (m_maxCsSize == 0) ? 1 : m_maxCsSize);
+
   // NFD initialization
-  ndn->initialize(m_shouldUseNfdCs);
+  ndn->initialize();
 
   // Create and aggregate content store if NFD's contest store has been disabled
-  if (!m_shouldUseNfdCs)
+  if (m_maxCsSize == 0) {
     ndn->AggregateObject(m_contentStoreFactory.Create<ContentStore>());
+  }
 
   // Aggregate L3Protocol on node (must be after setting ndnSIM CS)
   node->AggregateObject(ndn);
diff --git a/helper/ndn-stack-helper.hpp b/helper/ndn-stack-helper.hpp
index 63cc564..836a6b4 100644
--- a/helper/ndn-stack-helper.hpp
+++ b/helper/ndn-stack-helper.hpp
@@ -61,7 +61,7 @@
  * attribute or a set of functionality that may be of interest to many other
  * classes.
  */
-class StackHelper {
+class StackHelper : boost::noncopyable {
 public:
   /**
    * \brief Create a new NdnStackHelper with a default NDN_FLOODING forwarding stategy
@@ -87,25 +87,14 @@
    * @param contentStoreClass string, representing class of the content store
    */
   void
-  SetContentStore(const std::string& contentStoreClass, const std::string& attr1 = "",
+  SetOldContentStore(const std::string& contentStoreClass, const std::string& attr1 = "",
                   const std::string& value1 = "", const std::string& attr2 = "",
                   const std::string& value2 = "", const std::string& attr3 = "",
                   const std::string& value3 = "", const std::string& attr4 = "",
                   const std::string& value4 = "");
 
-  /**
-   * @brief Set to use native NFD's content store or ndnSIM provided CS implementations
-   *
-   * @note ndnSIM CS implementations have limited support for NDN selectors
-   */
   void
-  SetContentStoreChoice(const bool shouldUseNfdCs);
-
-  /**
-   * @brief Check if stack is using native NFD content store implementation
-   */
-  bool
-  shouldUseNfdCs() const;
+  setCsSize(size_t maxSize);
 
   typedef Callback<shared_ptr<NetDeviceFace>, Ptr<Node>, Ptr<L3Protocol>, Ptr<NetDevice>>
     NetDeviceFaceCreateCallback;
@@ -214,16 +203,11 @@
   setCustomNdnCxxClocks();
 
 private:
-  StackHelper(const StackHelper&);
-  StackHelper&
-  operator=(const StackHelper& o);
-
-private:
   ObjectFactory m_ndnFactory;
   ObjectFactory m_contentStoreFactory;
 
   bool m_needSetDefaultRoutes;
-  bool m_shouldUseNfdCs;
+  size_t m_maxCsSize;
 
   typedef std::list<std::pair<TypeId, NetDeviceFaceCreateCallback>> NetDeviceCallbackList;
   NetDeviceCallbackList m_netDeviceCallbacks;
diff --git a/helper/ndn-strategy-choice-helper.cpp b/helper/ndn-strategy-choice-helper.cpp
index 53e0209..53ba544 100644
--- a/helper/ndn-strategy-choice-helper.cpp
+++ b/helper/ndn-strategy-choice-helper.cpp
@@ -39,7 +39,7 @@
   commandName.append(encodedParameters);
 
   shared_ptr<Interest> command(make_shared<Interest>(commandName));
-  StackHelper::getKeyChain().signWithSha256(*command);
+  StackHelper::getKeyChain().sign(*command);
   Ptr<L3Protocol> L3protocol = node->GetObject<L3Protocol>();
   auto strategyChoiceManager = L3protocol->getStrategyChoiceManager();
   strategyChoiceManager->onStrategyChoiceRequest(*command);
