diff --git a/tests/unit-tests/bench.t.cpp b/tests/unit-tests/bench.t.cpp
index 1fffef1..d036d88 100644
--- a/tests/unit-tests/bench.t.cpp
+++ b/tests/unit-tests/bench.t.cpp
@@ -128,8 +128,8 @@
       BOOST_CHECK(security::verifySignature(response, cert));
 
       requester::Requester::onChallengeResponse(state, response);
-      BOOST_CHECK(state.m_status == Status::CHALLENGE);
-      BOOST_CHECK_EQUAL(state.m_challengeStatus, ChallengePin::NEED_CODE);
+      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));
     }
@@ -138,8 +138,8 @@
       BOOST_CHECK(security::verifySignature(response, cert));
 
       requester::Requester::onChallengeResponse(state, response);
-      BOOST_CHECK(state.m_status == Status::CHALLENGE);
-      BOOST_CHECK_EQUAL(state.m_challengeStatus, ChallengePin::WRONG_CODE);
+      BOOST_CHECK(state.status == Status::CHALLENGE);
+      BOOST_CHECK_EQUAL(state.challengeStatus, ChallengePin::WRONG_CODE);
 
       auto paramList = requester::Requester::selectOrContinueChallenge(state, "pin");
       auto request = ca.getCertificateRequest(*challengeInterest2);
@@ -153,7 +153,7 @@
       count++;
       BOOST_CHECK(security::verifySignature(response, cert));
       requester::Requester::onChallengeResponse(state, response);
-      BOOST_CHECK(state.m_status == Status::SUCCESS);
+      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 a74db0d..9ca8a33 100644
--- a/tests/unit-tests/ca-module.t.cpp
+++ b/tests/unit-tests/ca-module.t.cpp
@@ -38,7 +38,7 @@
 {
   util::DummyClientFace face(io, m_keyChain, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1", "ca-storage-memory");
-  BOOST_CHECK_EQUAL(ca.getCaConf().m_caProfile.m_caPrefix, "/ndn");
+  BOOST_CHECK_EQUAL(ca.getCaConf().caProfile.m_caPrefix, "/ndn");
 
   advanceClocks(time::milliseconds(20), 60);
   BOOST_CHECK_EQUAL(ca.m_registeredPrefixHandles.size(), 1); // removed local discovery registration
@@ -260,7 +260,7 @@
     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;
-    BOOST_CHECK_EQUAL_COLLECTIONS(state.m_aesKey.begin(), state.m_aesKey.end(),
+    BOOST_CHECK_EQUAL_COLLECTIONS(state.aesKey.begin(), state.aesKey.end(),
                                   ca_encryption_key.begin(), ca_encryption_key.end());
   });
   face.receive(*interest);
@@ -407,8 +407,8 @@
       BOOST_CHECK(security::verifySignature(response, cert));
 
       requester::Requester::onChallengeResponse(state, response);
-      BOOST_CHECK(state.m_status == Status::CHALLENGE);
-      BOOST_CHECK_EQUAL(state.m_challengeStatus, ChallengePin::NEED_CODE);
+      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));
     }
@@ -417,8 +417,8 @@
       BOOST_CHECK(security::verifySignature(response, cert));
 
       requester::Requester::onChallengeResponse(state, response);
-      BOOST_CHECK(state.m_status == Status::CHALLENGE);
-      BOOST_CHECK_EQUAL(state.m_challengeStatus, ChallengePin::WRONG_CODE);
+      BOOST_CHECK(state.status == Status::CHALLENGE);
+      BOOST_CHECK_EQUAL(state.challengeStatus, ChallengePin::WRONG_CODE);
 
       auto paramList = requester::Requester::selectOrContinueChallenge(state, "pin");
       auto request = ca.getCertificateRequest(*challengeInterest2);
@@ -430,7 +430,7 @@
       count++;
       BOOST_CHECK(security::verifySignature(response, cert));
       requester::Requester::onChallengeResponse(state, response);
-      BOOST_CHECK(state.m_status == Status::SUCCESS);
+      BOOST_CHECK(state.status == Status::SUCCESS);
     }
   });
 
@@ -507,7 +507,7 @@
     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;
-    BOOST_CHECK_EQUAL_COLLECTIONS(state.m_aesKey.begin(), state.m_aesKey.end(),
+    BOOST_CHECK_EQUAL_COLLECTIONS(state.aesKey.begin(), state.aesKey.end(),
                                   ca_encryption_key.begin(), ca_encryption_key.end());
   });
   face.receive(*interest);
