diff --git a/src/ca-module.cpp b/src/ca-module.cpp
index 5481b2b..a6b0f7d 100644
--- a/src/ca-module.cpp
+++ b/src/ca-module.cpp
@@ -19,14 +19,14 @@
  */
 
 #include "ca-module.hpp"
-#include "protocol-detail/enc-tlv.hpp"
+#include "detail/enc-tlv.hpp"
 #include "identity-challenge/challenge-module.hpp"
 #include "name-assignments/assignment-funcs.hpp"
-#include "protocol-detail/challenge.hpp"
-#include "protocol-detail/error.hpp"
-#include "protocol-detail/info.hpp"
-#include "protocol-detail/new-renew-revoke.hpp"
-#include "protocol-detail/probe.hpp"
+#include "detail/challenge-encoder.hpp"
+#include "detail/error-encoder.hpp"
+#include "detail/info-encoder.hpp"
+#include "detail/new-renew-revoke-encoder.hpp"
+#include "detail/probe-encoder.hpp"
 #include <ndn-cxx/metadata-object.hpp>
 #include <ndn-cxx/security/signing-helpers.hpp>
 #include <ndn-cxx/security/verification-helpers.hpp>
@@ -121,7 +121,7 @@
     const auto& pib = m_keyChain.getPib();
     const auto& identity = pib.getIdentity(m_config.m_caItem.m_caPrefix);
     const auto& cert = identity.getDefaultKey().getDefaultCertificate();
-    Block contentTLV = INFO::encodeDataContent(m_config.m_caItem, cert);
+    Block contentTLV = InfoEncoder::encodeDataContent(m_config.m_caItem, cert);
 
     Name infoPacketName(m_config.m_caItem.m_caPrefix);
     infoPacketName.append("CA").append("INFO").appendVersion().appendSegment(0);
@@ -155,7 +155,7 @@
   NDN_LOG_TRACE("Received PROBE request");
 
   // process PROBE requests: collect probe parameters
