diff --git a/docs/conf.py b/docs/conf.py
index f3fec93..4b0e9e1 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -246,6 +246,7 @@
     ('manpages/nfdc-status', 'nfdc-status', u'show NFD status', None, 1),
     ('manpages/nfdc-face', 'nfdc-face', u'show and manipulate NFD faces', None, 1),
     ('manpages/nfdc-route', 'nfdc-route', u'show and manipulate NFD routes', None, 1),
+    ('manpages/nfdc-cs', 'nfdc-cs', u'show and manipulate NFD Content Store', None, 1),
     ('manpages/nfdc-strategy', 'nfdc-strategy', u'show and manipulate NFD strategy choices', None, 1),
     ('manpages/nfd-status', 'nfd-status', u'comprehensive report of NFD status', None, 1),
     ('manpages/nfd-status-http-server', 'nfd-status-http-server',
diff --git a/docs/manpages/nfdc-cs.rst b/docs/manpages/nfdc-cs.rst
new file mode 100644
index 0000000..cef31b8
--- /dev/null
+++ b/docs/manpages/nfdc-cs.rst
@@ -0,0 +1,14 @@
+nfdc-cs
+===========
+
+SYNOPSIS
+--------
+| nfdc cs info
+
+DESCRIPTION
+-----------
+The **nfdc cs info** command shows CS statistics information.
+
+SEE ALSO
+--------
+nfd(1), nfdc(1)
diff --git a/docs/manpages/nfdc-status.rst b/docs/manpages/nfdc-status.rst
index cfbdec4..3a1959b 100644
--- a/docs/manpages/nfdc-status.rst
+++ b/docs/manpages/nfdc-status.rst
@@ -18,6 +18,7 @@
 - list of faces (individually available from **nfdc face list**)
 - list of FIB entries (individually available from **nfdc fib list**)
 - list of RIB entries (individually available from **nfdc route list**)
+- CS statistics information (individually available from **nfdc cs info**)
 - list of strategy choices (individually available from **nfdc strategy list**)
 
 OPTIONS
diff --git a/docs/manpages/nfdc.rst b/docs/manpages/nfdc.rst
index 406bf35..79140d6 100644
--- a/docs/manpages/nfdc.rst
+++ b/docs/manpages/nfdc.rst
@@ -45,4 +45,4 @@
 
 SEE ALSO
 --------
-nfdc-status(1), nfdc-face(1), nfdc-route(1), nfdc-strategy(1)
+nfdc-status(1), nfdc-face(1), nfdc-route(1), nfdc-cs(1), nfdc-strategy(1)
diff --git a/tests/tools/nfdc/cs-module.t.cpp b/tests/tools/nfdc/cs-module.t.cpp
new file mode 100644
index 0000000..29a444b
--- /dev/null
+++ b/tests/tools/nfdc/cs-module.t.cpp
@@ -0,0 +1,71 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014-2018,  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 "nfdc/cs-module.hpp"
+
+#include "status-fixture.hpp"
+
+#include <ndn-cxx/security/signing-helpers.hpp>
+
+namespace nfd {
+namespace tools {
+namespace nfdc {
+namespace tests {
+
+BOOST_AUTO_TEST_SUITE(Nfdc)
+BOOST_FIXTURE_TEST_SUITE(TestCsModule, StatusFixture<CsModule>)
+
+const std::string STATUS_XML = stripXmlSpaces(R"XML(
+  <cs>
+    <nHits>14363</nHits>
+    <nMisses>27462</nMisses>
+  </cs>
+)XML");
+
+const std::string STATUS_TEXT = std::string(R"TEXT(
+CS information:
+  nHits=14363 nMisses=27462
+)TEXT").substr(1);
+
+BOOST_AUTO_TEST_CASE(Status)
+{
+  this->fetchStatus();
+  CsInfo payload;
+  payload.setNHits(14363)
+         .setNMisses(27462);
+  this->sendDataset("/localhost/nfd/cs/info", payload);
+  this->prepareStatusOutput();
+
+  BOOST_CHECK(statusXml.is_equal(STATUS_XML));
+  BOOST_CHECK(statusText.is_equal(STATUS_TEXT));
+}
+
+BOOST_AUTO_TEST_SUITE_END() // TestCsModule
+BOOST_AUTO_TEST_SUITE_END() // Nfdc
+
+} // namespace tests
+} // namespace nfdc
+} // namespace tools
+} // namespace nfd
diff --git a/tools/nfd-status-http-server-files/nfd-status.xsl b/tools/nfd-status-http-server-files/nfd-status.xsl
index 843e4f2..d9b8885 100644
--- a/tools/nfd-status-http-server-files/nfd-status.xsl
+++ b/tools/nfd-status-http-server-files/nfd-status.xsl
@@ -336,6 +336,24 @@
   </table>
 </xsl:template>
 
+<xsl:template match="nfd:cs">
+  <h2>CS Information</h2>
+  <table class="item-list">
+    <thead>
+      <tr>
+        <th>Hits</th>
+        <th>Misses</th>
+      </tr>
+    </thead>
+    <tbody>
+      <tr class="center">
+        <td><xsl:value-of select="nfd:nHits"/></td>
+        <td><xsl:value-of select="nfd:nMisses"/></td>
+      </tr>
+    </tbody>
+  </table>
+</xsl:template>
+
 <xsl:template match="nfd:strategyChoices">
   <h2>Strategy Choices</h2>
   <table class="item-list">
diff --git a/tools/nfdc/cs-module.cpp b/tools/nfdc/cs-module.cpp
new file mode 100644
index 0000000..975fd99
--- /dev/null
+++ b/tools/nfdc/cs-module.cpp
@@ -0,0 +1,69 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014-2018,  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 "cs-module.hpp"
+#include "format-helpers.hpp"
+
+namespace nfd {
+namespace tools {
+namespace nfdc {
+
+void
+CsModule::fetchStatus(Controller& controller,
+                      const function<void()>& onSuccess,
+                      const Controller::DatasetFailCallback& onFailure,
+                      const CommandOptions& options)
+{
+  controller.fetch<ndn::nfd::CsInfoDataset>(
+    [this, onSuccess] (const CsInfo& result) {
+      m_status = result;
+      onSuccess();
+    },
+    onFailure, options);
+}
+
+void
+CsModule::formatStatusXml(std::ostream& os) const
+{
+  os << "<cs>";
+  os << "<nHits>" << m_status.getNHits() << "</nHits>";
+  os << "<nMisses>" << m_status.getNMisses() << "</nMisses>";
+  os << "</cs>";
+}
+
+void
+CsModule::formatStatusText(std::ostream& os) const
+{
+  os << "CS information:\n  ";
+  text::ItemAttributes ia;
+  os << ia("nHits") << m_status.getNHits()
+     << ia("nMisses") << m_status.getNMisses()
+     << ia.end();
+  os << '\n';
+}
+
+} // namespace nfdc
+} // namespace tools
+} // namespace nfd
diff --git a/tools/nfdc/cs-module.hpp b/tools/nfdc/cs-module.hpp
new file mode 100644
index 0000000..143b3e4
--- /dev/null
+++ b/tools/nfdc/cs-module.hpp
@@ -0,0 +1,63 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014-2018,  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_TOOLS_NFDC_CS_MODULE_HPP
+#define NFD_TOOLS_NFDC_CS_MODULE_HPP
+
+#include "module.hpp"
+
+namespace nfd {
+namespace tools {
+namespace nfdc {
+
+using ndn::nfd::CsInfo;
+
+/** \brief provides access to NFD CS management
+ *  \sa https://redmine.named-data.net/projects/nfd/wiki/CsMgmt
+ */
+class CsModule : public Module, noncopyable
+{
+public:
+  void
+  fetchStatus(Controller& controller,
+              const function<void()>& onSuccess,
+              const Controller::DatasetFailCallback& onFailure,
+              const CommandOptions& options) override;
+
+  void
+  formatStatusXml(std::ostream& os) const override;
+
+  void
+  formatStatusText(std::ostream& os) const override;
+
+private:
+  CsInfo m_status;
+};
+
+} // namespace nfdc
+} // namespace tools
+} // namespace nfd
+
+#endif // NFD_TOOLS_NFDC_CS_MODULE_HPP
diff --git a/tools/nfdc/status.cpp b/tools/nfdc/status.cpp
index 01222c8..495a21e 100644
--- a/tools/nfdc/status.cpp
+++ b/tools/nfdc/status.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2014-2017,  Regents of the University of California,
+ * Copyright (c) 2014-2018,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -29,6 +29,7 @@
 #include "face-module.hpp"
 #include "fib-module.hpp"
 #include "rib-module.hpp"
+#include "cs-module.hpp"
 #include "strategy-choice-module.hpp"
 
 #include <ndn-cxx/security/validator-null.hpp>
@@ -62,6 +63,10 @@
     report.sections.push_back(make_unique<RibModule>());
   }
 