diff --git a/tests/unit-tests/configuration.t.cpp b/tests/unit-tests/configuration.t.cpp
index 999b0a9..c8dcee9 100644
--- a/tests/unit-tests/configuration.t.cpp
+++ b/tests/unit-tests/configuration.t.cpp
@@ -33,36 +33,36 @@
 {
   ca::CaConfig config;
   config.load("tests/unit-tests/config-files/config-ca-1");
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_caPrefix, "/ndn");
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_caInfo, "ndn testbed ca");
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_maxValidityPeriod, time::seconds(864000));
-  BOOST_CHECK_EQUAL(*config.m_caProfile.m_maxSuffixLength, 3);
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_probeParameterKeys.size(), 1);
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_probeParameterKeys.front(), "full name");
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_supportedChallenges.size(), 1);
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_supportedChallenges.front(), "pin");
+  BOOST_CHECK_EQUAL(config.caProfile.m_caPrefix, "/ndn");
+  BOOST_CHECK_EQUAL(config.caProfile.m_caInfo, "ndn testbed ca");
+  BOOST_CHECK_EQUAL(config.caProfile.m_maxValidityPeriod, time::seconds(864000));
+  BOOST_CHECK_EQUAL(*config.caProfile.m_maxSuffixLength, 3);
+  BOOST_CHECK_EQUAL(config.caProfile.m_probeParameterKeys.size(), 1);
+  BOOST_CHECK_EQUAL(config.caProfile.m_probeParameterKeys.front(), "full name");
+  BOOST_CHECK_EQUAL(config.caProfile.m_supportedChallenges.size(), 1);
+  BOOST_CHECK_EQUAL(config.caProfile.m_supportedChallenges.front(), "pin");
 
   config.load("tests/unit-tests/config-files/config-ca-2");
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_caPrefix, "/ndn");
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_caInfo, "missing max validity period, max suffix length, and probe");
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_maxValidityPeriod, time::seconds(86400));
-  BOOST_CHECK(!config.m_caProfile.m_maxSuffixLength.has_value());
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_probeParameterKeys.size(), 0);
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_supportedChallenges.size(), 1);
-  BOOST_CHECK_EQUAL(config.m_caProfile.m_supportedChallenges.front(), "pin");
+  BOOST_CHECK_EQUAL(config.caProfile.m_caPrefix, "/ndn");
+  BOOST_CHECK_EQUAL(config.caProfile.m_caInfo, "missing max validity period, max suffix length, and probe");
+  BOOST_CHECK_EQUAL(config.caProfile.m_maxValidityPeriod, time::seconds(86400));
+  BOOST_CHECK(!config.caProfile.m_maxSuffixLength.has_value());
+  BOOST_CHECK_EQUAL(config.caProfile.m_probeParameterKeys.size(), 0);
+  BOOST_CHECK_EQUAL(config.caProfile.m_supportedChallenges.size(), 1);
+  BOOST_CHECK_EQUAL(config.caProfile.m_supportedChallenges.front(), "pin");
 
   config.load("tests/unit-tests/config-files/config-ca-5");
-  BOOST_CHECK_EQUAL(config.m_redirection[0]->getName(),
+  BOOST_CHECK_EQUAL(config.redirection[0]->getName(),
                     "/ndn/site1/KEY/%11%BC%22%F4c%15%FF%17/self/%FD%00%00%01Y%C8%14%D9%A5");
-  BOOST_CHECK_EQUAL(config.m_nameAssignmentFuncs.size(), 3);
-  BOOST_CHECK_EQUAL(config.m_nameAssignmentFuncs[0]->m_nameFormat[0], "group");
-  BOOST_CHECK_EQUAL(config.m_nameAssignmentFuncs[0]->m_nameFormat[1], "email");
+  BOOST_CHECK_EQUAL(config.nameAssignmentFuncs.size(), 3);
+  BOOST_CHECK_EQUAL(config.nameAssignmentFuncs[0]->m_nameFormat[0], "group");
+  BOOST_CHECK_EQUAL(config.nameAssignmentFuncs[0]->m_nameFormat[1], "email");
   std::multimap<std::string, std::string> params;
   params.emplace("email", "1@1.edu");
   params.emplace("group", "irl");
   params.emplace("name", "ndncert");
   std::vector<Name> names;
-  for (auto& assignment : config.m_nameAssignmentFuncs) {
+  for (auto& assignment : config.nameAssignmentFuncs) {
     auto results = assignment->assignName(params);
     BOOST_CHECK_EQUAL(results.size(), 1);
     names.insert(names.end(), results.begin(), results.end());
diff --git a/tests/unit-tests/protocol-encoders.t.cpp b/tests/unit-tests/protocol-encoders.t.cpp
index fd4d444..ad301bd 100644
--- a/tests/unit-tests/protocol-encoders.t.cpp
+++ b/tests/unit-tests/protocol-encoders.t.cpp
@@ -42,15 +42,15 @@
   caCache.load("tests/unit-tests/config-files/config-client-1");
   auto& cert = caCache.getKnownProfiles().front().m_cert;
 
-  auto b = infotlv::encodeDataContent(config.m_caProfile, *cert);
+  auto b = infotlv::encodeDataContent(config.caProfile, *cert);
   auto item = infotlv::decodeDataContent(b);
 
   BOOST_CHECK_EQUAL(*item.m_cert, *cert);
-  BOOST_CHECK_EQUAL(item.m_caInfo, config.m_caProfile.m_caInfo);
-  BOOST_CHECK_EQUAL(item.m_caPrefix, config.m_caProfile.m_caPrefix);
+  BOOST_CHECK_EQUAL(item.m_caInfo, config.caProfile.m_caInfo);
+  BOOST_CHECK_EQUAL(item.m_caPrefix, config.caProfile.m_caPrefix);
   BOOST_CHECK_EQUAL_COLLECTIONS(item.m_probeParameterKeys.begin(), item.m_probeParameterKeys.end(),
-                                config.m_caProfile.m_probeParameterKeys.begin(), config.m_caProfile.m_probeParameterKeys.end());
-  BOOST_CHECK_EQUAL(item.m_maxValidityPeriod, config.m_caProfile.m_maxValidityPeriod);
+                                config.caProfile.m_probeParameterKeys.begin(), config.caProfile.m_probeParameterKeys.end());
+  BOOST_CHECK_EQUAL(item.m_maxValidityPeriod, config.caProfile.m_maxValidityPeriod);
 }
 
 BOOST_AUTO_TEST_CASE(ErrorEncoding)
@@ -81,7 +81,7 @@
   std::vector<Name> names;
   names.emplace_back("/ndn/1");
   names.emplace_back("/ndn/2");
-  auto b = probetlv::encodeDataContent(names, 2, config.m_redirection);
+  auto b = probetlv::encodeDataContent(names, 2, config.redirection);
   std::vector<std::pair<Name, int>> retNames;
   std::vector<Name> redirection;
   probetlv::decodeDataContent(b, retNames, redirection);
@@ -92,10 +92,10 @@
     BOOST_CHECK_EQUAL(it1->first, *it2);
     BOOST_CHECK_EQUAL(it1->second, 2);
   }
