diff --git a/src/client-module.cpp b/src/client-module.cpp
index 8fdb7b2..46405bb 100644
--- a/src/client-module.cpp
+++ b/src/client-module.cpp
@@ -35,6 +35,8 @@
 #include "protocol-detail/new.hpp"
 #include "protocol-detail/probe.hpp"
 #include "protocol-detail/revoke.hpp"
+#include "protocol-detail/error.hpp"
+#include "ndncert-common.hpp"
 
 namespace ndn {
 namespace ndncert {
@@ -123,6 +125,9 @@
     return;
   }
 
+  // error handling
+  processIfError(reply);
+
   auto contentTLV = reply.getContent();
   contentTLV.parse();
 
@@ -217,6 +222,10 @@
     _LOG_ERROR("Cannot verify data signature from " << m_ca.m_caPrefix.toUri());
     return std::list<std::string>();
   }
+
+  // error handling
+  processIfError(reply);
+
   auto contentTLV = reply.getContent();
   contentTLV.parse();
 
@@ -300,6 +309,10 @@
     _LOG_ERROR("Cannot verify data signature from " << m_ca.m_caPrefix.toUri());
     return;
   }
+
+  // error handling
+  processIfError(reply);
+
   auto result = decodeBlockWithAesGcm128(reply.getContent(), m_aesKey, (const uint8_t*)"test", strlen("test"));
 
   Block contentTLV = makeBinaryBlock(tlv_encrypted_payload, result.data(), result.size());
@@ -373,5 +386,22 @@
   m_status = Status::ENDED;
 }
 
+void
+ClientModule::processIfError(const Data& data)
+{
+  auto contentTLV = data.getContent();
+  if (ErrorTLV::isErrorContent(contentTLV)) {
+  try {
+    auto error = ErrorTLV::decodefromDataContent(contentTLV);
+    _LOG_ERROR("Error data returned for " << data.getName() << ": " << std::endl <<
+               "Code: " << errorCodeToString(std::get<0>(error)) << std::endl <<
+               "Info: " << std::get<1>(error) << std::endl);
+    } catch (const std::exception& e) {
+      _LOG_ERROR("Cannot parse error data content for " << data.getName());
+      return;
+    }
+  }
+}
+
 }  // namespace ndncert
 }  // namespace ndn
diff --git a/src/client-module.hpp b/src/client-module.hpp
index fd88129..b9c0f35 100644
--- a/src/client-module.hpp
+++ b/src/client-module.hpp
@@ -117,6 +117,9 @@
   void
   endSession();
 
+  static void
+  processIfError(const Data& data);
+
 PUBLIC_WITH_TESTS_ELSE_PRIVATE:
   ClientConfig m_config;
   security::v2::KeyChain& m_keyChain;
diff --git a/src/ndncert-common.cpp b/src/ndncert-common.cpp
index 086d880..3e31596 100644
--- a/src/ndncert-common.cpp
+++ b/src/ndncert-common.cpp
@@ -62,6 +62,24 @@
   }
 }
 
+std::map<ErrorCode, std::string> errorCodeText = {
+  {ErrorCode::NO_ERROR,             "NO_ERROR"},
+  {ErrorCode::BAD_INTEREST_FORMAT,  "BAD_INTEREST_FORMAT"},
+  {ErrorCode::BAD_PARAMETER_FORMAT, "BAD_PARAMETER_FORMAT"},
+  {ErrorCode::BAD_SIGNATURE,        "BAD_SIGNATURE"},
+  {ErrorCode::INVALID_PARAMETER,    "INVALID_PARAMETER"},
+  {ErrorCode::NAME_NOT_ALLOWED,     "NAME_NOT_ALLOWED"},
+  {ErrorCode::BAD_VALIDITY_PERIOD,  "BAD_VALIDITY_PERIOD"},
+  {ErrorCode::OUT_OF_TRIES,         "OUT_OF_TRIES"},
+  {ErrorCode::OUT_OF_TIME,          "OUT_OF_TIME"},
+  {ErrorCode::NO_AVAILABLE_NAMES,   "NO_AVAILABLE_NAMES"}
+};
+
+std::string errorCodeToString(ErrorCode code)
+{
+  return errorCodeText.at(code);
+}
+
 std::string
 convertJson2String(const JsonSection& json)
 {
diff --git a/src/ndncert-common.hpp b/src/ndncert-common.hpp
index d052d62..a9165a2 100644
--- a/src/ndncert-common.hpp
+++ b/src/ndncert-common.hpp
@@ -155,6 +155,8 @@
 
 std::string requestTypeToString(RequestType type);
 
+std::string errorCodeToString(ErrorCode code);
+
 typedef boost::property_tree::ptree JsonSection;
 
 std::string
diff --git a/src/protocol-detail/error.cpp b/src/protocol-detail/error.cpp
index 739c3b7..b74180b 100644
--- a/src/protocol-detail/error.cpp
+++ b/src/protocol-detail/error.cpp
@@ -42,5 +42,12 @@
   return std::make_tuple(error, description);
 }
 
+bool
+ErrorTLV::isErrorContent(const Block& block)
+{
+  block.parse();
+  return block.find(tlv_error_code) != block.elements_end();
+}
+
 }  // namespace ndncert
 }  // namespace ndn
diff --git a/src/protocol-detail/error.hpp b/src/protocol-detail/error.hpp
index 8a2cda0..d39fe1a 100644
--- a/src/protocol-detail/error.hpp
+++ b/src/protocol-detail/error.hpp
@@ -39,6 +39,9 @@
    */
   static std::tuple<ErrorCode, std::string>
   decodefromDataContent(const Block& block);
+
+  static bool
+  isErrorContent(const Block& block);
 };
 
 }  // namespace ndncert
