diff --git a/src/ca-module.cpp b/src/ca-module.cpp
index 493a959..7153731 100644
--- a/src/ca-module.cpp
+++ b/src/ca-module.cpp
@@ -36,6 +36,7 @@
 
 namespace ndn {
 namespace ndncert {
+namespace ca {
 
 static const time::seconds DEFAULT_DATA_FRESHNESS_PERIOD = 1_s;
 static const time::seconds REQUEST_VALIDITY_PERIOD_NOT_BEFORE_GRACE_PERIOD = 120_s;
@@ -306,7 +307,7 @@
   }
   RequestID id;
   std::memcpy(id.data(), requestIdData, id.size());
-  CaState requestState(m_config.m_caItem.m_caPrefix, id,
+  RequestState requestState(m_config.m_caItem.m_caPrefix, id,
                        requestType, Status::BEFORE_CHALLENGE, *clientCert,
                        makeBinaryBlock(ndn::tlv::ContentType_Key, aesKey, sizeof(aesKey)));
   try {
@@ -439,7 +440,7 @@
 }
 
 security::Certificate
-CaModule::issueCertificate(const CaState& requestState)
+CaModule::issueCertificate(const RequestState& requestState)
 {
   auto expectedPeriod = requestState.m_cert.getValidityPeriod().getPeriod();
   security::ValidityPeriod period(expectedPeriod.first, expectedPeriod.second);
@@ -460,7 +461,7 @@
   return newCert;
 }
 
-std::unique_ptr<CaState>
+std::unique_ptr<RequestState>
 CaModule::getCertificateRequest(const Interest& request)
 {
   RequestID requestId;
@@ -474,7 +475,7 @@
   }
   try {
     NDN_LOG_TRACE("Request Id to query the database " << toHex(requestId.data(), requestId.size()));
-    return std::make_unique<CaState>(m_storage->getRequest(requestId));
+    return std::make_unique<RequestState>(m_storage->getRequest(requestId));
   }
   catch (const std::exception& e) {
     NDN_LOG_ERROR("Cannot get certificate request record from the storage: " << e.what());
@@ -499,5 +500,6 @@
   return result;
 }
 
+} // namespace ca
 } // namespace ndncert
 } // namespace ndn
diff --git a/src/ca-module.hpp b/src/ca-module.hpp
index e1cedaf..209352c 100644
--- a/src/ca-module.hpp
+++ b/src/ca-module.hpp
@@ -27,6 +27,7 @@
 
 namespace ndn {
 namespace ndncert {
+namespace ca {
 
 class CaModule : noncopyable
 {
@@ -70,11 +71,11 @@
   void
   onRegisterFailed(const std::string& reason);
 
-  std::unique_ptr<CaState>
+  std::unique_ptr<RequestState>
   getCertificateRequest(const Interest& request);
 
   security::Certificate
-  issueCertificate(const CaState& requestState);
+  issueCertificate(const RequestState& requestState);
 
   void
   registerPrefix();
@@ -94,6 +95,7 @@
   std::list<InterestFilterHandle> m_interestFilterHandles;
 };
 
+} // namespace ca
 } // namespace ndncert
 } // namespace ndn
 
diff --git a/src/configuration.cpp b/src/configuration.cpp
index 78c7e61..b400a2f 100644
--- a/src/configuration.cpp
+++ b/src/configuration.cpp
@@ -132,6 +132,8 @@
   return caItem;
 }
 
+namespace ca {
+
 void
 CaConfig::load(const std::string& fileName)
 {
@@ -181,6 +183,8 @@
   }
 }
 
+} // namespace ca
+
 void
 RequesterCaCache::load(const std::string& fileName)
 {
diff --git a/src/configuration.hpp b/src/configuration.hpp
index 8fc3c74..42d79dd 100644
--- a/src/configuration.hpp
+++ b/src/configuration.hpp
@@ -79,15 +79,17 @@
   parseChallengeList(const JsonSection& configSection);
 };
 
