diff --git a/tools/dissect/README.md b/tools/dissect/README.md
index b0da01a..70d2458 100644
--- a/tools/dissect/README.md
+++ b/tools/dissect/README.md
@@ -1,13 +1,14 @@
 # ndn-dissect
 
 **ndn-dissect** is an NDN packet format inspector.
-It reads zero or more NDN packets from either an input file or the standard input,
-and displays the Type-Length-Value (TLV) structure of those packets on the standard output.
+It reads zero or more NDN packets from either an input file or the standard
+input, and displays the Type-Length-Value (TLV) structure of those packets
+on the standard output.
 
 Usage example:
 
-1. start NFD on local machine
-2. execute `echo 'HELLO WORLD' | ndnpoke ndn:/localhost/demo/hello`
-3. on another console, execute `ndnpeek ndn:/localhost/demo/hello | ndn-dissect`
+1. start NFD on the local machine
+2. run `echo 'HELLO WORLD' | ndnpoke /localhost/demo/hello`
+3. on another console, run `ndnpeek /localhost/demo/hello | ndn-dissect`
 
 For more information, consult the manpage.
diff --git a/tools/dissect/ndn-dissect.cpp b/tools/dissect/dissector.cpp
similarity index 92%
rename from tools/dissect/ndn-dissect.cpp
rename to tools/dissect/dissector.cpp
index d21926f..3c0ca5c 100644
--- a/tools/dissect/ndn-dissect.cpp
+++ b/tools/dissect/dissector.cpp
@@ -18,10 +18,11 @@
  *
  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
  *
- * @author Alexander Afanasyev <http://lasr.cs.ucla.edu/afanasyev/index.html>
+ * @author Alexander Afanasyev
+ * @author Davide Pesavento
  */
 
-#include "ndn-dissect.hpp"
+#include "dissector.hpp"
 
 #include <map>
 
@@ -31,14 +32,15 @@
 namespace ndn {
 namespace dissect {
 
-NdnDissect::NdnDissect(std::istream& input, std::ostream& output)
-  : m_in(input)
+Dissector::Dissector(std::istream& input, std::ostream& output, const Options& options)
+  : m_options(options)
+  , m_in(input)
   , m_out(output)
 {
 }
 
 void
-NdnDissect::dissect()
+Dissector::dissect()
 {
   size_t offset = 0;
   try {
@@ -60,7 +62,7 @@
 static const char GLYPH_SPACE[]              = "  ";
 
 void
-NdnDissect::printBranches()
+Dissector::printBranches()
 {
   for (size_t i = 0; i < m_branches.size(); ++i) {
     if (i == m_branches.size() - 1) {
@@ -114,7 +116,7 @@
 };
 
 void
-NdnDissect::printType(uint32_t type)
+Dissector::printType(uint32_t type)
 {
   m_out << type << " (";
 
@@ -139,14 +141,15 @@
 }
 
 void
-NdnDissect::printBlock(const Block& block)
+Dissector::printBlock(const Block& block)
 {
   printBranches();
   printType(block.type());
   m_out << " (size: " << block.value_size() << ")";
 
   try {
-    if (block.type() != tlv::SignatureValue) {
+    if (block.type() != tlv::SignatureValue &&
+        (block.type() != tlv::Content || m_options.dissectContent)) {
       block.parse();
     }
   }
diff --git a/tools/dissect/ndn-dissect.hpp b/tools/dissect/dissector.hpp
similarity index 81%
rename from tools/dissect/ndn-dissect.hpp
rename to tools/dissect/dissector.hpp
index 29c5e6a..e408efe 100644
--- a/tools/dissect/ndn-dissect.hpp
+++ b/tools/dissect/dissector.hpp
@@ -17,8 +17,8 @@
  * ndn-tools, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef NDN_TOOLS_DISSECT_NDN_DISSECT_HPP
-#define NDN_TOOLS_DISSECT_NDN_DISSECT_HPP
+#ifndef NDN_TOOLS_DISSECT_DISSECTOR_HPP
+#define NDN_TOOLS_DISSECT_DISSECTOR_HPP
 
 #include "core/common.hpp"
 
@@ -27,10 +27,15 @@
 namespace ndn {
 namespace dissect {
 
-class NdnDissect : noncopyable
+struct Options
+{
+  bool dissectContent = false;
+};
+
+class Dissector : noncopyable
 {
 public:
-  NdnDissect(std::istream& input, std::ostream& output);
+  Dissector(std::istream& input, std::ostream& output, const Options& options);
 
   void
   dissect();
@@ -46,6 +51,7 @@
   printBlock(const Block& block);
 
 private:
+  const Options& m_options;
   std::istream& m_in;
   std::ostream& m_out;
 
@@ -56,4 +62,4 @@
 } // namespace dissect
 } // namespace ndn
 
-#endif // NDN_TOOLS_DISSECT_NDN_DISSECT_HPP
+#endif // NDN_TOOLS_DISSECT_DISSECTOR_HPP
diff --git a/tools/dissect/main.cpp b/tools/dissect/main.cpp
index b5f2a68..bcb2339 100644
--- a/tools/dissect/main.cpp
+++ b/tools/dissect/main.cpp
@@ -17,7 +17,7 @@
  * ndn-tools, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "ndn-dissect.hpp"
+#include "dissector.hpp"
 #include "core/version.hpp"
 
 #include <boost/program_options/options_description.hpp>
@@ -42,12 +42,14 @@
 static int
 main(int argc, char* argv[])
 {
+  Options options;
   std::string inputFileName;
 
   po::options_description visibleOptions("Options");
   visibleOptions.add_options()
-    ("help,h",    "print help and exit")
-    ("version,V", "print version and exit")
+    ("help,h",    "print this help message and exit")
+    ("content,c", po::bool_switch(&options.dissectContent), "dissect the value of Content elements")
+    ("version,V", "print program version and exit")
     ;
 
   po::options_description hiddenOptions;
@@ -91,8 +93,8 @@
     inputStream = &inputFile;
   }
 
-  NdnDissect program(*inputStream, std::cout);
-  program.dissect();
+  Dissector d(*inputStream, std::cout, options);
+  d.dissect();
 
   return 0;
 }
