diff --git a/src/ca-detail/ca-memory.cpp b/src/ca-detail/ca-memory.cpp
index 437afa4..a81f4bf 100644
--- a/src/ca-detail/ca-memory.cpp
+++ b/src/ca-detail/ca-memory.cpp
@@ -30,7 +30,7 @@
 
 NDNCERT_REGISTER_CA_STORAGE(CaMemory);
 
-CertificateRequest
+RequestState
 CaMemory::getRequest(const std::string& requestId)
 {
   auto search = m_requests.find(requestId);
@@ -41,7 +41,7 @@
 }
 
 void
-CaMemory::addRequest(const CertificateRequest& request)
+CaMemory::addRequest(const RequestState& request)
 {
   for (auto& entry : m_requests) {
     const auto& existingRequest = entry.second;
@@ -68,7 +68,7 @@
 }
 
 void
-CaMemory::updateRequest(const CertificateRequest& request)
+CaMemory::updateRequest(const RequestState& request)
 {
   m_requests[request.m_requestId] = request;
 }
@@ -82,20 +82,20 @@
   }
 }
 
-std::list<CertificateRequest>
+std::list<RequestState>
 CaMemory::listAllRequests()
 {
-  std::list<CertificateRequest> result;
+  std::list<RequestState> result;
   for (const auto& entry : m_requests) {
     result.push_back(entry.second);
   }
   return result;
 }
 