+namespace ca {
+
 /**
  * @brief The function would be invoked whenever the certificate request status is updated.
  * The callback is used to notice the CA application or CA command line tool. The callback is
  * fired whenever a request instance is created, challenge status is updated, and when certificate
  * is issued.
  *
- * @param CaState The state of the certificate request whose status is updated.
+ * @param RequestState The state of the certificate request whose status is updated.
  */
-using StatusUpdateCallback = function<void(const CaState&)>;
+using StatusUpdateCallback = function<void(const RequestState&)>;
 
 /**
  * @brief CA's configuration on NDNCERT.
@@ -138,6 +140,8 @@
   std::vector<std::unique_ptr<NameAssignmentFunc>> m_nameAssignmentFuncs;
 };
 
+} // namespace ca
+
 /**
  * @brief Represents Client configuration
  *
diff --git a/src/detail/ca-memory.cpp b/src/detail/ca-memory.cpp
index 893801e..a293a18 100644
--- a/src/detail/ca-memory.cpp
+++ b/src/detail/ca-memory.cpp
@@ -23,6 +23,7 @@
 
 namespace ndn {
 namespace ndncert {
+namespace ca {
 
 const std::string
 CaMemory::STORAGE_TYPE = "ca-storage-memory";
@@ -34,7 +35,7 @@
 {
 }
 
-CaState
+RequestState
 CaMemory::getRequest(const RequestID& requestId)
 {
   auto search = m_requests.find(requestId);
@@ -45,7 +46,7 @@
 }
 
 void
-CaMemory::addRequest(const CaState& request)
+CaMemory::addRequest(const RequestState& request)
 {
   auto search = m_requests.find(request.m_requestId);
   if (search == m_requests.end()) {
@@ -57,7 +58,7 @@
 }
 
 void
-CaMemory::updateRequest(const CaState& request)
+CaMemory::updateRequest(const RequestState& request)
 {
   auto search = m_requests.find(request.m_requestId);
   if (search == m_requests.end()) {
@@ -78,20 +79,20 @@
   }
 }
 
-std::list<CaState>
+std::list<RequestState>
 CaMemory::listAllRequests()
 {
-  std::list<CaState> result;
+  std::list<RequestState> result;
   for (const auto& entry : m_requests) {
     result.push_back(entry.second);
   }
   return result;
 }
 
-std::list<CaState>
+std::list<RequestState>
 CaMemory::listAllRequests(const Name& caName)
 {
-  std::list<CaState> result;
+  std::list<RequestState> result;
   for (const auto& entry : m_requests) {
     if (entry.second.m_caPrefix == caName) {
       result.push_back(entry.second);
@@ -100,5 +101,6 @@
   return result;
 }
 
+} // namespace ca
 } // namespace ndncert
 } // namespace ndn
diff --git a/src/detail/ca-memory.hpp b/src/detail/ca-memory.hpp
index 594875b..b4cdb97 100644
--- a/src/detail/ca-memory.hpp
+++ b/src/detail/ca-memory.hpp
@@ -25,6 +25,7 @@
 
 namespace ndn {
 namespace ndncert {
+namespace ca {
 
 class CaMemory : public CaStorage
 {
@@ -36,31 +37,32 @@
   /**
    * @throw if request cannot be fetched from underlying data storage
    */
-  CaState
+  RequestState
   getRequest(const RequestID& requestId) override;
 
   /**
    * @throw if there is an existing request with the same request ID
    */
   void
-  addRequest(const CaState& request) override;
+  addRequest(const RequestState& request) override;
 
   void
-  updateRequest(const CaState& request) override;
+  updateRequest(const RequestState& request) override;
 
   void
   deleteRequest(const RequestID& requestId) override;
 
-  std::list<CaState>
+  std::list<RequestState>
   listAllRequests() override;
 
-  std::list<CaState>
+  std::list<RequestState>
   listAllRequests(const Name& caName) override;
 
 private:
-  std::map<RequestID, CaState> m_requests;
+  std::map<RequestID, RequestState> m_requests;
 };
 
+} // namespace ca
 } // namespace ndncert
 } // namespace ndn
 
