diff --git a/daemon/main.cpp b/daemon/main.cpp
index 0e90bd0..9fd191e 100644
--- a/daemon/main.cpp
+++ b/daemon/main.cpp
@@ -1,11 +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
+ * 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
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon).
  * See AUTHORS.md for complete list of NFD authors and contributors.
@@ -20,7 +21,7 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
+ */
 
 #include <getopt.h>
 #include <boost/filesystem.hpp>
@@ -37,6 +38,7 @@
 #include "mgmt/status-server.hpp"
 #include "core/config-file.hpp"
 #include "mgmt/general-config-section.hpp"
+#include "mgmt/tables-config-section.hpp"
 
 namespace nfd {
 
@@ -137,6 +139,15 @@
     ConfigFile config((IgnoreRibAndLogSections()));
 
     general::setConfigFile(config);
+
+    TablesConfigSection tablesConfig(m_forwarder->getCs(),
+                                     m_forwarder->getPit(),
+                                     m_forwarder->getFib(),
+                                     m_forwarder->getStrategyChoice(),
+                                     m_forwarder->getMeasurements());
+
+    tablesConfig.setConfigFile(config);
+
     m_internalFace->getValidator().setConfigFile(config);
 
     m_forwarder->addFace(m_internalFace);
@@ -271,6 +282,14 @@
 
     general::setConfigFile(config);
 
+    TablesConfigSection tablesConfig(m_forwarder->getCs(),
+                                     m_forwarder->getPit(),
+                                     m_forwarder->getFib(),
+                                     m_forwarder->getStrategyChoice(),
+                                     m_forwarder->getMeasurements());
+
+    tablesConfig.setConfigFile(config);
+
     m_internalFace->getValidator().setConfigFile(config);
     m_faceManager->setConfigFile(config);
 
diff --git a/daemon/mgmt/tables-config-section.cpp b/daemon/mgmt/tables-config-section.cpp
new file mode 100644
index 0000000..0efa02d
--- /dev/null
+++ b/daemon/mgmt/tables-config-section.cpp
@@ -0,0 +1,87 @@
+/* -*- 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
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD 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.
+ *
+ * NFD 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
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "tables-config-section.hpp"
+
+#include "common.hpp"
+#include "core/logger.hpp"
+#include "core/config-file.hpp"
+
+namespace nfd {
+
+NFD_LOG_INIT("TablesConfigSection");
+
+TablesConfigSection::TablesConfigSection(Cs& cs,
+                                         Pit& pit,
+                                         Fib& fib,
+                                         StrategyChoice& strategyChoice,
+                                         Measurements& measurements)
+  : m_cs(cs)
+  // , m_pit(pit)
+  // , m_fib(fib)
+  // , m_strategyChoice(strategyChoice)
+  // , m_measurements(measurements)
+{
+
+}
+
+void
+TablesConfigSection::onConfig(const ConfigSection& configSection,
+                              bool isDryRun,
+                              const std::string& filename)
+{
+  // tables
+  // {
+  //    cs_max_packets 65536
+  // }
+
+  boost::optional<const ConfigSection&> csMaxPacketsNode =
+    configSection.get_child_optional("cs_max_packets");
+
+  if (csMaxPacketsNode)
+    {
+      boost::optional<size_t> valCsMaxPackets =
+        configSection.get_optional<size_t>("cs_max_packets");
+
+      if (!valCsMaxPackets)
+        {
+          throw ConfigFile::Error("Invalid value for option \"cs_max_packets\""
+                                  " in \"tables\" section");
+        }
+      else if (!isDryRun)
+        {
+          m_cs.setLimit(*valCsMaxPackets);
+        }
+    }
+}
+
+void
+TablesConfigSection::setConfigFile(ConfigFile& configFile)
+{
+  configFile.addSectionHandler("tables",
+                               bind(&TablesConfigSection::onConfig, this, _1, _2, _3));
+}
+
+} // namespace nfd
diff --git a/daemon/mgmt/tables-config-section.hpp b/daemon/mgmt/tables-config-section.hpp
new file mode 100644
index 0000000..482ceca
--- /dev/null
+++ b/daemon/mgmt/tables-config-section.hpp
@@ -0,0 +1,67 @@
+/* -*- 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
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD 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.
+ *
+ * NFD 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
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NFD_MGMT_TABLES_CONFIG_SECTION_HPP
+#define NFD_MGMT_TABLES_CONFIG_SECTION_HPP
+
+#include "table/fib.hpp"
+#include "table/pit.hpp"
+#include "table/cs.hpp"
+#include "table/measurements.hpp"
+#include "table/strategy-choice.hpp"
+
+#include "core/config-file.hpp"
+
+namespace nfd {
+
+class TablesConfigSection
+{
+public:
+
+  TablesConfigSection(Cs& cs,
+                      Pit& pit,
+                      Fib& fib,
+                      StrategyChoice& strategyChoice,
+                      Measurements& measurements);
+
+  void
+  setConfigFile(ConfigFile& configFile);
+
+  void
+  onConfig(const ConfigSection& configSection,
+           bool isDryRun,
+           const std::string& filename);
+
+private:
+  Cs& m_cs;
+  // Pit& m_pit;
+  // Fib& m_fib;
+  // StrategyChoice& m_strategyChoice;
+  // Measurements& m_measurements;
+};
+
+} // namespace nfd
+
+#endif // NFD_MGMT_TABLES_CONFIG_SECTION_HPP
diff --git a/daemon/table/cs.cpp b/daemon/table/cs.cpp
index f750b61..ad666d5 100644
--- a/daemon/table/cs.cpp
+++ b/daemon/table/cs.cpp
@@ -1,11 +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
+ * 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
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon).
  * See AUTHORS.md for complete list of NFD authors and contributors.
@@ -36,7 +37,7 @@
 
 namespace nfd {
 
-Cs::Cs(int nMaxPackets)
+Cs::Cs(size_t nMaxPackets)
   : m_nMaxPackets(nMaxPackets)
   , m_nPackets(0)
 {
diff --git a/daemon/table/cs.hpp b/daemon/table/cs.hpp
index 5e3b79d..c523293 100644
--- a/daemon/table/cs.hpp
+++ b/daemon/table/cs.hpp
@@ -1,11 +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
+ * 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
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon).
  * See AUTHORS.md for complete list of NFD authors and contributors.
@@ -100,7 +101,7 @@
 {
 public:
   explicit
-  Cs(int nMaxPackets = 65536); // ~500MB with average packet size = 8KB
+  Cs(size_t nMaxPackets = 10);
 
   ~Cs();
 
diff --git a/nfd.conf.sample.in b/nfd.conf.sample.in
index 960c59c..ac3f617 100644
--- a/nfd.conf.sample.in
+++ b/nfd.conf.sample.in
@@ -42,6 +42,15 @@
   ; Forwarder INFO
 }
 
+; The tables section configures the CS, PIT, FIB, Strategy Choice, and Measurements
+tables
+{
+
+  ; ContentStore size limit in number of packets
+  ; default is 65536, about 500MB with 8KB packet size
+  cs_max_packets 65536
+}
+
 ; The face_system section defines what faces and channels are created.
 face_system
 {
diff --git a/tests/daemon/mgmt/tables-config-section.cpp b/tests/daemon/mgmt/tables-config-section.cpp
new file mode 100644
index 0000000..d27321f
--- /dev/null
+++ b/tests/daemon/mgmt/tables-config-section.cpp
@@ -0,0 +1,152 @@
+/* -*- 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
+ *
+ * This file is part of NFD (Named Data Networking Forwarding Daemon).
+ * See AUTHORS.md for complete list of NFD authors and contributors.
+ *
+ * NFD 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.
+ *
+ * NFD 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
+ * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "mgmt/tables-config-section.hpp"
+#include "fw/forwarder.hpp"
+
+
+#include "tests/test-common.hpp"
+
+namespace nfd {
+namespace tests {
+
+class TablesConfigSectionFixture : protected BaseFixture
+{
+public:
+
+  TablesConfigSectionFixture()
+    : m_cs(m_forwarder.getCs())
+    , m_pit(m_forwarder.getPit())
+    , m_fib(m_forwarder.getFib())
+    , m_strategyChoice(m_forwarder.getStrategyChoice())
+    , m_measurements(m_forwarder.getMeasurements())
+    , m_tablesConfig(m_cs, m_pit, m_fib, m_strategyChoice, m_measurements)
+  {
+    m_tablesConfig.setConfigFile(m_config);
+  }
+
+  void
+  runConfig(const std::string& CONFIG, bool isDryRun)
+  {
+    m_config.parse(CONFIG, isDryRun, "dummy-config");
+  }
+
+  bool
+  validateException(const ConfigFile::Error& exception, const std::string& expectedMsg)
+  {
+    return exception.what() == expectedMsg;
+  }
+
+protected:
+  Forwarder m_forwarder;
+
+  Cs& m_cs;
+  Pit& m_pit;
+  Fib& m_fib;
+  StrategyChoice& m_strategyChoice;
+  Measurements& m_measurements;
+
+  TablesConfigSection m_tablesConfig;
+  ConfigFile m_config;
+
+};
+
+BOOST_FIXTURE_TEST_SUITE(TestTableConfigSection, TablesConfigSectionFixture)
+
+BOOST_AUTO_TEST_CASE(EmptyTablesSection)
+{
+  const std::string CONFIG =
+    "tables\n"
+    "{\n"
+    "}\n";
+
+  const size_t nCsMaxPackets = m_cs.getLimit();
+
+  BOOST_REQUIRE_NO_THROW(runConfig(CONFIG, true));
+
+  BOOST_CHECK_EQUAL(m_cs.getLimit(), nCsMaxPackets);
+
+  BOOST_REQUIRE_NO_THROW(runConfig(CONFIG, false));
+
+  BOOST_CHECK_EQUAL(m_cs.getLimit(), nCsMaxPackets);
+}
+
+BOOST_AUTO_TEST_CASE(ValidCsMaxPackets)
+{
+  const std::string CONFIG =
+    "tables\n"
+    "{\n"
+    "  cs_max_packets 101\n"
+    "}\n";
+
+  BOOST_REQUIRE_NE(m_cs.getLimit(), 101);
+
+  BOOST_REQUIRE_NO_THROW(runConfig(CONFIG, true));
+
+  BOOST_CHECK_NE(m_cs.getLimit(), 101);
+
+  BOOST_REQUIRE_NO_THROW(runConfig(CONFIG, false));
+
+  BOOST_CHECK_EQUAL(m_cs.getLimit(), 101);
+}
+
+BOOST_AUTO_TEST_CASE(MissingValueCsMaxPackets)
+{
+  const std::string CONFIG =
+    "tables\n"
+    "{\n"
+    "  cs_max_packets\n"
+    "}\n";
+
+  const std::string expectedMsg =
+    "Invalid value for option \"cs_max_packets\" in \"tables\" section";
+
+  BOOST_CHECK_EXCEPTION(runConfig(CONFIG, true),
+                        ConfigFile::Error,
+                        bind(&TablesConfigSectionFixture::validateException,
+                             this, _1, expectedMsg));
+}
+
+BOOST_AUTO_TEST_CASE(InvalidValueCsMaxPackets)
+{
+  const std::string CONFIG =
+    "tables\n"
+    "{\n"
+    "  cs_max_packets invalid\n"
+    "}\n";
+
+  const std::string expectedMsg =
+    "Invalid value for option \"cs_max_packets\" in \"tables\" section";
+
+  BOOST_CHECK_EXCEPTION(runConfig(CONFIG, true),
+                        ConfigFile::Error,
+                        bind(&TablesConfigSectionFixture::validateException,
+                             this, _1, expectedMsg));
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace tests
+} // namespace nfd
diff --git a/tests/test-case.cpp.sample b/tests/test-case.cpp.sample
index 259d75f..560add2 100644
--- a/tests/test-case.cpp.sample
+++ b/tests/test-case.cpp.sample
@@ -1,11 +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
+ * 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
  *
  * This file is part of NFD (Named Data Networking Forwarding Daemon).
  * See AUTHORS.md for complete list of NFD authors and contributors.
@@ -20,7 +21,7 @@
  *
  * You should have received a copy of the GNU General Public License along with
  * NFD, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- **/
+ */
 
 // #include "unit-under-test.hpp"
 // Unit being tested MUST be included first, to ensure header compiles on its own.