-  BOOST_CHECK_EQUAL(redirection.size(), config.m_redirection.size());
+  BOOST_CHECK_EQUAL(redirection.size(), config.redirection.size());
   auto it3 = redirection.begin();
-  auto it4 = config.m_redirection.begin();
-  for (; it3 != redirection.end() && it4 != config.m_redirection.end(); it3++, it4++) {
+  auto it4 = config.redirection.begin();
+  for (; it3 != redirection.end() && it4 != config.redirection.end(); it3++, it4++) {
     BOOST_CHECK_EQUAL(*it3, (*it4)->getFullName());
   }
 }
@@ -124,7 +124,7 @@
   std::vector<uint8_t> pub = ECDHState().getSelfPubKey();
   std::array<uint8_t, 32> salt = {{101}};
   RequestId id = {{102}};
-  std::list<std::string> list;
+  std::vector<std::string> list;
   list.emplace_back("abc");
   list.emplace_back("def");
   auto b = requesttlv::encodeDataContent(pub, salt, id, Status::BEFORE_CHALLENGE, list);
@@ -160,16 +160,16 @@
   auto contentBlock = challengetlv::encodeDataContent(state, Name("/ndn/ucla/a/b/c"));
 
   requester::RequestState context(m_keyChain, caCache.getKnownProfiles().front(), RequestType::NEW);
-  context.m_requestId = id;
-  std::memcpy(context.m_aesKey.data(), key, sizeof(key));
+  context.requestId = id;
+  std::memcpy(context.aesKey.data(), key, sizeof(key));
   advanceClocks(time::seconds(10));
   challengetlv::decodeDataContent(contentBlock, context);
 
-  BOOST_CHECK_EQUAL(static_cast<size_t>(context.m_status), static_cast<size_t>(Status::PENDING));
-  BOOST_CHECK_EQUAL(context.m_challengeStatus, "test");
-  BOOST_CHECK_EQUAL(context.m_remainingTries, 3);
-  BOOST_CHECK_EQUAL(context.m_freshBefore, tp + time::seconds(3600) + time::seconds(10));
-  BOOST_CHECK_EQUAL(context.m_issuedCertName, "/ndn/ucla/a/b/c");
+  BOOST_CHECK_EQUAL(static_cast<size_t>(context.status), static_cast<size_t>(Status::PENDING));
+  BOOST_CHECK_EQUAL(context.challengeStatus, "test");
+  BOOST_CHECK_EQUAL(context.remainingTries, 3);
+  BOOST_CHECK_EQUAL(context.freshBefore, tp + time::seconds(3600) + time::seconds(10));
+  BOOST_CHECK_EQUAL(context.issuedCertName, "/ndn/ucla/a/b/c");
 }
 
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/unit-tests/requester.t.cpp b/tests/unit-tests/requester.t.cpp
index 8fc2fe5..b9d0302 100644
--- a/tests/unit-tests/requester.t.cpp
+++ b/tests/unit-tests/requester.t.cpp
@@ -81,7 +81,7 @@
   Data reply;
   reply.setName(Name("/site/CA/PROBE"));
   reply.setFreshnessPeriod(time::seconds(100));
-  reply.setContent(probetlv::encodeDataContent(availableNames, 3, ca.m_config.m_redirection));
+  reply.setContent(probetlv::encodeDataContent(availableNames, 3, ca.m_config.redirection));
   m_keyChain.sign(reply, signingByIdentity(identity));
 
   std::vector<std::pair<Name, int>> names;