diff --git a/src/detail/ca-sqlite.cpp b/src/detail/ca-sqlite.cpp
index 4f0971d..cd55be8 100644
--- a/src/detail/ca-sqlite.cpp
+++ b/src/detail/ca-sqlite.cpp
@@ -27,6 +27,7 @@
 
 namespace ndn {
 namespace ndncert {
+namespace ca {
 
 using namespace ndn::util;
 const std::string CaSqlite::STORAGE_TYPE = "ca-storage-sqlite3";
@@ -52,7 +53,7 @@
 
 static const std::string INITIALIZATION = R"_DBTEXT_(
 CREATE TABLE IF NOT EXISTS
-  CaStates(
+  RequestStates(
     id INTEGER PRIMARY KEY,
     request_id BLOB NOT NULL,
     ca_name BLOB NOT NULL,
@@ -69,7 +70,7 @@
     aes_block_counter INTEGER
   );
 CREATE UNIQUE INDEX IF NOT EXISTS
-  CaStateIdIndex ON CaStates(request_id);
+  RequestStateIdIndex ON RequestStates(request_id);
 )_DBTEXT_";
 
 CaSqlite::CaSqlite(const Name& caName, const std::string& path)
@@ -121,7 +122,7 @@
   sqlite3_close(m_database);
 }
 
-CaState
+RequestState
 CaSqlite::getRequest(const RequestID& requestId)
 {
   Sqlite3Statement statement(m_database,
@@ -130,7 +131,7 @@
                              challenge_type, challenge_secrets,
                              challenge_tp, remaining_tries, remaining_time,
                              request_type, encryption_key, aes_block_counter
-                             FROM CaStates where request_id = ?)_SQLTEXT_");
+                             FROM RequestStates where request_id = ?)_SQLTEXT_");
   statement.bind(1, requestId.data(), requestId.size(), SQLITE_TRANSIENT);
 
   if (statement.step() == SQLITE_ROW) {
@@ -147,13 +148,13 @@
     auto encryptionKey = statement.getBlock(11);
     auto aesCounter = statement.getInt(12);
     if (challengeType != "") {
-      return CaState(caName, requestId, requestType, status, cert,
+      return RequestState(caName, requestId, requestType, status, cert,
                      challengeType, challengeStatus, time::fromIsoString(challengeTp),
                      remainingTries, time::seconds(remainingTime),
                      convertString2Json(challengeSecrets), encryptionKey, aesCounter);
     }
     else {
-      return CaState(caName, requestId, requestType, status, cert, encryptionKey);
+      return RequestState(caName, requestId, requestType, status, cert, encryptionKey);
     }
   }
   else {
@@ -162,11 +163,11 @@
 }
 
 void
-CaSqlite::addRequest(const CaState& request)
+CaSqlite::addRequest(const RequestState& request)
 {
   Sqlite3Statement statement(
       m_database,
-      R"_SQLTEXT_(INSERT OR ABORT INTO CaStates (request_id, ca_name, status, request_type,
+      R"_SQLTEXT_(INSERT OR ABORT INTO RequestStates (request_id, ca_name, status, request_type,
                   cert_request, challenge_type, challenge_status, challenge_secrets,
                   challenge_tp, remaining_tries, remaining_time, encryption_key, aes_block_counter)
                   values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?))_SQLTEXT_");
@@ -192,10 +193,10 @@
 }
 
 void
-CaSqlite::updateRequest(const CaState& request)
+CaSqlite::updateRequest(const RequestState& request)
 {
   Sqlite3Statement statement(m_database,
-                             R"_SQLTEXT_(UPDATE CaStates
+                             R"_SQLTEXT_(UPDATE RequestStates
                              SET status = ?, challenge_type = ?, challenge_status = ?, challenge_secrets = ?,
                              challenge_tp = ?, remaining_tries = ?, remaining_time = ?, aes_block_counter = ?
                              WHERE request_id = ?)_SQLTEXT_");
@@ -223,15 +224,15 @@
   }
 }
 