-std::list<CertificateRequest>
+std::list<RequestState>
 CaMemory::listAllRequests(const Name& caName)
 {
-  std::list<CertificateRequest> result;
+  std::list<RequestState> result;
   for (const auto& entry : m_requests) {
     if (entry.second.m_caPrefix == caName) {
       result.push_back(entry.second);
diff --git a/src/ca-detail/ca-memory.hpp b/src/ca-detail/ca-memory.hpp
index 859c726..19e7d4f 100644
--- a/src/ca-detail/ca-memory.hpp
+++ b/src/ca-detail/ca-memory.hpp
@@ -33,22 +33,22 @@
 
 public:
   // certificate request related
-  CertificateRequest
+  RequestState
   getRequest(const std::string& requestId) override;
 
   void
-  addRequest(const CertificateRequest& request) override;
+  addRequest(const RequestState& request) override;
 
   void
-  updateRequest(const CertificateRequest& request) override;
+  updateRequest(const RequestState& request) override;
 
   void
   deleteRequest(const std::string& requestId) override;
 
-  std::list<CertificateRequest>
+  std::list<RequestState>
   listAllRequests() override;
 
-  std::list<CertificateRequest>
+  std::list<RequestState>
   listAllRequests(const Name& caName) override;
 
   // certificate related
@@ -71,7 +71,7 @@
   listAllIssuedCertificates(const Name& caName) override;
 
 private:
-  std::map<std::string, CertificateRequest> m_requests;
+  std::map<std::string, RequestState> m_requests;
   std::map<std::string, security::v2::Certificate> m_issuedCerts;
 };
 
diff --git a/src/ca-detail/ca-sqlite.cpp b/src/ca-detail/ca-sqlite.cpp
index a73f46c..905bfa5 100644
--- a/src/ca-detail/ca-sqlite.cpp
+++ b/src/ca-detail/ca-sqlite.cpp
@@ -113,7 +113,7 @@
   sqlite3_close(m_database);
 }
 
-CertificateRequest
+RequestState
 CaSqlite::getRequest(const std::string& requestId)
 {
   Sqlite3Statement statement(m_database,
@@ -136,13 +136,13 @@
     auto remainingTime = statement.getInt(9);
     auto requestType = static_cast<RequestType>(statement.getInt(10));
     if (challengeType != "") {
-      return CertificateRequest(caName, requestId, requestType, status, cert,
+      return RequestState(caName, requestId, requestType, status, cert,
                                 challengeType, challengeStatus, time::fromIsoString(challengeTp),
                                 remainingTries, time::seconds(remainingTime),
                                 convertString2Json(challengeSecrets));
     }
     else {
-      return CertificateRequest(caName, requestId, requestType, status, cert);
+      return RequestState(caName, requestId, requestType, status, cert);
     }
   }
   else {
@@ -151,7 +151,7 @@
 }
 
 void
-CaSqlite::addRequest(const CertificateRequest& request)
+CaSqlite::addRequest(const RequestState& request)
 {
   // check whether request is there already
   auto keyNameTlv = request.m_cert.getKeyName().wireEncode();
@@ -197,7 +197,7 @@
 }
 
 void
-CaSqlite::updateRequest(const CertificateRequest& request)
+CaSqlite::updateRequest(const RequestState& request)
 {
   Sqlite3Statement statement(m_database,
                              R"_SQLTEXT_(UPDATE CertRequests
@@ -228,10 +228,10 @@
   }
 }
 
-std::list<CertificateRequest>
+std::list<RequestState>
 CaSqlite::listAllRequests()
 {
-  std::list<CertificateRequest> result;
+  std::list<RequestState> result;
   Sqlite3Statement statement(m_database, R"_SQLTEXT_(SELECT id, request_id, ca_name, status,
                              challenge_status, cert_key_name, cert_request, challenge_type, challenge_secrets,
                              challenge_tp, remaining_tries, remaining_time, request_type
@@ -249,22 +249,22 @@
     auto remainingTime = statement.getInt(11);
     auto requestType = static_cast<RequestType>(statement.getInt(12));
     if (challengeType != "") {
-      result.push_back(CertificateRequest(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)));
     }
     else {
-      result.push_back(CertificateRequest(caName, requestId, requestType, status, cert));
+      result.push_back(RequestState(caName, requestId, requestType, status, cert));
     }
   }
   return result;
 }
 
-std::list<CertificateRequest>
+std::list<RequestState>
 CaSqlite::listAllRequests(const Name& caName)
 {
-  std::list<CertificateRequest> result;
+  std::list<RequestState> result;
   Sqlite3Statement statement(m_database,
                              R"_SQLTEXT_(SELECT id, request_id, ca_name, status,
                              challenge_status, cert_key_name, cert_request, challenge_type, challenge_secrets,
@@ -285,13 +285,13 @@
     auto remainingTime = statement.getInt(11);
     auto requestType = static_cast<RequestType>(statement.getInt(12));
     if (challengeType != "") {
-      result.push_back(CertificateRequest(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)));
     }
     else {
-      result.push_back(CertificateRequest(caName, requestId, requestType, status, cert));
+      result.push_back(RequestState(caName, requestId, requestType, status, cert));
     }
   }
   return result;
diff --git a/src/ca-detail/ca-sqlite.hpp b/src/ca-detail/ca-sqlite.hpp
index 200361d..2d22a21 100644
--- a/src/ca-detail/ca-sqlite.hpp
+++ b/src/ca-detail/ca-sqlite.hpp
@@ -22,7 +22,7 @@
 #define NDNCERT_CA_DETAIL_CA_SQLITE_HPP
 
 #include "../ca-module.hpp"
-#include "../certificate-request.hpp"
+#include "../request-state.hpp"
 
 struct sqlite3;
 
@@ -41,22 +41,22 @@
 
 public:
   // certificate request related
-  CertificateRequest
+  RequestState
   getRequest(const std::string& requestId) override;
 
   void
-  addRequest(const CertificateRequest& request) override;
+  addRequest(const RequestState& request) override;
 
   void
-  updateRequest(const CertificateRequest& request) override;
+  updateRequest(const RequestState& request) override;
 
   void
   deleteRequest(const std::string& requestId) override;
 
-  std::list<CertificateRequest>
+  std::list<RequestState>
   listAllRequests() override;
 
-  std::list<CertificateRequest>
+  std::list<RequestState>
   listAllRequests(const Name& caName) override;
 
   // certificate related