+  if (options.wantCs) {
+    report.sections.push_back(make_unique<CsModule>());
+  }
+
   if (options.wantStrategyChoice) {
     report.sections.push_back(make_unique<StrategyChoiceModule>());
   }
@@ -106,8 +111,8 @@
 {
   StatusReportOptions options;
   options.output = ctx.args.get<ReportFormat>("format", ReportFormat::TEXT);
-  options.wantForwarderGeneral = options.wantChannels = options.wantFaces =
-    options.wantFib = options.wantRib = options.wantStrategyChoice = true;
+  options.wantForwarderGeneral = options.wantChannels = options.wantFaces = options.wantFib =
+    options.wantRib = options.wantCs = options.wantStrategyChoice = true;
   reportStatus(ctx, options);
 }
 
@@ -135,6 +140,11 @@
   defFibList
     .setTitle("print FIB entries");
   parser.addCommand(defFibList, bind(&reportStatusSingleSection, _1, &StatusReportOptions::wantFib));
+
+  CommandDefinition defCsInfo("cs", "info");
+  defCsInfo
+    .setTitle("print CS information");
+  parser.addCommand(defCsInfo, bind(&reportStatusSingleSection, _1, &StatusReportOptions::wantCs));
 }
 
 } // namespace nfdc
diff --git a/tools/nfdc/status.hpp b/tools/nfdc/status.hpp
index 57dac50..b5d2e94 100644
--- a/tools/nfdc/status.hpp
+++ b/tools/nfdc/status.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2014-2017,  Regents of the University of California,
+/*
+ * Copyright (c) 2014-2018,  Regents of the University of California,
  *                           Arizona Board of Regents,
  *                           Colorado State University,
  *                           University Pierre & Marie Curie, Sorbonne University,
@@ -41,6 +41,7 @@
   bool wantFaces = false;
   bool wantFib = false;
   bool wantRib = false;
+  bool wantCs = false;
   bool wantStrategyChoice = false;
 };
 