-std::list<CaState>
+std::list<RequestState>
 CaSqlite::listAllRequests()
 {
-  std::list<CaState> result;
+  std::list<RequestState> result;
   Sqlite3Statement statement(m_database, R"_SQLTEXT_(SELECT id, request_id, ca_name, status,
                              challenge_status, cert_request, challenge_type, challenge_secrets,
                              challenge_tp, remaining_tries, remaining_time, request_type,
                              encryption_key, aes_block_counter
-                             FROM CaStates)_SQLTEXT_");
+                             FROM RequestStates)_SQLTEXT_");
   while (statement.step() == SQLITE_ROW) {
     RequestID requestId;
     std::memcpy(requestId.data(), statement.getBlob(1), statement.getSize(1));
@@ -248,28 +249,28 @@
     auto encryptionKey = statement.getBlock(12);
     auto aesBlockCounter = statement.getInt(13);
     if (challengeType != "") {
-      result.push_back(CaState(caName, requestId, requestType, status, cert,
+      result.push_back(RequestState(caName, requestId, requestType, status, cert,
                                challengeType, challengeStatus, time::fromIsoString(challengeTp),
                                remainingTries, time::seconds(remainingTime),
                                convertString2Json(challengeSecrets), encryptionKey, aesBlockCounter));
     }
     else {
-      result.push_back(CaState(caName, requestId, requestType, status, cert, encryptionKey, aesBlockCounter));
+      result.push_back(RequestState(caName, requestId, requestType, status, cert, encryptionKey, aesBlockCounter));
     }
   }
   return result;
 }
 
-std::list<CaState>
+std::list<RequestState>
 CaSqlite::listAllRequests(const Name& caName)
 {
-  std::list<CaState> result;
+  std::list<RequestState> result;
   Sqlite3Statement statement(m_database,
                              R"_SQLTEXT_(SELECT id, request_id, ca_name, status,
                              challenge_status, cert_request, challenge_type, challenge_secrets,
                              challenge_tp, remaining_tries, remaining_time, request_type, 
                              encryption_key, aes_block_counter
-                             FROM CaStates WHERE ca_name = ?)_SQLTEXT_");
+                             FROM RequestStates WHERE ca_name = ?)_SQLTEXT_");
   statement.bind(1, caName.wireEncode(), SQLITE_TRANSIENT);
 
   while (statement.step() == SQLITE_ROW) {
@@ -288,13 +289,13 @@
     auto encryptionKey = statement.getBlock(12);
     auto aesBlockCounter = statement.getInt(13);
     if (challengeType != "") {
-      result.push_back(CaState(caName, requestId, requestType, status, cert,
+      result.push_back(RequestState(caName, requestId, requestType, status, cert,
                                challengeType, challengeStatus, time::fromIsoString(challengeTp),
                                remainingTries, time::seconds(remainingTime),
                                convertString2Json(challengeSecrets), encryptionKey, aesBlockCounter));
     }
     else {
-      result.push_back(CaState(caName, requestId, requestType, status, cert, encryptionKey, aesBlockCounter));
+      result.push_back(RequestState(caName, requestId, requestType, status, cert, encryptionKey, aesBlockCounter));
     }
   }
   return result;
@@ -304,10 +305,11 @@
 CaSqlite::deleteRequest(const RequestID& requestId)
 {
   Sqlite3Statement statement(m_database,
-                             R"_SQLTEXT_(DELETE FROM CaStates WHERE request_id = ?)_SQLTEXT_");
+                             R"_SQLTEXT_(DELETE FROM RequestStates WHERE request_id = ?)_SQLTEXT_");
   statement.bind(1, requestId.data(), requestId.size(), SQLITE_TRANSIENT);
   statement.step();
 }
 
+} // namespace ca
 } // namespace ndncert
 } // namespace ndn
