diff --git a/tests/unit-tests/bench.t.cpp b/tests/unit-tests/bench.t.cpp
index 4877237..6f7b61c 100644
--- a/tests/unit-tests/bench.t.cpp
+++ b/tests/unit-tests/bench.t.cpp
@@ -21,7 +21,7 @@
 #include "ca-module.hpp"
 #include "challenge/challenge-pin.hpp"
 #include "detail/info-encoder.hpp"
-#include "requester.hpp"
+#include "requester-request.hpp"
 #include "test-common.hpp"
 
 namespace ndn {
@@ -105,9 +105,9 @@
   CaProfile item;
   item.caPrefix = Name("/ndn");
   item.cert = std::make_shared<security::Certificate>(cert);
-  requester::RequestState state(m_keyChain, item, RequestType::NEW);
-  auto newInterest = requester::Requester::genNewInterest(state, Name("/ndn/alice"),
-                                                          time::system_clock::now(),
+  requester::Request state(m_keyChain, item, RequestType::NEW);
+  auto newInterest = state.genNewInterest(Name("/ndn/alice"),
+                                                        time::system_clock::now(),
                                                           time::system_clock::now() + time::days(1));
 
   // std::cout << "New Interest Size: " << newInterest->wireEncode().size() << std::endl;
@@ -121,40 +121,40 @@
   face.onSendData.connect([&](const Data& response) {
     if (Name("/ndn/CA/NEW").isPrefixOf(response.getName())) {
       // std::cout << "NEW Data Size: " << response.wireEncode().size() << std::endl;
-      auto challengeList = requester::Requester::onNewRenewRevokeResponse(state, response);
-      auto paramList = requester::Requester::selectOrContinueChallenge(state, "pin");
-      challengeInterest = requester::Requester::genChallengeInterest(state, std::move(paramList));
+      auto challengeList = state.onNewRenewRevokeResponse(response);
+      auto paramList = state.selectOrContinueChallenge("pin");
+      challengeInterest = state.genChallengeInterest(std::move(paramList));
     }
     else if (Name("/ndn/CA/CHALLENGE").isPrefixOf(response.getName()) && count == 0) {
       count++;
       BOOST_CHECK(security::verifySignature(response, cert));
 
-      requester::Requester::onChallengeResponse(state, response);
+      state.onChallengeResponse(response);
       BOOST_CHECK(state.status == Status::CHALLENGE);
       BOOST_CHECK_EQUAL(state.challengeStatus, ChallengePin::NEED_CODE);
-      auto paramList = requester::Requester::selectOrContinueChallenge(state, "pin");
-      challengeInterest2 = requester::Requester::genChallengeInterest(state, std::move(paramList));
+      auto paramList = state.selectOrContinueChallenge("pin");
+      challengeInterest2 = state.genChallengeInterest(std::move(paramList));
     }
     else if (Name("/ndn/CA/CHALLENGE").isPrefixOf(response.getName()) && count == 1) {
       count++;
       BOOST_CHECK(security::verifySignature(response, cert));
 
-      requester::Requester::onChallengeResponse(state, response);
+      state.onChallengeResponse(response);
       BOOST_CHECK(state.status == Status::CHALLENGE);
       BOOST_CHECK_EQUAL(state.challengeStatus, ChallengePin::WRONG_CODE);
 
-      auto paramList = requester::Requester::selectOrContinueChallenge(state, "pin");
+      auto paramList = state.selectOrContinueChallenge("pin");
       auto request = ca.getCertificateRequest(*challengeInterest2);
       auto secret = request->challengeState->secrets.get(ChallengePin::PARAMETER_KEY_CODE, "");
       paramList.begin()->second = secret;
-      challengeInterest3 = requester::Requester::genChallengeInterest(state, std::move(paramList));
+      challengeInterest3 = state.genChallengeInterest(std::move(paramList));
       // std::cout << "CHALLENGE Interest Size: " << challengeInterest3->wireEncode().size() << std::endl;
     }
     else if (Name("/ndn/CA/CHALLENGE").isPrefixOf(response.getName()) && count == 2) {
       // std::cout << "CHALLENGE Data Size: " << response.wireEncode().size() << std::endl;
       count++;
       BOOST_CHECK(security::verifySignature(response, cert));
-      requester::Requester::onChallengeResponse(state, response);
+      state.onChallengeResponse(response);
       BOOST_CHECK(state.status == Status::SUCCESS);
     }
   });
diff --git a/tests/unit-tests/ca-module.t.cpp b/tests/unit-tests/ca-module.t.cpp
index ed4f8f3..76dc1b8 100644
--- a/tests/unit-tests/ca-module.t.cpp
+++ b/tests/unit-tests/ca-module.t.cpp
@@ -23,7 +23,7 @@
 #include "challenge/challenge-email.hpp"
 #include "challenge/challenge-pin.hpp"
 #include "detail/info-encoder.hpp"
-#include "requester.hpp"
+#include "requester-request.hpp"
 #include "test-common.hpp"
 
 namespace ndn {
@@ -233,10 +233,10 @@
   CaProfile item;
   item.caPrefix = Name("/ndn");
   item.cert = std::make_shared<security::Certificate>(cert);
-  requester::RequestState state(m_keyChain, item, RequestType::NEW);
-  auto interest = requester::Requester::genNewInterest(state, Name("/ndn/zhiyi"),
-                                            time::system_clock::now(),
-                                            time::system_clock::now() + time::days(1));
+  requester::Request state(m_keyChain, item, RequestType::NEW);
+  auto interest = state.genNewInterest(Name("/ndn/zhiyi"),
+                                       time::system_clock::now(),
+                                       time::system_clock::now() + time::days(1));
 
   int count = 0;
   face.onSendData.connect([&](const Data& response) {
@@ -258,7 +258,7 @@
 
     BOOST_CHECK(challengeBlockCount != 0);
 
-    auto challengeList = requester::Requester::onNewRenewRevokeResponse(state, response);
+    auto challengeList = state.onNewRenewRevokeResponse(response);
     RequestId requestId;
     std::memcpy(requestId.data(), contentBlock.get(tlv::RequestId).value(), contentBlock.get(tlv::RequestId).value_size());
     auto ca_encryption_key = ca.getCaStorage()->getRequest(requestId).encryptionKey;
@@ -284,11 +284,11 @@
   CaProfile item;
   item.caPrefix = Name("/ndn");
   item.cert = std::make_shared<security::Certificate>(cert);
-  requester::RequestState state(m_keyChain, item, RequestType::NEW);
+  requester::Request state(m_keyChain, item, RequestType::NEW);
   auto current_tp = time::system_clock::now();
-  auto interest1 = requester::Requester::genNewInterest(state, Name("/ndn/zhiyi"), current_tp, current_tp - time::hours(1));
-  auto interest2 = requester::Requester::genNewInterest(state, Name("/ndn/zhiyi"), current_tp, current_tp + time::days(361));
-  auto interest3 = requester::Requester::genNewInterest(state, Name("/ndn/zhiyi"), current_tp - time::hours(1), current_tp + time::hours(2));
+  auto interest1 = state.genNewInterest(Name("/ndn/zhiyi"), current_tp, current_tp - time::hours(1));
+  auto interest2 = state.genNewInterest(Name("/ndn/zhiyi"), current_tp, current_tp + time::days(361));
+  auto interest3 = state.genNewInterest(Name("/ndn/zhiyi"), current_tp - time::hours(1), current_tp + time::hours(2));
   face.onSendData.connect([&](const Data& response) {
     auto contentTlv = response.getContent();
     contentTlv.parse();
@@ -315,13 +315,13 @@
   CaProfile item;
   item.caPrefix = Name("/ndn");
   item.cert = std::make_shared<security::Certificate>(cert);
-  requester::RequestState state(m_keyChain, item, RequestType::NEW);
+  requester::Request state(m_keyChain, item, RequestType::NEW);
 
-  auto interest1 = requester::Requester::genNewInterest(state, Name("/ndn/a"), time::system_clock::now(),
+  auto interest1 = state.genNewInterest(Name("/ndn/a"), time::system_clock::now(),
                                               time::system_clock::now() + time::days(1));
-  auto interest2 = requester::Requester::genNewInterest(state, Name("/ndn/a/b"), time::system_clock::now(),
+  auto interest2 = state.genNewInterest(Name("/ndn/a/b"), time::system_clock::now(),
                                               time::system_clock::now() + time::days(1));
-  auto interest3 = requester::Requester::genNewInterest(state, Name("/ndn/a/b/c/d"), time::system_clock::now(),
+  auto interest3 = state.genNewInterest(Name("/ndn/a/b/c/d"), time::system_clock::now(),
                                               time::system_clock::now() + time::days(1));
 
   face.onSendData.connect([&](const Data& response) {
@@ -356,11 +356,11 @@
   CaProfile item;
   item.caPrefix = Name("/ndn");
   item.cert = std::make_shared<security::Certificate>(cert);
-  requester::RequestState state(m_keyChain, item, RequestType::NEW);
+  requester::Request state(m_keyChain, item, RequestType::NEW);
 
   auto current_tp = time::system_clock::now();
-  auto interest1 = requester::Requester::genNewInterest(state, Name("/ndn"), current_tp, current_tp + time::days(1));
-  auto interest2 = requester::Requester::genNewInterest(state, Name("/ndn/a/b/c/d"), current_tp, current_tp + time::days(1));
+  auto interest1 = state.genNewInterest(Name("/ndn"), current_tp, current_tp + time::days(1));
+  auto interest2 = state.genNewInterest(Name("/ndn/a/b/c/d"), current_tp, current_tp + time::days(1));
   face.onSendData.connect([&](const Data& response) {
     auto contentTlv = response.getContent();
     contentTlv.parse();
@@ -387,9 +387,9 @@
   CaProfile item;
   item.caPrefix = Name("/ndn");
   item.cert = std::make_shared<security::Certificate>(cert);
-  requester::RequestState state(m_keyChain, item, RequestType::NEW);
+  requester::Request state(m_keyChain, item, RequestType::NEW);
 
-  auto newInterest = requester::Requester::genNewInterest(state, Name("/ndn/zhiyi"), time::system_clock::now(),
+  auto newInterest = state.genNewInterest(Name("/ndn/zhiyi"), time::system_clock::now(),
                                                 time::system_clock::now() + time::days(1));
 
   // generate CHALLENGE Interest
@@ -400,38 +400,38 @@
   int count = 0;
   face.onSendData.connect([&](const Data& response) {
     if (Name("/ndn/CA/NEW").isPrefixOf(response.getName())) {
-      auto challengeList = requester::Requester::onNewRenewRevokeResponse(state, response);
-      auto paramList = requester::Requester::selectOrContinueChallenge(state, "pin");
-      challengeInterest = requester::Requester::genChallengeInterest(state, std::move(paramList));
+      auto challengeList = state.onNewRenewRevokeResponse(response);
+      auto paramList = state.selectOrContinueChallenge("pin");
+      challengeInterest = state.genChallengeInterest(std::move(paramList));
     }
     else if (Name("/ndn/CA/CHALLENGE").isPrefixOf(response.getName()) && count == 0) {
       count++;
       BOOST_CHECK(security::verifySignature(response, cert));
 
-      requester::Requester::onChallengeResponse(state, response);
+      state.onChallengeResponse(response);
       BOOST_CHECK(state.status == Status::CHALLENGE);
       BOOST_CHECK_EQUAL(state.challengeStatus, ChallengePin::NEED_CODE);
-      auto paramList = requester::Requester::selectOrContinueChallenge(state, "pin");
-      challengeInterest2 = requester::Requester::genChallengeInterest(state, std::move(paramList));
+      auto paramList = state.selectOrContinueChallenge("pin");
+      challengeInterest2 = state.genChallengeInterest(std::move(paramList));
     }
     else if (Name("/ndn/CA/CHALLENGE").isPrefixOf(response.getName()) && count == 1) {
       count++;
       BOOST_CHECK(security::verifySignature(response, cert));
 
-      requester::Requester::onChallengeResponse(state, response);
+      state.onChallengeResponse(response);
       BOOST_CHECK(state.status == Status::CHALLENGE);
       BOOST_CHECK_EQUAL(state.challengeStatus, ChallengePin::WRONG_CODE);
 
-      auto paramList = requester::Requester::selectOrContinueChallenge(state, "pin");
+      auto paramList = state.selectOrContinueChallenge("pin");
       auto request = ca.getCertificateRequest(*challengeInterest2);
       auto secret = request->challengeState->secrets.get(ChallengePin::PARAMETER_KEY_CODE, "");
       paramList.begin()->second = secret;
-      challengeInterest3 = requester::Requester::genChallengeInterest(state, std::move(paramList));
+      challengeInterest3 = state.genChallengeInterest(std::move(paramList));
     }
     else if (Name("/ndn/CA/CHALLENGE").isPrefixOf(response.getName()) && count == 2) {
       count++;
       BOOST_CHECK(security::verifySignature(response, cert));
-      requester::Requester::onChallengeResponse(state, response);
+      state.onChallengeResponse(response);
       BOOST_CHECK(state.status == Status::SUCCESS);
     }
   });
@@ -481,9 +481,9 @@
   CaProfile item;
   item.caPrefix = Name("/ndn");
   item.cert = std::make_shared<security::Certificate>(cert);
-  requester::RequestState state(m_keyChain, item, RequestType::REVOKE);
+  requester::Request state(m_keyChain, item, RequestType::REVOKE);
 
-  auto interest = requester::Requester::genRevokeInterest(state, issuedCert);
+  auto interest = state.genRevokeInterest(issuedCert);
 
   int count = 0;
   face.onSendData.connect([&](const Data& response) {
@@ -505,7 +505,7 @@
 
     BOOST_CHECK(challengeBlockCount != 0);
 
-    auto challengeList = requester::Requester::onNewRenewRevokeResponse(state, response);
+    auto challengeList = state.onNewRenewRevokeResponse(response);
     RequestId requestId;
     std::memcpy(requestId.data(), contentBlock.get(tlv::RequestId).value(), contentBlock.get(tlv::RequestId).value_size());
     auto ca_encryption_key = ca.getCaStorage()->getRequest(requestId).encryptionKey;
@@ -544,9 +544,9 @@
   CaProfile item;
   item.caPrefix = Name("/ndn");
   item.cert = std::make_shared<security::Certificate>(cert);
-  requester::RequestState state(m_keyChain, item, RequestType::NEW);
+  requester::Request state(m_keyChain, item, RequestType::NEW);
 
-  auto interest = requester::Requester::genRevokeInterest(state, clientCert);
+  auto interest = state.genRevokeInterest(clientCert);
 
   bool receiveData = false;
   face.onSendData.connect([&](const Data& response) {
diff --git a/tests/unit-tests/protocol-encoders.t.cpp b/tests/unit-tests/protocol-encoders.t.cpp
index b522b06..5dd26b5 100644
--- a/tests/unit-tests/protocol-encoders.t.cpp
+++ b/tests/unit-tests/protocol-encoders.t.cpp
@@ -159,7 +159,7 @@
   state.challengeState = ca::ChallengeState("test", tp, 3, time::seconds(3600), JsonSection());
   auto contentBlock = challengetlv::encodeDataContent(state, Name("/ndn/ucla/a/b/c"));
 
-  requester::RequestState context(m_keyChain, caCache.getKnownProfiles().front(), RequestType::NEW);
+  requester::Request context(m_keyChain, caCache.getKnownProfiles().front(), RequestType::NEW);
   context.requestId = id;
   std::memcpy(context.aesKey.data(), key, sizeof(key));
   advanceClocks(time::seconds(10));
diff --git a/tests/unit-tests/requester.t.cpp b/tests/unit-tests/requester.t.cpp
index 50c38ad..1f07a3f 100644
--- a/tests/unit-tests/requester.t.cpp
+++ b/tests/unit-tests/requester.t.cpp
@@ -18,7 +18,7 @@
  * See AUTHORS.md for complete list of ndncert authors and contributors.
  */
 
-#include "requester.hpp"
+#include "requester-request.hpp"
 #include "detail/error-encoder.hpp"
 #include "detail/probe-encoder.hpp"
 #include "challenge/challenge-module.hpp"
@@ -51,7 +51,7 @@
   probeParams.emplace("email", "zhiyi@cs.ucla.edu");
   probeParams.emplace("uid", "987654321");
   probeParams.emplace("name", "Zhiyi Zhang");
-  auto firstInterest = Requester::genProbeInterest(ca_profile, std::move(probeParams));
+  auto firstInterest = Request::genProbeInterest(ca_profile, std::move(probeParams));
 
   BOOST_CHECK(firstInterest->getName().at(-1).isParametersSha256Digest());
   // ignore the last name component (ParametersSha256Digest)
@@ -86,7 +86,7 @@
 
   std::vector<std::pair<Name, int>> names;
   std::vector<Name> redirects;
-  Requester::onProbeResponse(reply, ca_profile, names, redirects);
+  Request::onProbeResponse(reply, ca_profile, names, redirects);
 
   // Test names and redirects are properly stored
   BOOST_CHECK_EQUAL(names.size(), 2);
@@ -109,7 +109,7 @@
   CaProfile item;
   item.caPrefix = Name("/site");
   item.cert = std::make_shared<security::Certificate>(cert);
-  RequestState state(m_keyChain, item, RequestType::NEW);
+  Request state(m_keyChain, item, RequestType::NEW);
 
   Data errorPacket;
   errorPacket.setName(Name("/site/pretend/this/is/error/packet"));
@@ -119,9 +119,9 @@
 
   std::vector<std::pair<Name, int>> ids;
   std::vector<Name> cas;
-  BOOST_CHECK_THROW(Requester::onProbeResponse(errorPacket, item, ids, cas), std::runtime_error);
-  BOOST_CHECK_THROW(Requester::onNewRenewRevokeResponse(state, errorPacket), std::runtime_error);
-  BOOST_CHECK_THROW(Requester::onChallengeResponse(state, errorPacket), std::runtime_error);
+  BOOST_CHECK_THROW(Request::onProbeResponse(errorPacket, item, ids, cas), std::runtime_error);
+  BOOST_CHECK_THROW(state.onNewRenewRevokeResponse(errorPacket), std::runtime_error);
+  BOOST_CHECK_THROW(state.onChallengeResponse(errorPacket), std::runtime_error);
 }
 
 BOOST_AUTO_TEST_SUITE_END() // TestRequester