-  auto parameters = PROBE::decodeApplicationParameters(request.getApplicationParameters());
+  auto parameters = ProbeEncoder::decodeApplicationParameters(request.getApplicationParameters());
   std::vector<PartialName> availableComponents;
   for (auto& item : m_config.m_nameAssignmentFuncs) {
     auto names = item->assignName(parameters);
@@ -175,7 +175,7 @@
 
   Data result;
   result.setName(request.getName());
-  result.setContent(PROBE::encodeDataContent(availableNames, m_config.m_caItem.m_maxSuffixLength, m_config.m_redirection));
+  result.setContent(ProbeEncoder::encodeDataContent(availableNames, m_config.m_caItem.m_maxSuffixLength, m_config.m_redirection));
   result.setFreshnessPeriod(DEFAULT_DATA_FRESHNESS_PERIOD);
   m_keyChain.sign(result, signingByIdentity(m_config.m_caItem.m_caPrefix));
   m_face.put(result);
@@ -192,7 +192,7 @@
   std::string ecdhPub;
   shared_ptr<security::Certificate> clientCert;
   try {
-    NEW_RENEW_REVOKE::decodeApplicationParameters(parameterTLV, requestType, ecdhPub, clientCert);
+    NewRenewRevokeEncoder::decodeApplicationParameters(parameterTLV, requestType, ecdhPub, clientCert);
   }
   catch (const std::exception& e) {
     if (!parameterTLV.hasValue()) {
@@ -295,7 +295,7 @@
   hmac_sha256(certNameTlv.wire(), certNameTlv.size(), m_requestIdGenKey, 32, requestIdData);
   CaState requestState(m_config.m_caItem.m_caPrefix, toHex(requestIdData, 32),
                        requestType, Status::BEFORE_CHALLENGE, *clientCert,
-                       makeBinaryBlock(tlv::ContentType_Key, aesKey, sizeof(aesKey)));
+                       makeBinaryBlock(ndn::tlv::ContentType_Key, aesKey, sizeof(aesKey)));
   try {
     m_storage->addRequest(requestState);
   }
@@ -308,7 +308,7 @@
   Data result;
   result.setName(request.getName());
   result.setFreshnessPeriod(DEFAULT_DATA_FRESHNESS_PERIOD);
-  result.setContent(NEW_RENEW_REVOKE::encodeDataContent(myEcdhPubKeyBase64,
+  result.setContent(NewRenewRevokeEncoder::encodeDataContent(myEcdhPubKeyBase64,
                                                         std::to_string(saltInt),
                                                         requestState,
                                                         m_config.m_caItem.m_supportedChallenges));
@@ -387,7 +387,7 @@
       requestState.m_status = Status::SUCCESS;
       m_storage->deleteRequest(requestState.m_requestId);
 
-      payload = CHALLENGE::encodeDataContent(requestState);
+      payload = ChallengeEncoder::encodeDataContent(requestState);
       payload.parse();
       payload.push_back(makeNestedBlock(tlv::IssuedCertName, issuedCert.getName()));
       payload.encode();
@@ -397,20 +397,20 @@
       requestState.m_status = Status::SUCCESS;
       m_storage->deleteRequest(requestState.m_requestId);
 
-      payload = CHALLENGE::encodeDataContent(requestState);
+      payload = ChallengeEncoder::encodeDataContent(requestState);
       NDN_LOG_TRACE("Challenge succeeded. Certificate has been revoked");
     }
   }
   else {
     m_storage->updateRequest(requestState);
-    payload = CHALLENGE::encodeDataContent(requestState);
+    payload = ChallengeEncoder::encodeDataContent(requestState);
     NDN_LOG_TRACE("No failure no success. Challenge moves on");
   }
 
   Data result;
   result.setName(request.getName());
   result.setFreshnessPeriod(DEFAULT_DATA_FRESHNESS_PERIOD);
-  auto contentBlock = encodeBlockWithAesGcm128(tlv::Content, requestState.m_encryptionKey.value(), payload.value(),
+  auto contentBlock = encodeBlockWithAesGcm128(ndn::tlv::Content, requestState.m_encryptionKey.value(), payload.value(),
                                                payload.value_size(), (uint8_t*)"test", strlen("test"));
   result.setContent(contentBlock);
   m_keyChain.sign(result, signingByIdentity(m_config.m_caItem.m_caPrefix));
@@ -476,7 +476,7 @@
   Data result;
   result.setName(name);
   result.setFreshnessPeriod(DEFAULT_DATA_FRESHNESS_PERIOD);
-  result.setContent(ErrorTLV::encodeDataContent(error, errorInfo));
+  result.setContent(ErrorEncoder::encodeDataContent(error, errorInfo));
   m_keyChain.sign(result, signingByIdentity(m_config.m_caItem.m_caPrefix));
   return result;
 }
diff --git a/src/ca-module.hpp b/src/ca-module.hpp
index 3fb79cb..118a85e 100644
--- a/src/ca-module.hpp
+++ b/src/ca-module.hpp
@@ -22,7 +22,7 @@
 #define NDNCERT_CA_MODULE_HPP
 
 #include "configuration.hpp"
-#include "protocol-detail/crypto-helper.hpp"
+#include "detail/crypto-helper.hpp"
 #include "ca-detail/ca-storage.hpp"
 
 namespace ndn {
diff --git a/src/ca-state.hpp b/src/ca-state.hpp
index 4c99185..2204f1c 100644
--- a/src/ca-state.hpp
+++ b/src/ca-state.hpp
@@ -21,7 +21,7 @@
 #ifndef NDNCERT_CA_STATE_HPP
 #define NDNCERT_CA_STATE_HPP
 
-#include "protocol-detail/ndncert-common.hpp"
+#include "detail/ndncert-common.hpp"
 
 namespace ndn {
 namespace ndncert {
diff --git a/src/protocol-detail/challenge.cpp b/src/detail/challenge-encoder.cpp
similarity index 92%
rename from src/protocol-detail/challenge.cpp
rename to src/detail/challenge-encoder.cpp
index d49ca4e..658cbd8 100644
--- a/src/protocol-detail/challenge.cpp
+++ b/src/detail/challenge-encoder.cpp
@@ -18,13 +18,13 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#include "challenge.hpp"
+#include "challenge-encoder.hpp"
 
 namespace ndn {
 namespace ndncert {
 
 Block
-CHALLENGE::encodeDataContent(const CaState& request)
+ChallengeEncoder::encodeDataContent(const CaState& request)
 {
   Block response = makeEmptyBlock(tlv::EncryptedPayload);
   response.push_back(makeNonNegativeIntegerBlock(tlv::Status, static_cast<size_t>(request.m_status)));
@@ -40,7 +40,7 @@
 }
 
 void
-CHALLENGE::decodeDataContent(const Block& data, RequesterState& state)
+ChallengeEncoder::decodeDataContent(const Block& data, RequesterState& state)
 {
   data.parse();
   state.m_status = static_cast<Status>(readNonNegativeInteger(data.get(tlv::Status)));
diff --git a/src/protocol-detail/challenge.hpp b/src/detail/challenge-encoder.hpp
similarity index 88%
rename from src/protocol-detail/challenge.hpp
rename to src/detail/challenge-encoder.hpp
index 7d78009..f66d9cb 100644
--- a/src/protocol-detail/challenge.hpp
+++ b/src/detail/challenge-encoder.hpp
@@ -18,8 +18,8 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#ifndef NDNCERT_PROTOCOL_DETAIL_CHALLENGE_HPP
-#define NDNCERT_PROTOCOL_DETAIL_CHALLENGE_HPP
+#ifndef NDNCERT_DETAIL_CHALLENGE_STEP_HPP
+#define NDNCERT_DETAIL_CHALLENGE_STEP_HPP
 
 #include "../ca-state.hpp"
 #include "../requester-state.hpp"
@@ -27,7 +27,7 @@
 namespace ndn {
 namespace ndncert {
 
-class CHALLENGE
+class ChallengeEncoder
 {
 public:
   static Block
@@ -40,4 +40,4 @@
 } // namespace ndncert
 } // namespace ndn
 
-#endif // NDNCERT_PROTOCOL_DETAIL_HPP
\ No newline at end of file
+#endif // NDNCERT_DETAIL_CHALLENGE_STEP_HPP
\ No newline at end of file
diff --git a/src/protocol-detail/crypto-helper.cpp b/src/detail/crypto-helper.cpp
similarity index 100%
rename from src/protocol-detail/crypto-helper.cpp
rename to src/detail/crypto-helper.cpp
diff --git a/src/protocol-detail/crypto-helper.hpp b/src/detail/crypto-helper.hpp
similarity index 100%
rename from src/protocol-detail/crypto-helper.hpp
rename to src/detail/crypto-helper.hpp
diff --git a/src/protocol-detail/enc-tlv.cpp b/src/detail/enc-tlv.cpp
similarity index 100%
rename from src/protocol-detail/enc-tlv.cpp
rename to src/detail/enc-tlv.cpp
diff --git a/src/protocol-detail/enc-tlv.hpp b/src/detail/enc-tlv.hpp
similarity index 100%
rename from src/protocol-detail/enc-tlv.hpp
rename to src/detail/enc-tlv.hpp
diff --git a/src/protocol-detail/error.cpp b/src/detail/error-encoder.cpp
similarity index 87%
rename from src/protocol-detail/error.cpp
rename to src/detail/error-encoder.cpp
index 266e4e6..84b7866 100644
--- a/src/protocol-detail/error.cpp
+++ b/src/detail/error-encoder.cpp
@@ -18,15 +18,15 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#include "error.hpp"
+#include "error-encoder.hpp"
 
 namespace ndn {
 namespace ndncert {
 
 Block
-ErrorTLV::encodeDataContent(ErrorCode errorCode, const std::string& description)
+ErrorEncoder::encodeDataContent(ErrorCode errorCode, const std::string& description)
 {
-  Block response = makeEmptyBlock(tlv::Content);
+  Block response = makeEmptyBlock(ndn::tlv::Content);
   response.push_back(makeNonNegativeIntegerBlock(tlv::ErrorCode, static_cast<size_t>(errorCode)));
   response.push_back(makeStringBlock(tlv::ErrorInfo, description));
   response.encode();
@@ -34,7 +34,7 @@
 }
 
 std::tuple<ErrorCode, std::string>
-ErrorTLV::decodefromDataContent(const Block& block)
+ErrorEncoder::decodefromDataContent(const Block& block)
 {
   block.parse();
   if (block.find(tlv::ErrorCode) == block.elements_end()) {
diff --git a/src/protocol-detail/error.hpp b/src/detail/error-encoder.hpp
similarity index 90%
rename from src/protocol-detail/error.hpp
rename to src/detail/error-encoder.hpp
index ae3a027..ade9fb3 100644
--- a/src/protocol-detail/error.hpp
+++ b/src/detail/error-encoder.hpp
@@ -18,15 +18,15 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#ifndef NDNCERT_PROTOCOL_DETAIL_ERROR_HPP
-#define NDNCERT_PROTOCOL_DETAIL_ERROR_HPP
+#ifndef NDNCERT_DETAIL_ERROR_ENCODER_HPP
+#define NDNCERT_DETAIL_ERROR_ENCODER_HPP
 
 #include "../configuration.hpp"
 
 namespace ndn {
 namespace ndncert {
 
-class ErrorTLV
+class ErrorEncoder
 {
 public:
   /**
@@ -45,4 +45,4 @@
 } // namespace ndncert
 } // namespace ndn
 
-#endif // NDNCERT_PROTOCOL_ERROR_HPP
\ No newline at end of file
+#endif // NDNCERT_DETAIL_ERROR_ENCODER_HPP
\ No newline at end of file
diff --git a/src/protocol-detail/info.cpp b/src/detail/info-encoder.cpp
similarity index 87%
rename from src/protocol-detail/info.cpp
rename to src/detail/info-encoder.cpp
index beef51d..7939526 100644
--- a/src/protocol-detail/info.cpp
+++ b/src/detail/info-encoder.cpp
@@ -18,15 +18,15 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#include "info.hpp"
+#include "info-encoder.hpp"
 
 namespace ndn {
 namespace ndncert {
 
 Block
-INFO::encodeDataContent(const CaProfile& caConfig, const security::Certificate& certificate)
+InfoEncoder::encodeDataContent(const CaProfile& caConfig, const security::Certificate& certificate)
 {
-  auto content = makeEmptyBlock(tlv::Content);
+  auto content = makeEmptyBlock(ndn::tlv::Content);
   content.push_back(makeNestedBlock(tlv::CaPrefix, caConfig.m_caPrefix));
   std::string caInfo = "";
   if (caConfig.m_caInfo == "") {
@@ -46,7 +46,7 @@
 }
 
 CaProfile
-INFO::decodeDataContent(const Block& block)
+InfoEncoder::decodeDataContent(const Block& block)
 {
   CaProfile result;
   block.parse();
@@ -54,7 +54,7 @@
     switch (item.type()) {
     case tlv::CaPrefix:
       item.parse();
-      result.m_caPrefix.wireDecode(item.get(tlv::Name));
+      result.m_caPrefix.wireDecode(item.get(ndn::tlv::Name));
       break;
     case tlv::CaInfo:
       result.m_caInfo = readString(item);
@@ -67,7 +67,7 @@
       break;
     case tlv::CaCertificate:
       item.parse();
-      result.m_cert = std::make_shared<security::Certificate>(item.get(tlv::Data));
+      result.m_cert = std::make_shared<security::Certificate>(item.get(ndn::tlv::Data));
       break;
     default:
       continue;
diff --git a/src/protocol-detail/info.hpp b/src/detail/info-encoder.hpp
similarity index 90%
rename from src/protocol-detail/info.hpp
rename to src/detail/info-encoder.hpp
index 67a38bf..8c3ed09 100644
--- a/src/protocol-detail/info.hpp
+++ b/src/detail/info-encoder.hpp
@@ -18,15 +18,15 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#ifndef NDNCERT_PROTOCOL_DETAIL_INFO_HPP
-#define NDNCERT_PROTOCOL_DETAIL_INFO_HPP
+#ifndef NDNCERT_DETAIL_INFO_ENCODER_HPP
+#define NDNCERT_DETAIL_INFO_ENCODER_HPP
 
 #include "../configuration.hpp"
 
 namespace ndn {
 namespace ndncert {
 
-class INFO
+class InfoEncoder
 {
 public:
   /**
@@ -45,4 +45,4 @@
 } // namespace ndncert
 } // namespace ndn
 
-#endif // NDNCERT_PROTOCOL_DETAIL_HPP
\ No newline at end of file
+#endif // NDNCERT_DETAIL_INFO_ENCODER_HPP
\ No newline at end of file
diff --git a/src/protocol-detail/ndncert-common.cpp b/src/detail/ndncert-common.cpp
similarity index 100%
rename from src/protocol-detail/ndncert-common.cpp
rename to src/detail/ndncert-common.cpp
diff --git a/src/protocol-detail/ndncert-common.hpp b/src/detail/ndncert-common.hpp
similarity index 81%
rename from src/protocol-detail/ndncert-common.hpp
rename to src/detail/ndncert-common.hpp
index cf19bb9..5805f74 100644
--- a/src/protocol-detail/ndncert-common.hpp
+++ b/src/detail/ndncert-common.hpp
@@ -58,38 +58,41 @@
 #include <boost/property_tree/ptree.hpp>
 
 namespace ndn {
-namespace tlv {
-  enum : uint32_t {
-    CaPrefix = 129,
-    CaInfo = 131,
-    ParameterKey = 133,
-    ParameterValue = 135,
-    CaCertificate = 137,
-    MaxValidityPeriod = 139,
-    ProbeResponse = 141,
-    MaxSuffixLength = 143,
-    EcdhPub = 145,
-    CertRequest = 147,
-    Salt = 149,
-    RequestId = 151,
-    Challenge = 153,
-    Status = 155,
-    InitializationVector = 157,
-    EncryptedPayload = 159,
-    SelectedChallenge = 161,
-    ChallengeStatus = 163,
-    RemainingTries = 165,
-    RemainingTime = 167,
-    IssuedCertName = 169,
-    ErrorCode = 171,
-    ErrorInfo = 173,
-    AuthenticationTag = 175,
-    CertToRevoke = 177,
-    ProbeRedirect = 179
- };
-} // namespace tlv
 namespace ndncert {
 
+namespace tlv {
+
+enum : uint32_t {
+  CaPrefix = 129,
+  CaInfo = 131,
+  ParameterKey = 133,
+  ParameterValue = 135,
+  CaCertificate = 137,
+  MaxValidityPeriod = 139,
+  ProbeResponse = 141,
+  MaxSuffixLength = 143,
+  EcdhPub = 145,
+  CertRequest = 147,
+  Salt = 149,
+  RequestId = 151,
+  Challenge = 153,
+  Status = 155,
+  InitializationVector = 157,
+  EncryptedPayload = 159,
+  SelectedChallenge = 161,
+  ChallengeStatus = 163,
+  RemainingTries = 165,
+  RemainingTime = 167,
+  IssuedCertName = 169,
+  ErrorCode = 171,
+  ErrorInfo = 173,
+  AuthenticationTag = 175,
+  CertToRevoke = 177,
+  ProbeRedirect = 179
+};
+
+} // namespace tlv
+
 using boost::noncopyable;
 typedef boost::property_tree::ptree JsonSection;
 
diff --git a/src/protocol-detail/new-renew-revoke.cpp b/src/detail/new-renew-revoke-encoder.cpp
similarity index 84%
rename from src/protocol-detail/new-renew-revoke.cpp
rename to src/detail/new-renew-revoke-encoder.cpp
index 8c2921e..3afe2ad 100644
--- a/src/protocol-detail/new-renew-revoke.cpp
+++ b/src/detail/new-renew-revoke-encoder.cpp
@@ -18,12 +18,10 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#include "new-renew-revoke.hpp"
-#include "ndncert-common.hpp"
+#include "new-renew-revoke-encoder.hpp"
 #include <ndn-cxx/security/transform/base64-encode.hpp>
 #include <ndn-cxx/security/transform/buffer-source.hpp>
 #include <ndn-cxx/security/transform/stream-sink.hpp>
-#include <ndn-cxx/util/logger.hpp>
 
 namespace ndn {
 namespace ndncert {
@@ -31,9 +29,9 @@
 NDN_LOG_INIT(ndncert.encoding.new_renew_revoke);
 
 Block
-NEW_RENEW_REVOKE::encodeApplicationParameters(RequestType requestType, const std::string& ecdhPub, const security::Certificate& certRequest)
+NewRenewRevokeEncoder::encodeApplicationParameters(RequestType requestType, const std::string& ecdhPub, const security::Certificate& certRequest)
 {
-  Block request = makeEmptyBlock(tlv::ApplicationParameters);
+  Block request = makeEmptyBlock(ndn::tlv::ApplicationParameters);
   std::stringstream ss;
   try {
     security::transform::bufferSource(certRequest.wireEncode().wire(), certRequest.wireEncode().size())
@@ -56,7 +54,7 @@
 }
 
 void
-NEW_RENEW_REVOKE::decodeApplicationParameters(const Block& payload, RequestType requestType, std::string& ecdhPub,
+NewRenewRevokeEncoder::decodeApplicationParameters(const Block& payload, RequestType requestType, std::string& ecdhPub,
                                               shared_ptr<security::Certificate>& clientCert) {
   payload.parse();
 
@@ -70,16 +68,16 @@
   }
   requestPayload.parse();
 
-  security::Certificate cert = security::Certificate(requestPayload.get(tlv::Data));
+  security::Certificate cert = security::Certificate(requestPayload.get(ndn::tlv::Data));
   clientCert =std::make_shared<security::Certificate>(cert);
 }
 
 Block
-NEW_RENEW_REVOKE::encodeDataContent(const std::string& ecdhKey, const std::string& salt,
+NewRenewRevokeEncoder::encodeDataContent(const std::string& ecdhKey, const std::string& salt,
                                     const CaState& request,
                                     const std::list<std::string>& challenges)
 {
-  Block response = makeEmptyBlock(tlv::Content);
+  Block response = makeEmptyBlock(ndn::tlv::Content);
   response.push_back(makeStringBlock(tlv::EcdhPub, ecdhKey));
   response.push_back(makeStringBlock(tlv::Salt, salt));
   response.push_back(makeStringBlock(tlv::RequestId, request.m_requestId));
@@ -91,8 +89,8 @@
   return response;
 }
 
-NEW_RENEW_REVOKE::DecodedData
-NEW_RENEW_REVOKE::decodeDataContent(const Block& content)
+NewRenewRevokeEncoder::DecodedData
+NewRenewRevokeEncoder::decodeDataContent(const Block& content)
 {
   content.parse();
   const auto& ecdhKey = readString(content.get(tlv::EcdhPub));
diff --git a/src/protocol-detail/new-renew-revoke.hpp b/src/detail/new-renew-revoke-encoder.hpp
similarity index 90%
rename from src/protocol-detail/new-renew-revoke.hpp
rename to src/detail/new-renew-revoke-encoder.hpp
index 53d60ac..075114f 100644
--- a/src/protocol-detail/new-renew-revoke.hpp
+++ b/src/detail/new-renew-revoke-encoder.hpp
@@ -18,15 +18,15 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#ifndef NDNCERT_PROTOCOL_DETAIL_NEW_RENEW_REVOKE_HPP
-#define NDNCERT_PROTOCOL_DETAIL_NEW_RENEW_REVOKE_HPP
+#ifndef NDNCERT_DETAIL_NEW_RENEW_REVOKE_ENCODER_HPP
+#define NDNCERT_DETAIL_NEW_RENEW_REVOKE_ENCODER_HPP
 
 #include "../ca-state.hpp"
 
 namespace ndn {
 namespace ndncert {
 
-class NEW_RENEW_REVOKE
+class NewRenewRevokeEncoder
 {
 public:
   static Block
@@ -53,4 +53,4 @@
 } // namespace ndncert
 } // namespace ndn
 
-#endif // NDNCERT_PROTOCOL_DETAIL_NEW_RENEW_REVOKE_HPP
\ No newline at end of file
+#endif // NDNCERT_DETAIL_NEW_RENEW_REVOKE_HPP
\ No newline at end of file
diff --git a/src/protocol-detail/probe.cpp b/src/detail/probe-encoder.cpp
similarity index 85%
rename from src/protocol-detail/probe.cpp
rename to src/detail/probe-encoder.cpp
index 3426145..ce3c3fe 100644
--- a/src/protocol-detail/probe.cpp
+++ b/src/detail/probe-encoder.cpp
@@ -18,15 +18,15 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#include "probe.hpp"
+#include "probe-encoder.hpp"
 
 namespace ndn {
 namespace ndncert {
 
 Block
-PROBE::encodeApplicationParameters(std::vector<std::tuple<std::string, std::string>>&& parameters)
+ProbeEncoder::encodeApplicationParameters(std::vector<std::tuple<std::string, std::string>>&& parameters)
 {
-  auto content = makeEmptyBlock(tlv::ApplicationParameters);
+  auto content = makeEmptyBlock(ndn::tlv::ApplicationParameters);
   for (size_t i = 0; i < parameters.size(); ++i) {
     content.push_back(makeStringBlock(tlv::ParameterKey, std::get<0>(parameters[i])));
     content.push_back(makeStringBlock(tlv::ParameterValue, std::get<1>(parameters[i])));
@@ -36,7 +36,7 @@
 }
 
 std::vector<std::tuple<std::string, std::string>>
-PROBE::decodeApplicationParameters(const Block& block)
+ProbeEncoder::decodeApplicationParameters(const Block& block)
 {
   std::vector<std::tuple<std::string, std::string>> result;
   block.parse();
@@ -49,10 +49,10 @@
 }
 
 Block
-PROBE::encodeDataContent(const std::vector<Name>& identifiers, boost::optional<size_t> maxSuffixLength,
+ProbeEncoder::encodeDataContent(const std::vector<Name>& identifiers, boost::optional<size_t> maxSuffixLength,
                          boost::optional<std::vector<std::shared_ptr<security::Certificate>>> redirectionItems)
 {
-  Block content = makeEmptyBlock(tlv::Content);
+  Block content = makeEmptyBlock(ndn::tlv::Content);
   for (const auto& name : identifiers) {
     Block item(tlv::ProbeResponse);
     item.push_back(name.wireEncode());
@@ -71,7 +71,7 @@
 }
 
 void
-PROBE::decodeDataContent(const Block& block,
+ProbeEncoder::decodeDataContent(const Block& block,
                          std::vector<std::pair<Name, int>>& availableNames,
                          std::vector<Name>& availableRedirection)
 {
@@ -82,7 +82,7 @@
       Name elementName;
       int maxSuffixLength = 0;
       for (const auto& subBlock: item.elements()) {
-          if (subBlock.type() == tlv::Name) {
+          if (subBlock.type() == ndn::tlv::Name) {
               if (!elementName.empty()) {
                   NDN_THROW(std::runtime_error("Invalid probe format"));
               }
diff --git a/src/protocol-detail/probe.hpp b/src/detail/probe-encoder.hpp
similarity index 91%
rename from src/protocol-detail/probe.hpp
rename to src/detail/probe-encoder.hpp
index 52e6cb6..b56e458 100644
--- a/src/protocol-detail/probe.hpp
+++ b/src/detail/probe-encoder.hpp
@@ -18,15 +18,15 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#ifndef NDNCERT_PROTOCOL_DETAIL_PROBE_HPP
-#define NDNCERT_PROTOCOL_DETAIL_PROBE_HPP
+#ifndef NDNCERT_DETAIL_PROBE_ENCODER_HPP
+#define NDNCERT_DETAIL_PROBE_ENCODER_HPP
 
 #include "../configuration.hpp"
 
 namespace ndn {
 namespace ndncert {
 
-class PROBE
+class ProbeEncoder
 {
 public:
   // For Client use
@@ -50,4 +50,4 @@
 } // namespace ndncert
 } // namespace ndn
 
-#endif // NDNCERT_PROTOCOL_DETAIL_HPP
\ No newline at end of file
+#endif // NDNCERT_DETAIL_PROBE_ENCODER_HPP
\ No newline at end of file
diff --git a/src/requester-state.hpp b/src/requester-state.hpp
index f77b591..6e8be3d 100644
--- a/src/requester-state.hpp
+++ b/src/requester-state.hpp
@@ -21,8 +21,8 @@
 #ifndef NDNCERT_REQUESTER_STATE_HPP
 #define NDNCERT_REQUESTER_STATE_HPP
 
-#include "protocol-detail/ndncert-common.hpp"
-#include "protocol-detail/crypto-helper.hpp"
+#include "detail/ndncert-common.hpp"
+#include "detail/crypto-helper.hpp"
 #include "configuration.hpp"
 
 namespace ndn {
diff --git a/src/requester.cpp b/src/requester.cpp
index 1f67f97..632c53d 100644
--- a/src/requester.cpp
+++ b/src/requester.cpp
@@ -20,12 +20,12 @@
 
 #include "requester.hpp"
 #include "identity-challenge/challenge-module.hpp"
-#include "protocol-detail/enc-tlv.hpp"
-#include "protocol-detail/challenge.hpp"
-#include "protocol-detail/error.hpp"
-#include "protocol-detail/info.hpp"
-#include "protocol-detail/new-renew-revoke.hpp"
-#include "protocol-detail/probe.hpp"
+#include "detail/enc-tlv.hpp"
+#include "detail/challenge-encoder.hpp"
+#include "detail/error-encoder.hpp"
+#include "detail/info-encoder.hpp"
+#include "detail/new-renew-revoke-encoder.hpp"
+#include "detail/probe-encoder.hpp"
 #include <ndn-cxx/security/signing-helpers.hpp>
 #include <ndn-cxx/security/transform/base64-encode.hpp>
 #include <ndn-cxx/security/transform/buffer-source.hpp>
@@ -64,7 +64,7 @@
 boost::optional<CaProfile>
 Requester::onCaProfileResponse(const Data& reply)
 {
-  auto caItem = INFO::decodeDataContent(reply.getContent());
+  auto caItem = InfoEncoder::decodeDataContent(reply.getContent());
   if (!security::verifySignature(reply, *caItem.m_cert)) {
     NDN_LOG_ERROR("Cannot verify replied Data packet signature.");
     NDN_THROW(std::runtime_error("Cannot verify replied Data packet signature."));
@@ -76,7 +76,7 @@
 boost::optional<CaProfile>
 Requester::onCaProfileResponseAfterRedirection(const Data& reply, const Name& caCertFullName)
 {
-  auto caItem = INFO::decodeDataContent(reply.getContent());
+  auto caItem = InfoEncoder::decodeDataContent(reply.getContent());
   auto certBlock = caItem.m_cert->wireEncode();
   caItem.m_cert = std::make_shared<security::Certificate>(certBlock);
   if (caItem.m_cert->getFullName() != caCertFullName) {
@@ -94,7 +94,7 @@
   auto interest =std::make_shared<Interest>(interestName);
   interest->setMustBeFresh(true);
   interest->setCanBePrefix(false);
-  interest->setApplicationParameters(PROBE::encodeApplicationParameters(std::move(probeInfo)));
+  interest->setApplicationParameters(ProbeEncoder::encodeApplicationParameters(std::move(probeInfo)));
   return interest;
 }
 
@@ -108,7 +108,7 @@
     return;
   }
   processIfError(reply);
-  PROBE::decodeDataContent(reply.getContent(), identityNames, otherCas);
+  ProbeEncoder::decodeDataContent(reply.getContent(), identityNames, otherCas);
 }
 
 shared_ptr<Interest>
@@ -151,7 +151,7 @@
   // generate certificate request
   security::Certificate certRequest;
   certRequest.setName(Name(keyName).append("cert-request").appendVersion());
-  certRequest.setContentType(tlv::ContentType_Key);
+  certRequest.setContentType(ndn::tlv::ContentType_Key);
   certRequest.setContent(state.m_keyPair.getPublicKey().data(), state.m_keyPair.getPublicKey().size());
   SignatureInfo signatureInfo;
   signatureInfo.setValidityPeriod(security::ValidityPeriod(notBefore, notAfter));
@@ -164,7 +164,7 @@
   interest->setMustBeFresh(true);
   interest->setCanBePrefix(false);
   interest->setApplicationParameters(
-      NEW_RENEW_REVOKE::encodeApplicationParameters(RequestType::NEW, state.m_ecdh.getBase64PubKey(), certRequest));
+      NewRenewRevokeEncoder::encodeApplicationParameters(RequestType::NEW, state.m_ecdh.getBase64PubKey(), certRequest));
 
   // sign the Interest packet
   state.m_keyChain.sign(*interest, signingByKey(keyName));
@@ -184,7 +184,7 @@
   interest->setMustBeFresh(true);
   interest->setCanBePrefix(false);
   interest->setApplicationParameters(
-      NEW_RENEW_REVOKE::encodeApplicationParameters(RequestType::REVOKE, state.m_ecdh.getBase64PubKey(), certificate));
+      NewRenewRevokeEncoder::encodeApplicationParameters(RequestType::REVOKE, state.m_ecdh.getBase64PubKey(), certificate));
   return interest;
 }
 
@@ -198,7 +198,7 @@
   processIfError(reply);
 
   auto contentTLV = reply.getContent();
-  const auto& content = NEW_RENEW_REVOKE::decodeDataContent(contentTLV);
+  const auto& content = NewRenewRevokeEncoder::decodeDataContent(contentTLV);
 
   // ECDH and HKDF
   state.m_ecdh.deriveSecret(content.ecdhKey);
@@ -242,7 +242,7 @@
   interest->setCanBePrefix(false);
 
   // encrypt the Interest parameters
-  auto paramBlock = encodeBlockWithAesGcm128(tlv::ApplicationParameters, state.m_aesKey,
+  auto paramBlock = encodeBlockWithAesGcm128(ndn::tlv::ApplicationParameters, state.m_aesKey,
                                              challengeParams.value(), challengeParams.value_size(),
                                              (const uint8_t*)"test", strlen("test"));
   interest->setApplicationParameters(paramBlock);
@@ -260,7 +260,7 @@
   processIfError(reply);
   auto result = decodeBlockWithAesGcm128(reply.getContent(), state.m_aesKey, (const uint8_t*)"test", strlen("test"));
   Block contentTLV = makeBinaryBlock(tlv::EncryptedPayload, result.data(), result.size());
-  CHALLENGE::decodeDataContent(contentTLV, state);
+  ChallengeEncoder::decodeDataContent(contentTLV, state);
 }
 
 shared_ptr<Interest>
@@ -308,7 +308,7 @@
 void
 Requester::processIfError(const Data& data)
 {
-  auto errorInfo = ErrorTLV::decodefromDataContent(data.getContent());
+  auto errorInfo = ErrorEncoder::decodefromDataContent(data.getContent());
   if (std::get<0>(errorInfo) == ErrorCode::NO_ERROR) {
     return;
   }
diff --git a/tests/identity-management-fixture.cpp b/tests/identity-management-fixture.cpp
index db99d5a..8ca0545 100644
--- a/tests/identity-management-fixture.cpp
+++ b/tests/identity-management-fixture.cpp
@@ -111,7 +111,7 @@
   certificate.setName(certificateName);
 
   // set metainfo
-  certificate.setContentType(tlv::ContentType_Key);
+  certificate.setContentType(ndn::tlv::ContentType_Key);
   certificate.setFreshnessPeriod(1_h);
 
   // set content
diff --git a/tests/unit-tests/bench.t.cpp b/tests/unit-tests/bench.t.cpp
index 64a0d05..1fe853b 100644
--- a/tests/unit-tests/bench.t.cpp
+++ b/tests/unit-tests/bench.t.cpp
@@ -20,7 +20,7 @@
 
 #include "ca-module.hpp"
 #include "identity-challenge/challenge-pin.hpp"
-#include "protocol-detail/info.hpp"
+#include "detail/info-encoder.hpp"
 #include "requester.hpp"
 #include "test-common.hpp"
 
@@ -63,7 +63,7 @@
       std::cout << "CA Config MetaData Size: " << response.wireEncode().size() << std::endl;
       auto block = response.getContent();
       block.parse();
-      infoInterest =std::make_shared<Interest>(Name(block.get(tlv::Name)).appendSegment(0));
+      infoInterest =std::make_shared<Interest>(Name(block.get(ndn::tlv::Name)).appendSegment(0));
       infoInterest->setCanBePrefix(false);
       std::cout << "CA Config fetch Interest Size: " << infoInterest->wireEncode().size() << std::endl;
     }
@@ -73,7 +73,7 @@
       BOOST_CHECK(security::verifySignature(response, cert));
       auto contentBlock = response.getContent();
       contentBlock.parse();
-      auto caItem = INFO::decodeDataContent(contentBlock);
+      auto caItem = InfoEncoder::decodeDataContent(contentBlock);
       BOOST_CHECK_EQUAL(caItem.m_caPrefix, "/ndn");
       BOOST_CHECK_EQUAL(caItem.m_probeParameterKeys.size(), 1);
       BOOST_CHECK_EQUAL(caItem.m_probeParameterKeys.front(), "full name");
diff --git a/tests/unit-tests/ca-memory.t.cpp b/tests/unit-tests/ca-memory.t.cpp
index 04d37a4..83c8f00 100644
--- a/tests/unit-tests/ca-memory.t.cpp
+++ b/tests/unit-tests/ca-memory.t.cpp
@@ -37,7 +37,7 @@
   auto cert1 = key1.getDefaultCertificate();
 
   // add operation
-  CaState request1(Name("/ndn/site1"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, cert1, makeStringBlock(tlv::ContentType_Key, "PretendItIsAKey"));
+  CaState request1(Name("/ndn/site1"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, cert1, makeStringBlock(ndn::tlv::ContentType_Key, "PretendItIsAKey"));
   BOOST_CHECK_NO_THROW(storage.addRequest(request1));
 
   // get operation
@@ -52,7 +52,7 @@
 
   // update operation
   CaState request2(Name("/ndn/site1"), "123", RequestType::NEW, Status::CHALLENGE, cert1,
-                   "email", "test", time::system_clock::now(), 3, time::seconds(3600), std::move(json), makeStringBlock(tlv::ContentType_Key, "PretendItIsAKey"));
+                   "email", "test", time::system_clock::now(), 3, time::seconds(3600), std::move(json), makeStringBlock(ndn::tlv::ContentType_Key, "PretendItIsAKey"));
   storage.updateRequest(request2);
   result = storage.getRequest("123");
   BOOST_CHECK_EQUAL(request2.m_cert, result.m_cert);
@@ -62,7 +62,7 @@
   auto identity2 = addIdentity(Name("/ndn/site2"));
   auto key2 = identity2.getDefaultKey();
   auto cert2 = key2.getDefaultCertificate();
-  CaState request3(Name("/ndn/site2"), "456", RequestType::NEW, Status::BEFORE_CHALLENGE, cert2, makeStringBlock(tlv::ContentType_Key, "PretendItIsAKey"));
+  CaState request3(Name("/ndn/site2"), "456", RequestType::NEW, Status::BEFORE_CHALLENGE, cert2, makeStringBlock(ndn::tlv::ContentType_Key, "PretendItIsAKey"));
   storage.addRequest(request3);
 
   // list operation
diff --git a/tests/unit-tests/ca-module.t.cpp b/tests/unit-tests/ca-module.t.cpp
index 087a800..1dd39f4 100644
--- a/tests/unit-tests/ca-module.t.cpp
+++ b/tests/unit-tests/ca-module.t.cpp
@@ -22,7 +22,7 @@
 #include "identity-challenge/challenge-module.hpp"
 #include "identity-challenge/challenge-email.hpp"
 #include "identity-challenge/challenge-pin.hpp"
-#include "protocol-detail/info.hpp"
+#include "detail/info-encoder.hpp"
 #include "requester.hpp"
 #include "test-common.hpp"
 
@@ -73,7 +73,7 @@
       count++;
       auto block = response.getContent();
       block.parse();
-      infoInterest =std::make_shared<Interest>(Name(block.get(tlv::Name)).appendSegment(0));
+      infoInterest =std::make_shared<Interest>(Name(block.get(ndn::tlv::Name)).appendSegment(0));
       infoInterest->setCanBePrefix(false);
     }
     else {
@@ -81,7 +81,7 @@
       BOOST_CHECK(security::verifySignature(response, cert));
       auto contentBlock = response.getContent();
       contentBlock.parse();
-      auto caItem = INFO::decodeDataContent(contentBlock);
+      auto caItem = InfoEncoder::decodeDataContent(contentBlock);
       BOOST_CHECK_EQUAL(caItem.m_caPrefix, "/ndn");
       BOOST_CHECK_EQUAL(caItem.m_probeParameterKeys.size(), 1);
       BOOST_CHECK_EQUAL(caItem.m_probeParameterKeys.front(), "full name");
@@ -110,7 +110,7 @@
   Interest interest("/ndn/CA/PROBE");
   interest.setCanBePrefix(false);
 
-  Block paramTLV = makeEmptyBlock(tlv::ApplicationParameters);
+  Block paramTLV = makeEmptyBlock(ndn::tlv::ApplicationParameters);
   paramTLV.push_back(makeStringBlock(tlv::ParameterKey, "name"));
   paramTLV.push_back(makeStringBlock(tlv::ParameterValue, "zhiyi"));
   paramTLV.encode();
@@ -126,7 +126,7 @@
     Block probeResponse = contentBlock.get(tlv::ProbeResponse);
     probeResponse.parse();
     Name caName;
-    caName.wireDecode(probeResponse.get(tlv::Name));
+    caName.wireDecode(probeResponse.get(ndn::tlv::Name));
     BOOST_CHECK_EQUAL(caName.size(), 2);
   });
   face.receive(interest);
@@ -148,7 +148,7 @@
   Interest interest("/ndn/CA/PROBE");
   interest.setCanBePrefix(false);
 
-  Block paramTLV = makeEmptyBlock(tlv::ApplicationParameters);
+  Block paramTLV = makeEmptyBlock(ndn::tlv::ApplicationParameters);
   paramTLV.push_back(makeStringBlock(tlv::ParameterKey, "name"));
   paramTLV.push_back(makeStringBlock(tlv::ParameterValue, "zhiyi"));
   paramTLV.encode();
@@ -164,7 +164,7 @@
     auto probeResponseBlock = contentBlock.get(tlv::ProbeResponse);
     probeResponseBlock.parse();
     Name caPrefix;
-    caPrefix.wireDecode(probeResponseBlock.get(tlv::Name));
+    caPrefix.wireDecode(probeResponseBlock.get(ndn::tlv::Name));
     BOOST_CHECK(caPrefix != "");
   });
   face.receive(interest);
@@ -186,7 +186,7 @@
   Interest interest("/ndn/CA/PROBE");
   interest.setCanBePrefix(false);
 
-  Block paramTLV = makeEmptyBlock(tlv::ApplicationParameters);
+  Block paramTLV = makeEmptyBlock(ndn::tlv::ApplicationParameters);
   paramTLV.push_back(makeStringBlock(tlv::ParameterKey, "name"));
   paramTLV.push_back(makeStringBlock(tlv::ParameterValue, "zhiyi"));
   paramTLV.encode();
@@ -457,14 +457,14 @@
   auto clientKey = clientIdentity.getDefaultKey();
   security::Certificate clientCert;
   clientCert.setName(Name(clientKey.getName()).append("cert-request").appendVersion());
-  clientCert.setContentType(tlv::ContentType_Key);
+  clientCert.setContentType(ndn::tlv::ContentType_Key);
   clientCert.setFreshnessPeriod(time::hours(24));
   clientCert.setContent(clientKey.getPublicKey().data(), clientKey.getPublicKey().size());
   SignatureInfo signatureInfo;
   signatureInfo.setValidityPeriod(security::ValidityPeriod(time::system_clock::now(),
                                                            time::system_clock::now() + time::hours(10)));
   m_keyChain.sign(clientCert, signingByKey(clientKey.getName()).setSignatureInfo(signatureInfo));
-  CaState certRequest(Name("/ndn"), "122", RequestType::NEW, Status::SUCCESS, clientCert, makeEmptyBlock(tlv::ContentType_Key));
+  CaState certRequest(Name("/ndn"), "122", RequestType::NEW, Status::SUCCESS, clientCert, makeEmptyBlock(ndn::tlv::ContentType_Key));
   auto issuedCert = ca.issueCertificate(certRequest);
 
   CaProfile item;
@@ -520,7 +520,7 @@
   auto clientKey = clientIdentity.getDefaultKey();
   security::Certificate clientCert;
   clientCert.setName(Name(clientKey.getName()).append("NDNCERT").append(std::to_string(1473283247810732701)));
-  clientCert.setContentType(tlv::ContentType_Key);
+  clientCert.setContentType(ndn::tlv::ContentType_Key);
   clientCert.setFreshnessPeriod(time::hours(24));
   clientCert.setContent(clientKey.getPublicKey().data(), clientKey.getPublicKey().size());
   SignatureInfo signatureInfo;
diff --git a/tests/unit-tests/ca-sqlite.t.cpp b/tests/unit-tests/ca-sqlite.t.cpp
index 8e81a56..56c7501 100644
--- a/tests/unit-tests/ca-sqlite.t.cpp
+++ b/tests/unit-tests/ca-sqlite.t.cpp
@@ -36,7 +36,7 @@
   auto cert1 = key1.getDefaultCertificate();
 
   // add operation
-  CaState request1(Name("/ndn/site1"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, cert1, makeStringBlock(tlv::ContentType_Key, "PretendItIsAKey"));
+  CaState request1(Name("/ndn/site1"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, cert1, makeStringBlock(ndn::tlv::ContentType_Key, "PretendItIsAKey"));
   storage.addRequest(request1);
 
   // get operation
@@ -50,7 +50,7 @@
   JsonSection json;
   json.put("test", "4567");
   CaState request2(Name("/ndn/site1"), "123", RequestType::NEW, Status::CHALLENGE, cert1,
-                   "email", "test", time::system_clock::now(), 3, time::seconds(3600), std::move(json), makeEmptyBlock(tlv::ContentType_Key));
+                   "email", "test", time::system_clock::now(), 3, time::seconds(3600), std::move(json), makeEmptyBlock(ndn::tlv::ContentType_Key));
   storage.updateRequest(request2);
   result = storage.getRequest("123");
   BOOST_CHECK_EQUAL(request2.m_cert, result.m_cert);
@@ -60,7 +60,7 @@
   auto identity2 = addIdentity(Name("/ndn/site2"));
   auto key2 = identity2.getDefaultKey();
   auto cert2 = key2.getDefaultCertificate();
-  CaState request3(Name("/ndn/site2"), "456", RequestType::NEW, Status::BEFORE_CHALLENGE, cert2, makeStringBlock(tlv::ContentType_Key, "PretendItIsAKey"));
+  CaState request3(Name("/ndn/site2"), "456", RequestType::NEW, Status::BEFORE_CHALLENGE, cert2, makeStringBlock(ndn::tlv::ContentType_Key, "PretendItIsAKey"));
   storage.addRequest(request3);
 
   // list operation
@@ -85,7 +85,7 @@
     auto cert1 = key1.getDefaultCertificate();
 
     // add operation
-    CaState request1(Name("/ndn/site1"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, cert1, makeEmptyBlock(tlv::ContentType_Key));
+    CaState request1(Name("/ndn/site1"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, cert1, makeEmptyBlock(ndn::tlv::ContentType_Key));
     BOOST_CHECK_NO_THROW(storage.addRequest(request1));
     // add again
     BOOST_CHECK_THROW(storage.addRequest(request1), std::runtime_error);
diff --git a/tests/unit-tests/challenge-credential.t.cpp b/tests/unit-tests/challenge-credential.t.cpp
index 9c5ee14..efe956b 100644
--- a/tests/unit-tests/challenge-credential.t.cpp
+++ b/tests/unit-tests/challenge-credential.t.cpp
@@ -53,7 +53,7 @@
   auto identityA = addIdentity(Name("/example"));
   auto keyA = identityA.getDefaultKey();
   auto certA = key.getDefaultCertificate();
-  CaState state(Name("/example"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, certA, makeEmptyBlock(tlv::ContentType_Key));
+  CaState state(Name("/example"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, certA, makeEmptyBlock(ndn::tlv::ContentType_Key));
 
   // create requester's credential
   auto identityB = addIdentity(Name("/trust/cert"));
diff --git a/tests/unit-tests/challenge-email.t.cpp b/tests/unit-tests/challenge-email.t.cpp
index 446f6c5..4bac092 100644
--- a/tests/unit-tests/challenge-email.t.cpp
+++ b/tests/unit-tests/challenge-email.t.cpp
@@ -45,7 +45,7 @@
   auto identity = addIdentity(Name("/ndn/site1"));
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
-  CaState request(Name("/ndn/site1"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, cert, makeEmptyBlock(tlv::ContentType_Key));
+  CaState request(Name("/ndn/site1"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, cert, makeEmptyBlock(ndn::tlv::ContentType_Key));
 
   Block paramTLV = makeEmptyBlock(tlv::EncryptedPayload);
   paramTLV.push_back(makeStringBlock(tlv::ParameterKey, ChallengeEmail::PARAMETER_KEY_EMAIL));
@@ -94,7 +94,7 @@
   auto identity = addIdentity(Name("/ndn/site1"));
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
-  CaState request(Name("/ndn/site1"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, cert, makeEmptyBlock(tlv::ContentType_Key));
+  CaState request(Name("/ndn/site1"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, cert, makeEmptyBlock(ndn::tlv::ContentType_Key));
 
   Block paramTLV = makeEmptyBlock(tlv::EncryptedPayload);
   paramTLV.push_back(makeStringBlock(tlv::ParameterKey, ChallengeEmail::PARAMETER_KEY_EMAIL));
@@ -117,7 +117,7 @@
   json.put(ChallengeEmail::PARAMETER_KEY_CODE, "4567");
   CaState request(Name("/ndn/site1"), "123", RequestType::NEW, Status::CHALLENGE, cert,
                   "email", ChallengeEmail::NEED_CODE, time::system_clock::now(),
-                  3, time::seconds(3600), std::move(json), makeEmptyBlock(tlv::ContentType_Key));
+                  3, time::seconds(3600), std::move(json), makeEmptyBlock(ndn::tlv::ContentType_Key));
 
   Block paramTLV = makeEmptyBlock(tlv::EncryptedPayload);
   paramTLV.push_back(makeStringBlock(tlv::ParameterKey, ChallengeEmail::PARAMETER_KEY_CODE));
@@ -139,7 +139,7 @@
   json.put(ChallengeEmail::PARAMETER_KEY_CODE, "4567");
   CaState request(Name("/ndn/site1"), "123", RequestType::NEW, Status::CHALLENGE, cert,
                   "email", ChallengeEmail::NEED_CODE, time::system_clock::now(),
-                  3, time::seconds(3600), std::move(json), makeEmptyBlock(tlv::ContentType_Key));
+                  3, time::seconds(3600), std::move(json), makeEmptyBlock(ndn::tlv::ContentType_Key));
 
   Block paramTLV = makeEmptyBlock(tlv::EncryptedPayload);
   paramTLV.push_back(makeStringBlock(tlv::ParameterKey, ChallengeEmail::PARAMETER_KEY_CODE));
diff --git a/tests/unit-tests/challenge-pin.t.cpp b/tests/unit-tests/challenge-pin.t.cpp
index 5d4b151..3655cca 100644
--- a/tests/unit-tests/challenge-pin.t.cpp
+++ b/tests/unit-tests/challenge-pin.t.cpp
@@ -38,7 +38,7 @@
   auto identity = addIdentity(Name("/ndn/site1"));
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
-  CaState request(Name("/ndn/site1"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, cert, makeEmptyBlock(tlv::ContentType_Key));
+  CaState request(Name("/ndn/site1"), "123", RequestType::NEW, Status::BEFORE_CHALLENGE, cert, makeEmptyBlock(ndn::tlv::ContentType_Key));
 
   ChallengePin challenge;
   challenge.handleChallengeRequest(makeEmptyBlock(tlv::EncryptedPayload), request);
@@ -57,7 +57,7 @@
   secret.add(ChallengePin::PARAMETER_KEY_CODE, "12345");
   CaState request(Name("/ndn/site1"), "123", RequestType::NEW, Status::CHALLENGE, cert,
                   "pin", ChallengePin::NEED_CODE, time::system_clock::now(),
-                  3, time::seconds(3600), std::move(secret), makeEmptyBlock(tlv::ContentType_Key));
+                  3, time::seconds(3600), std::move(secret), makeEmptyBlock(ndn::tlv::ContentType_Key));
 
   Block paramTLV = makeEmptyBlock(tlv::EncryptedPayload);
   paramTLV.push_back(makeStringBlock(tlv::ParameterKey, ChallengePin::PARAMETER_KEY_CODE));
@@ -79,7 +79,7 @@
   secret.add(ChallengePin::PARAMETER_KEY_CODE, "12345");
   CaState request(Name("/ndn/site1"), "123", RequestType::NEW, Status::CHALLENGE, cert,
                   "pin", ChallengePin::NEED_CODE, time::system_clock::now(),
-                  3, time::seconds(3600), std::move(secret), makeEmptyBlock(tlv::ContentType_Key));
+                  3, time::seconds(3600), std::move(secret), makeEmptyBlock(ndn::tlv::ContentType_Key));
 
   Block paramTLV = makeEmptyBlock(tlv::EncryptedPayload);
   paramTLV.push_back(makeStringBlock(tlv::ParameterKey, ChallengePin::PARAMETER_KEY_CODE));
diff --git a/tests/unit-tests/configuration.t.cpp b/tests/unit-tests/configuration.t.cpp
index a1fa54f..7d5c901 100644
--- a/tests/unit-tests/configuration.t.cpp
+++ b/tests/unit-tests/configuration.t.cpp
@@ -19,7 +19,7 @@
  */
 
 #include "configuration.hpp"
-#include "protocol-detail/info.hpp"
+#include "detail/info-encoder.hpp"
 #include "test-common.hpp"
 
 namespace ndn {
diff --git a/tests/unit-tests/crypto-helper.t.cpp b/tests/unit-tests/crypto-helper.t.cpp
index f425f64..313969e 100644
--- a/tests/unit-tests/crypto-helper.t.cpp
+++ b/tests/unit-tests/crypto-helper.t.cpp
@@ -18,7 +18,7 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#include "protocol-detail/crypto-helper.hpp"
+#include "detail/crypto-helper.hpp"
 #include "test-common.hpp"
 
 namespace ndn {
diff --git a/tests/unit-tests/enc-tlv.t.cpp b/tests/unit-tests/enc-tlv.t.cpp
index 60c683c..314bf2b 100644
--- a/tests/unit-tests/enc-tlv.t.cpp
+++ b/tests/unit-tests/enc-tlv.t.cpp
@@ -18,8 +18,8 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#include "protocol-detail/enc-tlv.hpp"
-#include "protocol-detail/crypto-helper.hpp"
+#include "detail/enc-tlv.hpp"
+#include "detail/crypto-helper.hpp"
 #include "test-common.hpp"
 
 namespace ndn {
@@ -34,7 +34,7 @@
                          0x31, 0x1e, 0x41, 0x92, 0x96, 0x6f, 0xee, 0x92};
   const std::string plaintext = "alongstringalongstringalongstringalongstringalongstringalongstringalongstringalongstring";
   const std::string associatedData = "test";
-  auto block = encodeBlockWithAesGcm128(tlv::Content, key, (uint8_t*)plaintext.c_str(), plaintext.size(),
+  auto block = encodeBlockWithAesGcm128(ndn::tlv::Content, key, (uint8_t*)plaintext.c_str(), plaintext.size(),
                                         (uint8_t*)associatedData.c_str(), associatedData.size());
   auto decoded = decodeBlockWithAesGcm128(block, key, (uint8_t*)associatedData.c_str(), associatedData.size());
   BOOST_CHECK_EQUAL(plaintext, std::string((char*)decoded.get<uint8_t>(), decoded.size()));
diff --git a/tests/unit-tests/protocol-detail.t.cpp b/tests/unit-tests/protocol-detail.t.cpp
index a10b54b..6157d61 100644
--- a/tests/unit-tests/protocol-detail.t.cpp
+++ b/tests/unit-tests/protocol-detail.t.cpp
@@ -18,10 +18,10 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#include "protocol-detail/info.hpp"
-#include "protocol-detail/probe.hpp"
-#include "protocol-detail/new-renew-revoke.hpp"
-#include "protocol-detail/challenge.hpp"
+#include "detail/info-encoder.hpp"
+#include "detail/probe-encoder.hpp"
+#include "detail/new-renew-revoke-encoder.hpp"
+#include "detail/challenge-encoder.hpp"
 #include "test-common.hpp"
 
 namespace ndn {
@@ -37,8 +37,8 @@
 
   const auto& identity = addIdentity("/test");
   const auto& cert = identity.getDefaultKey().getDefaultCertificate();
-  auto encoded = INFO::encodeDataContent(config.m_caItem, cert);
-  auto decoded = INFO::decodeDataContent(encoded);
+  auto encoded = InfoEncoder::encodeDataContent(config.m_caItem, cert);
+  auto decoded = InfoEncoder::decodeDataContent(encoded);
   BOOST_CHECK_EQUAL(config.m_caItem.m_caPrefix, decoded.m_caPrefix);
   BOOST_CHECK_EQUAL(config.m_caItem.m_caInfo, decoded.m_caInfo);
   BOOST_CHECK_EQUAL(config.m_caItem.m_maxValidityPeriod, decoded.m_maxValidityPeriod);
@@ -51,8 +51,8 @@
 {
   std::vector<std::tuple<std::string, std::string>> parameters;
   parameters.push_back(std::make_tuple("email", "zhiyi@cs.ucla.edu"));
-  auto appParametersTlv = PROBE::encodeApplicationParameters(std::move(parameters));
-  auto decodedParameters = PROBE::decodeApplicationParameters(appParametersTlv);
+  auto appParametersTlv = ProbeEncoder::encodeApplicationParameters(std::move(parameters));
+  auto decodedParameters = ProbeEncoder::decodeApplicationParameters(appParametersTlv);
   BOOST_CHECK_EQUAL(std::get<0>(decodedParameters[0]), "email");
   BOOST_CHECK_EQUAL(std::get<1>(decodedParameters[0]), "zhiyi@cs.ucla.edu");
   BOOST_CHECK_EQUAL(decodedParameters.size(), 1);
@@ -61,10 +61,10 @@
   config.load("tests/unit-tests/config-files/config-ca-5");
   std::vector<Name> ids;
   ids.push_back(Name("/example"));
-  auto contentTlv = PROBE::encodeDataContent(ids, 2, config.m_redirection);
+  auto contentTlv = ProbeEncoder::encodeDataContent(ids, 2, config.m_redirection);
   std::vector<Name> decodedRedirectionItems;
   std::vector<std::pair<Name, int>> decodedIds;
-  PROBE::decodeDataContent(contentTlv, decodedIds, decodedRedirectionItems);
+  ProbeEncoder::decodeDataContent(contentTlv, decodedIds, decodedRedirectionItems);
   BOOST_CHECK_EQUAL(decodedIds[0].first, Name("/example"));
   BOOST_CHECK_EQUAL(decodedIds[0].second, 2);
   BOOST_CHECK_EQUAL(decodedRedirectionItems[0], config.m_redirection->at(0)->getFullName());
diff --git a/tests/unit-tests/requester.t.cpp b/tests/unit-tests/requester.t.cpp
index 590cb77..0ab1d67 100644
--- a/tests/unit-tests/requester.t.cpp
+++ b/tests/unit-tests/requester.t.cpp
@@ -19,8 +19,8 @@
  */
 
 #include "requester.hpp"
-#include "protocol-detail/error.hpp"
-#include "protocol-detail/probe.hpp"
+#include "detail/error-encoder.hpp"
+#include "detail/probe-encoder.hpp"
 #include "identity-challenge/challenge-module.hpp"
 #include "ca-module.hpp"
 #include "test-common.hpp"
@@ -79,7 +79,7 @@
   Data reply;
   reply.setName(Name("/site/CA/PROBE"));
   reply.setFreshnessPeriod(time::seconds(100));
-  reply.setContent(PROBE::encodeDataContent(availableNames, 3, ca.m_config.m_redirection));
+  reply.setContent(ProbeEncoder::encodeDataContent(availableNames, 3, ca.m_config.m_redirection));
   m_keyChain.sign(reply, signingByIdentity(identity));
 
   std::vector<std::pair<Name, int>> names;
@@ -112,7 +112,7 @@
   Data errorPacket;
   errorPacket.setName(Name("/site/pretend/this/is/error/packet"));
   errorPacket.setFreshnessPeriod(time::seconds(100));
-  errorPacket.setContent(ErrorTLV::encodeDataContent(ErrorCode::INVALID_PARAMETER, "This is a test."));
+  errorPacket.setContent(ErrorEncoder::encodeDataContent(ErrorCode::INVALID_PARAMETER, "This is a test."));
   m_keyChain.sign(errorPacket, signingByIdentity(identity));
 
   std::vector<std::pair<Name, int>> ids;
diff --git a/tools/ndncert-ca-server.cpp b/tools/ndncert-ca-server.cpp
index 90b26e5..c633c83 100644
--- a/tools/ndncert-ca-server.cpp
+++ b/tools/ndncert-ca-server.cpp
@@ -19,7 +19,6 @@
  */
 
 #include "ca-module.hpp"
-#include "identity-challenge/challenge-module.hpp"
 #include <boost/asio.hpp>
 #include <boost/asio/ip/tcp.hpp>
 #include <boost/program_options/options_description.hpp>
diff --git a/tools/ndncert-client.cpp b/tools/ndncert-client.cpp
index ed078a7..46bf35e 100644
--- a/tools/ndncert-client.cpp
+++ b/tools/ndncert-client.cpp
@@ -19,7 +19,7 @@
  */
 
 #include "identity-challenge/challenge-module.hpp"
-#include "protocol-detail/info.hpp"
+#include "detail/info-encoder.hpp"
 #include "requester.hpp"
 #include <ndn-cxx/security/verification-helpers.hpp>
 #include <boost/asio.hpp>