diff --git a/src/detail/ca-sqlite.hpp b/src/detail/ca-sqlite.hpp
index a74395f..21cd565 100644
--- a/src/detail/ca-sqlite.hpp
+++ b/src/detail/ca-sqlite.hpp
@@ -27,6 +27,7 @@
 
 namespace ndn {
 namespace ndncert {
+namespace ca {
 
 class CaSqlite : public CaStorage
 {
@@ -42,31 +43,32 @@
   /**
    * @throw if request cannot be fetched from underlying data storage
    */
-  CaState
+  RequestState
   getRequest(const RequestID& requestId) override;
 
   /**
    * @throw if there is an existing request with the same request ID
    */
   void
-  addRequest(const CaState& request) override;
+  addRequest(const RequestState& request) override;
 
   void
-  updateRequest(const CaState& request) override;
+  updateRequest(const RequestState& request) override;
 
   void
   deleteRequest(const RequestID& requestId) override;
 
-  std::list<CaState>
+  std::list<RequestState>
   listAllRequests() override;
 
-  std::list<CaState>
+  std::list<RequestState>
   listAllRequests(const Name& caName) override;
 
 private:
   sqlite3* m_database;
 };
 
+} // namespace ca
 } // namespace ndncert
 } // namespace ndn
 
diff --git a/src/detail/ca-state.cpp b/src/detail/ca-state.cpp
index fa4e1ed..9b1f96b 100644
--- a/src/detail/ca-state.cpp
+++ b/src/detail/ca-state.cpp
@@ -46,6 +46,8 @@
   }
 }
 
+namespace ca {
+
 ChallengeState::ChallengeState(const std::string& challengeStatus,
                                const time::system_clock::TimePoint& challengeTp,
                                size_t remainingTries, time::seconds remainingTime,
@@ -58,7 +60,7 @@
 {
 }
 
-CaState::CaState(const Name& caName, const RequestID& requestId, RequestType requestType, Status status,
+RequestState::RequestState(const Name& caName, const RequestID& requestId, RequestType requestType, Status status,
                  const security::Certificate& cert, Block encryptionKey, uint32_t aesBlockCounter)
     : m_caPrefix(caName)
     , m_requestId(requestId)
@@ -70,7 +72,7 @@
 {
 }
 
-CaState::CaState(const Name& caName, const RequestID& requestId, RequestType requestType, Status status,
+RequestState::RequestState(const Name& caName, const RequestID& requestId, RequestType requestType, Status status,
                  const security::Certificate& cert, const std::string& challengeType,
                  const std::string& challengeStatus, const time::system_clock::TimePoint& challengeTp,
                  size_t remainingTries, time::seconds remainingTime, JsonSection&& challengeSecrets,
@@ -88,7 +90,7 @@
 }
 
 std::ostream&
-operator<<(std::ostream& os, const CaState& request)
+operator<<(std::ostream& os, const RequestState& request)
 {
   os << "Request's CA name: " << request.m_caPrefix << "\n";
   os << "Request's request ID: " << toHex(request.m_requestId.data(), request.m_requestId.size()) << "\n";
@@ -109,5 +111,6 @@
   return os;
 }
 
+} // namespace ca
 } // namespace ndncert
 } // namespace ndn
diff --git a/src/detail/ca-state.hpp b/src/detail/ca-state.hpp
index 5f96fb0..e5876b1 100644
--- a/src/detail/ca-state.hpp
+++ b/src/detail/ca-state.hpp
@@ -45,6 +45,8 @@
 std::string
 statusToString(Status status);
 
+namespace ca {
+
 /**
  * @brief The state maintained by the Challenge module.
  */
@@ -78,20 +80,20 @@
 /**
  * @brief Represents a certificate request instance kept by the CA.
  *
- * ChallengeModule should take use of CaState.ChallengeState to keep the challenge state.
+ * ChallengeModule should take use of RequestState.ChallengeState to keep the challenge state.
  */
-class CaState
+class RequestState
 {
 public:
   /**
-   * @brief Used to instantiate a CaState when challenge is not started.
+   * @brief Used to instantiate a RequestState when challenge is not started.
    */
-  CaState(const Name& caName, const RequestID& requestId, RequestType requestType, Status status,
+  RequestState(const Name& caName, const RequestID& requestId, RequestType requestType, Status status,
           const security::Certificate& cert, Block m_encryptionKey, uint32_t aesBlockCounter = 0);
   /**
-   * @brief Used to instantiate a CaState after challenge is started.
+   * @brief Used to instantiate a RequestState after challenge is started.
    */
-  CaState(const Name& caName, const RequestID& requestId, RequestType requestType, Status status,
+  RequestState(const Name& caName, const RequestID& requestId, RequestType requestType, Status status,
           const security::Certificate& cert, const std::string& challengeType,
           const std::string& challengeStatus, const time::system_clock::TimePoint& challengeTp,
           size_t remainingTries, time::seconds remainingTime, JsonSection&& challengeSecrets,
@@ -138,8 +140,9 @@
 };
 
 std::ostream&
-operator<<(std::ostream& os, const CaState& request);
+operator<<(std::ostream& os, const RequestState& request);
 
+} // namespace ca
 } // namespace ndncert
 } // namespace ndn
 
diff --git a/src/detail/ca-storage.cpp b/src/detail/ca-storage.cpp
index a7195f6..a377c6c 100644
--- a/src/detail/ca-storage.cpp
+++ b/src/detail/ca-storage.cpp
@@ -22,6 +22,7 @@
 
 namespace ndn {
 namespace ndncert {
+namespace ca {
 
 unique_ptr<CaStorage>
 CaStorage::createCaStorage(const std::string& caStorageType, const Name& caName, const std::string& path)
@@ -38,5 +39,6 @@
   return factory;
 }
 
+} // namespace ca
 } // namespace ndncert
 } // namespace ndn
diff --git a/src/detail/ca-storage.hpp b/src/detail/ca-storage.hpp
index 7349300..7ccecd8 100644
--- a/src/detail/ca-storage.hpp
+++ b/src/detail/ca-storage.hpp
@@ -25,6 +25,7 @@
 
 namespace ndn {
 namespace ndncert {
+namespace ca {
 
 class CaStorage : noncopyable
 {
@@ -32,25 +33,25 @@
   /**
    * @throw if request cannot be fetched from underlying data storage
    */
-  virtual CaState
+  virtual RequestState
   getRequest(const RequestID& requestId) = 0;
 
   /**
    * @throw if there is an existing request with the same request ID
    */
   virtual void
-  addRequest(const CaState& request) = 0;
+  addRequest(const RequestState& request) = 0;
 
   virtual void
-  updateRequest(const CaState& request) = 0;
+  updateRequest(const RequestState& request) = 0;
 
   virtual void
   deleteRequest(const RequestID& requestId) = 0;
 
-  virtual std::list<CaState>
+  virtual std::list<RequestState>
   listAllRequests() = 0;
 
-  virtual std::list<CaState>
+  virtual std::list<RequestState>
   listAllRequests(const Name& caName) = 0;
 
 public: // factory
@@ -85,10 +86,11 @@
 public:                                                          \
   NdnCert ## C ## CaStorageRegistrationClass()                   \
   {                                                              \
-    ::ndn::ndncert::CaStorage::registerCaStorage<C>();           \
+    ::ndn::ndncert::ca::CaStorage::registerCaStorage<C>();       \
   }                                                              \
 } g_NdnCert ## C ## CaStorageRegistrationVariable
 
+} // namespace ca
 } // namespace ndncert
 } // namespace ndn
 
diff --git a/src/detail/challenge-encoder.cpp b/src/detail/challenge-encoder.cpp
index dfe76ad..f3ebb5a 100644
--- a/src/detail/challenge-encoder.cpp
+++ b/src/detail/challenge-encoder.cpp
@@ -24,7 +24,7 @@
 namespace ndncert {
 
 Block
-ChallengeEncoder::encodeDataContent(const CaState& request)
+ChallengeEncoder::encodeDataContent(const ca::RequestState& request)
 {
   Block response = makeEmptyBlock(tlv::EncryptedPayload);
   response.push_back(makeNonNegativeIntegerBlock(tlv::Status, static_cast<size_t>(request.m_status)));
diff --git a/src/detail/challenge-encoder.hpp b/src/detail/challenge-encoder.hpp
index 9ef19a9..fb9d5d2 100644
--- a/src/detail/challenge-encoder.hpp
+++ b/src/detail/challenge-encoder.hpp
@@ -31,7 +31,7 @@
 {
 public:
   static Block
-  encodeDataContent(const CaState& request);
+  encodeDataContent(const ca::RequestState& request);
 
   static void
   decodeDataContent(const Block& data, RequesterState& state);
diff --git a/src/identity-challenge/challenge-credential.cpp b/src/identity-challenge/challenge-credential.cpp
index 9cceefe..e4f21d4 100644
--- a/src/identity-challenge/challenge-credential.cpp
+++ b/src/identity-challenge/challenge-credential.cpp
@@ -75,7 +75,7 @@
 
 // For CA
 std::tuple<ErrorCode, std::string>
-ChallengeCredential::handleChallengeRequest(const Block& params, CaState& request)
+ChallengeCredential::handleChallengeRequest(const Block& params, ca::RequestState& request)
 {
   params.parse();
   if (m_trustAnchors.empty()) {
diff --git a/src/identity-challenge/challenge-credential.hpp b/src/identity-challenge/challenge-credential.hpp
index 38a7e1a..17bc979 100644
--- a/src/identity-challenge/challenge-credential.hpp
+++ b/src/identity-challenge/challenge-credential.hpp
@@ -53,7 +53,7 @@
 
   // For CA
   std::tuple<ErrorCode, std::string>
-  handleChallengeRequest(const Block& params, CaState& request) override;
+  handleChallengeRequest(const Block& params, ca::RequestState& request) override;
 
   // For Client
   std::vector<std::tuple<std::string, std::string>>
diff --git a/src/identity-challenge/challenge-email.cpp b/src/identity-challenge/challenge-email.cpp
index cc141dc..be7cd2a 100644
--- a/src/identity-challenge/challenge-email.cpp
+++ b/src/identity-challenge/challenge-email.cpp
@@ -43,7 +43,7 @@
 
 // For CA
 std::tuple<ErrorCode, std::string>
-ChallengeEmail::handleChallengeRequest(const Block& params, CaState& request)
+ChallengeEmail::handleChallengeRequest(const Block& params, ca::RequestState& request)
 {
   params.parse();
   auto currentTime = time::system_clock::now();
@@ -157,7 +157,7 @@
 
 void
 ChallengeEmail::sendEmail(const std::string& emailAddress, const std::string& secret,
-                          const CaState& request) const
+                          const ca::RequestState& request) const
 {
   std::string command = m_sendEmailScript;
   command += " \"" + emailAddress + "\" \"" + secret + "\" \"" + request.m_caPrefix.toUri() + "\" \"" + request.m_cert.getName().toUri() + "\"";
diff --git a/src/identity-challenge/challenge-email.hpp b/src/identity-challenge/challenge-email.hpp
index 8fc6af5..9dbcedd 100644
--- a/src/identity-challenge/challenge-email.hpp
+++ b/src/identity-challenge/challenge-email.hpp
@@ -57,7 +57,7 @@
 
   // For CA
   std::tuple<ErrorCode, std::string>
-  handleChallengeRequest(const Block& params, CaState& request) override;
+  handleChallengeRequest(const Block& params, ca::RequestState& request) override;
 
   // For Client
   std::vector<std::tuple<std::string, std::string>>
@@ -81,7 +81,7 @@
 
   void
   sendEmail(const std::string& emailAddress, const std::string& secret,
-            const CaState& request) const;
+            const ca::RequestState& request) const;
 
 private:
   std::string m_sendEmailScript;
diff --git a/src/identity-challenge/challenge-module.cpp b/src/identity-challenge/challenge-module.cpp
index 03feeeb..2208e83 100644
--- a/src/identity-challenge/challenge-module.cpp
+++ b/src/identity-challenge/challenge-module.cpp
@@ -73,7 +73,7 @@
 }
 
 std::tuple<ErrorCode, std::string>
-ChallengeModule::returnWithError(CaState& request, ErrorCode errorCode, std::string&& errorInfo)
+ChallengeModule::returnWithError(ca::RequestState& request, ErrorCode errorCode, std::string&& errorInfo)
 {
   request.m_status = Status::FAILURE;
   request.m_challengeType = "";
@@ -82,17 +82,17 @@
 }
 
 std::tuple<ErrorCode, std::string>
-ChallengeModule::returnWithNewChallengeStatus(CaState& request, const std::string& challengeStatus,
+ChallengeModule::returnWithNewChallengeStatus(ca::RequestState& request, const std::string& challengeStatus,
                                               JsonSection&& challengeSecret, size_t remainingTries, time::seconds remainingTime)
 {
   request.m_status = Status::CHALLENGE;
   request.m_challengeType = CHALLENGE_TYPE;
-  request.m_challengeState = ChallengeState(challengeStatus, time::system_clock::now(), remainingTries, remainingTime, std::move(challengeSecret));
+  request.m_challengeState = ca::ChallengeState(challengeStatus, time::system_clock::now(), remainingTries, remainingTime, std::move(challengeSecret));
   return std::make_tuple(ErrorCode::NO_ERROR, "");
 }
 
 std::tuple<ErrorCode, std::string>
-ChallengeModule::returnWithSuccess(CaState& request)
+ChallengeModule::returnWithSuccess(ca::RequestState& request)
 {
   request.m_status = Status::PENDING;
   request.m_challengeType = CHALLENGE_TYPE;
diff --git a/src/identity-challenge/challenge-module.hpp b/src/identity-challenge/challenge-module.hpp
index 22c6a4c..f1c942f 100644
--- a/src/identity-challenge/challenge-module.hpp
+++ b/src/identity-challenge/challenge-module.hpp
@@ -51,7 +51,7 @@
 
   // For CA
   virtual std::tuple<ErrorCode, std::string>
-  handleChallengeRequest(const Block& params, CaState& request) = 0;
+  handleChallengeRequest(const Block& params, ca::RequestState& request) = 0;
 
   // For Client
   virtual std::vector<std::tuple<std::string, std::string>>
@@ -68,14 +68,14 @@
 protected:
   // used by challenge modules
   std::tuple<ErrorCode, std::string>
-  returnWithError(CaState& request, ErrorCode errorCode, std::string&& errorInfo);
+  returnWithError(ca::RequestState& request, ErrorCode errorCode, std::string&& errorInfo);
 
   std::tuple<ErrorCode, std::string>
-  returnWithNewChallengeStatus(CaState& request, const std::string& challengeStatus,
+  returnWithNewChallengeStatus(ca::RequestState& request, const std::string& challengeStatus,
                                JsonSection&& challengeSecret, size_t remainingTries, time::seconds remainingTime);
 
   std::tuple<ErrorCode, std::string>
-  returnWithSuccess(CaState& request);
+  returnWithSuccess(ca::RequestState& request);
 
 public:
   const std::string CHALLENGE_TYPE;
diff --git a/src/identity-challenge/challenge-pin.cpp b/src/identity-challenge/challenge-pin.cpp
index c9f98ba..726771f 100644
--- a/src/identity-challenge/challenge-pin.cpp
+++ b/src/identity-challenge/challenge-pin.cpp
@@ -38,7 +38,7 @@
 
 // For CA
 std::tuple<ErrorCode, std::string>
-ChallengePin::handleChallengeRequest(const Block& params, CaState& request)
+ChallengePin::handleChallengeRequest(const Block& params, ca::RequestState& request)
 {
   params.parse();
   auto currentTime = time::system_clock::now();
diff --git a/src/identity-challenge/challenge-pin.hpp b/src/identity-challenge/challenge-pin.hpp
index b942c4d..10b23d4 100644
--- a/src/identity-challenge/challenge-pin.hpp
+++ b/src/identity-challenge/challenge-pin.hpp
@@ -52,7 +52,7 @@
 
   // For CA
   std::tuple<ErrorCode, std::string>
-  handleChallengeRequest(const Block& params, CaState& request) override;
+  handleChallengeRequest(const Block& params, ca::RequestState& request) override;
 
   // For Client
   std::vector<std::tuple<std::string, std::string>>
