diff --git a/src/ca-detail/ca-memory.cpp b/src/ca-detail/ca-memory.cpp
index d6f6563..67fd57b 100644
--- a/src/ca-detail/ca-memory.cpp
+++ b/src/ca-detail/ca-memory.cpp
@@ -97,7 +97,7 @@
 {
   std::list<CertificateRequest> result;
   for (const auto& entry : m_requests) {
-    if (entry.second.m_caName == caName) {
+    if (entry.second.m_caPrefix == caName) {
       result.push_back(entry.second);
     }
   }
diff --git a/src/ca-detail/ca-sqlite.cpp b/src/ca-detail/ca-sqlite.cpp
index 6b5b4a2..dec5146 100644
--- a/src/ca-detail/ca-sqlite.cpp
+++ b/src/ca-detail/ca-sqlite.cpp
@@ -174,7 +174,7 @@
                              challenge_tp, remaining_tries, remaining_time, probe_token)
                              values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?))_SQLTEXT_");
     statement.bind(1, request.m_requestId, SQLITE_TRANSIENT);
-    statement.bind(2, request.m_caName.wireEncode(), SQLITE_TRANSIENT);
+    statement.bind(2, request.m_caPrefix.wireEncode(), SQLITE_TRANSIENT);
     statement.bind(3, request.m_status);
     statement.bind(4, request.m_challengeStatus, SQLITE_TRANSIENT);
     statement.bind(5, request.m_cert.getKeyName().wireEncode(),
@@ -199,7 +199,7 @@
                              challenge_tp, remaining_tries, remaining_time)
                              values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?))_SQLTEXT_");
     statement.bind(1, request.m_requestId, SQLITE_TRANSIENT);
-    statement.bind(2, request.m_caName.wireEncode(), SQLITE_TRANSIENT);
+    statement.bind(2, request.m_caPrefix.wireEncode(), SQLITE_TRANSIENT);
     statement.bind(3, request.m_status);
     statement.bind(4, request.m_challengeStatus, SQLITE_TRANSIENT);
     statement.bind(5, request.m_cert.getKeyName().wireEncode(),
diff --git a/src/ca-module.cpp b/src/ca-module.cpp
index 4398de7..0dd96da 100644
--- a/src/ca-module.cpp
+++ b/src/ca-module.cpp
@@ -74,7 +74,7 @@
   _LOG_TRACE("Prefix " << localhopInfoPrefix << " got registered");
 
   // register prefixes
-  Name prefix = m_config.m_caName;
+  Name prefix = m_config.m_caPrefix;
   prefix.append("CA");
 
   prefixId = m_face.registerPrefix(prefix,
@@ -125,7 +125,7 @@
   _LOG_TRACE("Received INFO request");
 
   const auto& pib = m_keyChain.getPib();
-  const auto& identity = pib.getIdentity(m_config.m_caName);
+  const auto& identity = pib.getIdentity(m_config.m_caPrefix);
   const auto& cert = identity.getDefaultKey().getDefaultCertificate();
   Block contentTLV = INFO::encodeContentFromCAConfig(m_config, cert);
   Data result;
@@ -134,7 +134,7 @@
   result.setContent(contentTLV);
   result.setFreshnessPeriod(DEFAULT_DATA_FRESHNESS_PERIOD);
 
-  m_keyChain.sign(result, signingByIdentity(m_config.m_caName));
+  m_keyChain.sign(result, signingByIdentity(m_config.m_caPrefix));
   m_face.put(result);
 
   _LOG_TRACE("Handle INFO: send out the INFO response");
@@ -168,7 +168,7 @@
     // if there is no app-specified name lookup, use a random name id
     availableId = std::to_string(random::generateSecureWord64());
   }
-  Name newIdentityName = m_config.m_caName;
+  Name newIdentityName = m_config.m_caPrefix;
   newIdentityName.append(availableId);
   _LOG_TRACE("Handle PROBE: generate an identity " << newIdentityName);
 
@@ -178,7 +178,7 @@
   result.setName(request.getName());
   result.setContent(contentTLV);
   result.setFreshnessPeriod(DEFAULT_DATA_FRESHNESS_PERIOD);
-  m_keyChain.sign(result, signingByIdentity(m_config.m_caName));
+  m_keyChain.sign(result, signingByIdentity(m_config.m_caPrefix));
   m_face.put(result);
   _LOG_TRACE("Handle PROBE: send out the PROBE response");
 }
@@ -240,9 +240,9 @@
   }
 
   // verify the self-signed certificate, the request, and the token
-  if (!m_config.m_caName.isPrefixOf(clientCert->getName()) // under ca prefix
+  if (!m_config.m_caPrefix.isPrefixOf(clientCert->getName()) // under ca prefix
       || !security::v2::Certificate::isValidName(clientCert->getName()) // is valid cert name
-      || clientCert->getName().size() != m_config.m_caName.size() + IS_SUBNAME_MIN_OFFSET) {
+      || clientCert->getName().size() != m_config.m_caPrefix.size() + IS_SUBNAME_MIN_OFFSET) {
     _LOG_ERROR("Invalid self-signed certificate name " << clientCert->getName());
     return;
   }
@@ -257,7 +257,7 @@
 
   // create new request instance
   std::string requestId = std::to_string(random::generateWord64());
-  CertificateRequest certRequest(m_config.m_caName, requestId, STATUS_BEFORE_CHALLENGE, *clientCert);
+  CertificateRequest certRequest(m_config.m_caPrefix, requestId, STATUS_BEFORE_CHALLENGE, *clientCert);
 
   try {
     m_storage->addRequest(certRequest);
@@ -274,7 +274,7 @@
                                       std::to_string(saltInt),
                                       certRequest,
                                       m_config.m_supportedChallenges));
-  m_keyChain.sign(result, signingByIdentity(m_config.m_caName));
+  m_keyChain.sign(result, signingByIdentity(m_config.m_caPrefix));
   m_face.put(result);
 
   if (m_config.m_statusUpdateCallback) {
@@ -385,7 +385,7 @@
   auto contentBlock = encodeBlockWithAesGcm128(tlv::Content, m_aesKey, payloadBuffer->data(),
                                                payloadBuffer->size(), (uint8_t*)"test", strlen("test"));
   result.setContent(contentBlock);
-  m_keyChain.sign(result, signingByIdentity(m_config.m_caName));
+  m_keyChain.sign(result, signingByIdentity(m_config.m_caPrefix));
   m_face.put(result);
 
   if (m_config.m_statusUpdateCallback) {
@@ -409,7 +409,7 @@
   SignatureInfo signatureInfo;
   signatureInfo.setValidityPeriod(period);
   security::SigningInfo signingInfo(security::SigningInfo::SIGNER_TYPE_ID,
-                                    m_config.m_caName, signatureInfo);
+                                    m_config.m_caPrefix, signatureInfo);
   newCert.setFreshnessPeriod(m_config.m_freshnessPeriod);
 
   m_keyChain.sign(newCert, signingInfo);
@@ -423,7 +423,7 @@
   std::string requestId;
   CertificateRequest certRequest;
   try {
-    requestId = readString(request.getName().at(m_config.m_caName.size() + 2));
+    requestId = readString(request.getName().at(m_config.m_caPrefix.size() + 2));
   }
   catch (const std::exception& e) {
     _LOG_ERROR("Cannot read the request ID out from the request: " << e.what());
@@ -493,12 +493,12 @@
 {
   JsonSection root;
   // ca-prefix
-  Name caName = m_config.m_caName;
+  Name caName = m_config.m_caPrefix;
   root.put("ca-prefix", caName.toUri());
 
   // ca-info
   const auto& pib = m_keyChain.getPib();
-  const auto& identity = pib.getIdentity(m_config.m_caName);
+  const auto& identity = pib.getIdentity(m_config.m_caPrefix);
   const auto& cert = identity.getDefaultKey().getDefaultCertificate();
   std::string caInfo;
   if (m_config.m_caInfo.empty()) {
diff --git a/src/certificate-request.cpp b/src/certificate-request.cpp
index 22b67b0..3798ea6 100644
--- a/src/certificate-request.cpp
+++ b/src/certificate-request.cpp
@@ -28,7 +28,7 @@
 
 CertificateRequest::CertificateRequest(const Name& caName, const std::string& requestId, int status,
                                        const security::v2::Certificate& cert)
-  : m_caName(caName)
+  : m_caPrefix(caName)
   , m_requestId(requestId)
   , m_status(status)
   , m_cert(cert)
@@ -39,7 +39,7 @@
                                        const std::string& challengeStatus, const std::string& challengeType,
                                        const std::string& challengeTp, int remainingTime, int remainingTries,
                                        const JsonSection& challengeSecrets, const security::v2::Certificate& cert)
-  : m_caName(caName)
+  : m_caPrefix(caName)
   , m_requestId(requestId)
   , m_status(status)
   , m_cert(cert)
@@ -62,7 +62,7 @@
 operator<<(std::ostream& os, const CertificateRequest& request)
 {
   os << "Request CA name:\n";
-  os << "  " << request.m_caName << "\n";
+  os << "  " << request.m_caPrefix << "\n";
   os << "Request ID:\n";
   os << "  " << request.m_requestId << "\n";
   if (request.m_status != -1) {
diff --git a/src/certificate-request.hpp b/src/certificate-request.hpp
index d44316c..216c21f 100644
--- a/src/certificate-request.hpp
+++ b/src/certificate-request.hpp
@@ -57,7 +57,7 @@
   setProbeToken(const std::shared_ptr<Data>& probeToken);
 
 public:
-  Name m_caName;
+  Name m_caPrefix;
   std::string m_requestId = "";
   int m_status = -1;
   security::v2::Certificate m_cert;
diff --git a/src/challenge-module/challenge-email.cpp b/src/challenge-module/challenge-email.cpp
index 4ec3c6f..c1e498a 100644
--- a/src/challenge-module/challenge-email.cpp
+++ b/src/challenge-module/challenge-email.cpp
@@ -219,7 +219,7 @@
 {
   std::string command = m_sendEmailScript;
   command += " \"" + emailAddress + "\" \"" + secret + "\" \""
-    + request.m_caName.toUri() + "\" \"" + request.m_cert.getName().toUri()  + "\"";
+    + request.m_caPrefix.toUri() + "\" \"" + request.m_cert.getName().toUri()  + "\"";
   int result = system(command.c_str());
   if (result == -1) {
     _LOG_TRACE("EmailSending Script " + m_sendEmailScript + " fails.");
diff --git a/src/client-config.cpp b/src/client-config.cpp
index 2aab26c..d03fc8e 100644
--- a/src/client-config.cpp
+++ b/src/client-config.cpp
@@ -65,7 +65,7 @@
   std::stringstream ss;
   for (const auto& item : m_caItems) {
     JsonSection caItem;
-    caItem.put("ca-prefix", item.m_caName.toUri());
+    caItem.put("ca-prefix", item.m_caPrefix.toUri());
     caItem.put("ca-info", item.m_caInfo);
     caItem.put("probe", item.m_probe);
     ss.str(std::string());
@@ -87,8 +87,8 @@
 ClientConfig::extractCaItem(const JsonSection& configSection)
 {
   ClientCaItem item;
-  item.m_caName = Name(configSection.get("ca-prefix", ""));
-  if (item.m_caName.empty()) {
+  item.m_caPrefix = Name(configSection.get("ca-prefix", ""));
+  if (item.m_caPrefix.empty()) {
     BOOST_THROW_EXCEPTION(Error("Cannot read ca-prefix from the config file"));
   }
   item.m_caInfo = configSection.get("ca-info", "");
@@ -105,7 +105,7 @@
 void
 ClientConfig::removeCaItem(const Name& caName)
 {
-  m_caItems.remove_if([&](const ClientCaItem& item) { return item.m_caName == caName; });
+  m_caItems.remove_if([&](const ClientCaItem& item) { return item.m_caPrefix == caName; });
 }
 
 }  // namespace ndncert
diff --git a/src/client-module.cpp b/src/client-module.cpp
index adad5d9..d6fdc14 100644
--- a/src/client-module.cpp
+++ b/src/client-module.cpp
@@ -70,7 +70,7 @@
 
   // verify the probe Data's sig
   if (!security::verifySignature(reply, caItem.m_anchor)) {
-    _LOG_ERROR("Cannot verify data signature from " << m_ca.m_caName.toUri());
+    _LOG_ERROR("Cannot verify data signature from " << m_ca.m_caPrefix.toUri());
     return false;
   }
   return true;
@@ -87,7 +87,7 @@
   // update the local config
   bool findItem = false;
   for (auto& item : m_config.m_caItems) {
-    if (item.m_caName == caItem.m_caName) {
+    if (item.m_caPrefix == caItem.m_caPrefix) {
       findItem = true;
       item = caItem;
     }
@@ -100,7 +100,7 @@
 shared_ptr<Interest>
 ClientModule::generateProbeInterest(const ClientCaItem& ca, const std::string& probeInfo)
 {
-  Name interestName = ca.m_caName;
+  Name interestName = ca.m_caPrefix;
   interestName.append("CA").append("PROBE");
   auto interest = make_shared<Interest>(interestName);
   interest->setMustBeFresh(true);
@@ -118,7 +118,7 @@
 ClientModule::onProbeResponse(const Data& reply)
 {
   if (!security::verifySignature(reply, m_ca.m_anchor)) {
-    _LOG_ERROR("Cannot verify data signature from " << m_ca.m_caName.toUri());
+    _LOG_ERROR("Cannot verify data signature from " << m_ca.m_caPrefix.toUri());
     return;
   }
 
@@ -143,7 +143,7 @@
   if (!identityName.empty()) { // if identityName is not empty, find the corresponding CA
     bool findCa = false;
     for (const auto& caItem : m_config.m_caItems) {
-      if (caItem.m_caName.isPrefixOf(identityName)) {
+      if (caItem.m_caPrefix.isPrefixOf(identityName)) {
         m_ca = caItem;
         findCa = true;
       }
@@ -160,7 +160,7 @@
     else {
       NDN_LOG_TRACE("Randomly create a new name because m_identityName is empty and the param is empty.");
       auto id = std::to_string(random::generateSecureWord64());
-      m_identityName = m_ca.m_caName;
+      m_identityName = m_ca.m_caPrefix;
       m_identityName.append(id);
     }
   }
@@ -195,7 +195,7 @@
   m_keyChain.sign(certRequest, signingByKey(m_key.getName()).setSignatureInfo(signatureInfo));
 
   // generate Interest packet
-  Name interestName = m_ca.m_caName;
+  Name interestName = m_ca.m_caPrefix;
   interestName.append("CA").append("NEW");
   auto interest = make_shared<Interest>(interestName);
   interest->setMustBeFresh(true);
@@ -213,7 +213,7 @@
 ClientModule::onNewResponse(const Data& reply)
 {
   if (!security::verifySignature(reply, m_ca.m_anchor)) {
-    _LOG_ERROR("Cannot verify data signature from " << m_ca.m_caName.toUri());
+    _LOG_ERROR("Cannot verify data signature from " << m_ca.m_caPrefix.toUri());
     return std::list<std::string>();
   }
   auto contentTLV = reply.getContent();
@@ -247,7 +247,7 @@
   challengeRequest.parse();
   m_challengeType = readString(challengeRequest.get(tlv_selected_challenge));
 
-  Name interestName = m_ca.m_caName;
+  Name interestName = m_ca.m_caPrefix;
   interestName.append("CA").append("CHALLENGE").append(m_requestId);
   auto interest = make_shared<Interest>(interestName);
   interest->setMustBeFresh(true);
@@ -267,7 +267,7 @@
 ClientModule::onChallengeResponse(const Data& reply)
 {
   if (!security::verifySignature(reply, m_ca.m_anchor)) {
-    _LOG_ERROR("Cannot verify data signature from " << m_ca.m_caName.toUri());
+    _LOG_ERROR("Cannot verify data signature from " << m_ca.m_caPrefix.toUri());
     return;
   }
   auto result = decodeBlockWithAesGcm128(reply.getContent(), m_aesKey, (const uint8_t*)"test", strlen("test"));
@@ -288,7 +288,7 @@
 shared_ptr<Interest>
 ClientModule::generateDownloadInterest()
 {
-  Name interestName = m_ca.m_caName;
+  Name interestName = m_ca.m_caPrefix;
   interestName.append("CA").append("DOWNLOAD").append(m_requestId);
   auto interest = make_shared<Interest>(interestName);
   interest->setMustBeFresh(true);
diff --git a/tests/unit-tests/ca-memory.t.cpp b/tests/unit-tests/ca-memory.t.cpp
index 3a9c2c4..c64d8f7 100644
--- a/tests/unit-tests/ca-memory.t.cpp
+++ b/tests/unit-tests/ca-memory.t.cpp
@@ -89,7 +89,7 @@
   auto result = storage.getRequest("123");
   BOOST_CHECK_EQUAL(request1.m_cert, result.m_cert);
   BOOST_CHECK_EQUAL(request1.m_status, result.m_status);
-  BOOST_CHECK_EQUAL(request1.m_caName, result.m_caName);
+  BOOST_CHECK_EQUAL(request1.m_caPrefix, result.m_caPrefix);
 
   JsonSection json;
   json.put("code", "1234");
@@ -101,7 +101,7 @@
   result = storage.getRequest("123");
   BOOST_CHECK_EQUAL(request2.m_cert, result.m_cert);
   BOOST_CHECK_EQUAL(request2.m_status, result.m_status);
-  BOOST_CHECK_EQUAL(request2.m_caName, result.m_caName);
+  BOOST_CHECK_EQUAL(request2.m_caPrefix, result.m_caPrefix);
 
   auto identity2 = addIdentity(Name("/ndn/site2"));
   auto key2 = identity2.getDefaultKey();
diff --git a/tests/unit-tests/ca-module.t.cpp b/tests/unit-tests/ca-module.t.cpp
index 13abf4b..25a5322 100644
--- a/tests/unit-tests/ca-module.t.cpp
+++ b/tests/unit-tests/ca-module.t.cpp
@@ -111,7 +111,7 @@
       BOOST_CHECK(security::verifySignature(response, cert));
       auto contentJson = ClientModule::getJsonFromData(response);
       auto caItem = ClientConfig::extractCaItem(contentJson);
-      BOOST_CHECK_EQUAL(caItem.m_caName, "/ndn");
+      BOOST_CHECK_EQUAL(caItem.m_caPrefix, "/ndn");
       BOOST_CHECK_EQUAL(caItem.m_probe, "");
       BOOST_CHECK_EQUAL(caItem.m_anchor.wireEncode(), cert.wireEncode());
       BOOST_CHECK_EQUAL(caItem.m_caInfo, "ndn testbed ca");
@@ -163,7 +163,7 @@
 
   ClientModule client(m_keyChain);
   ClientCaItem item;
-  item.m_caName = Name("/ndn");
+  item.m_caPrefix = Name("/ndn");
   item.m_anchor = cert;
   client.getClientConf().m_caItems.push_back(item);
 
@@ -204,7 +204,7 @@
 
   ClientModule client(m_keyChain);
   ClientCaItem item;
-  item.m_caName = Name("/ndn");
+  item.m_caPrefix = Name("/ndn");
   item.m_anchor = cert;
   client.getClientConf().m_caItems.push_back(item);
   auto current_tp = time::system_clock::now();
@@ -238,12 +238,12 @@
 
   ClientModule client(m_keyChain);
   ClientCaItem item;
-  item.m_caName = Name("/ndn");
+  item.m_caPrefix = Name("/ndn");
   item.m_anchor = cert;
   client.getClientConf().m_caItems.push_back(item);
 
   auto data = make_shared<Data>(Name("/ndn/CA/PROBE/123"));
-  m_keyChain.sign(*data, signingByIdentity(ca.m_config.m_caName));
+  m_keyChain.sign(*data, signingByIdentity(ca.m_config.m_caPrefix));
 
   auto interest = client.generateNewInterest(time::system_clock::now(),
                                              time::system_clock::now() + time::days(10),
@@ -273,7 +273,7 @@
   // generate NEW Interest
   ClientModule client(m_keyChain);
   ClientCaItem item;
-  item.m_caName = Name("/ndn");
+  item.m_caPrefix = Name("/ndn");
   item.m_anchor = cert;
   client.getClientConf().m_caItems.push_back(item);
   auto newInterest = client.generateNewInterest(time::system_clock::now(),
diff --git a/tests/unit-tests/ca-sqlite.t.cpp b/tests/unit-tests/ca-sqlite.t.cpp
index d78bb46..f47bf9d 100644
--- a/tests/unit-tests/ca-sqlite.t.cpp
+++ b/tests/unit-tests/ca-sqlite.t.cpp
@@ -89,7 +89,7 @@
   auto result = storage.getRequest("123");
   BOOST_CHECK_EQUAL(request1.m_cert, result.m_cert);
   BOOST_CHECK_EQUAL(request1.m_status, result.m_status);
-  BOOST_CHECK_EQUAL(request1.m_caName, result.m_caName);
+  BOOST_CHECK_EQUAL(request1.m_caPrefix, result.m_caPrefix);
 
   // update operation
   JsonSection json;
@@ -100,7 +100,7 @@
   result = storage.getRequest("123");
   BOOST_CHECK_EQUAL(request2.m_cert, result.m_cert);
   BOOST_CHECK_EQUAL(request2.m_status, result.m_status);
-  BOOST_CHECK_EQUAL(request2.m_caName, result.m_caName);
+  BOOST_CHECK_EQUAL(request2.m_caPrefix, result.m_caPrefix);
 
   auto identity2 = addIdentity(Name("/ndn/site2"));
   auto key2 = identity2.getDefaultKey();
diff --git a/tests/unit-tests/client-config.t.cpp b/tests/unit-tests/client-config.t.cpp
index 0f8aa95..8aabcab 100644
--- a/tests/unit-tests/client-config.t.cpp
+++ b/tests/unit-tests/client-config.t.cpp
@@ -35,7 +35,7 @@
   BOOST_CHECK_EQUAL(config.m_caItems.size(), 2);
 
   const auto& item = config.m_caItems.front();
-  BOOST_CHECK_EQUAL(item.m_caName, "/ndn/edu/ucla");
+  BOOST_CHECK_EQUAL(item.m_caPrefix, "/ndn/edu/ucla");
   BOOST_CHECK_EQUAL(item.m_caInfo, "UCLA's ceritificate authority, located in BH4805.");
   BOOST_CHECK_EQUAL(item.m_probe, "email");
   BOOST_CHECK_EQUAL(item.m_anchor.getName(),
@@ -68,19 +68,19 @@
   config.load("tests/unit-tests/client.conf.test");
 
   ClientCaItem item;
-  item.m_caName = Name("/test");
+  item.m_caPrefix = Name("/test");
   item.m_caInfo = "test";
   item.m_probe = "test";
 
   config.m_caItems.push_back(item);
   BOOST_CHECK_EQUAL(config.m_caItems.size(), 3);
   auto lastItem = config.m_caItems.back();
-  BOOST_CHECK_EQUAL(lastItem.m_caName, "/test");
+  BOOST_CHECK_EQUAL(lastItem.m_caPrefix, "/test");
 
   config.removeCaItem(Name("/test"));
   BOOST_CHECK_EQUAL(config.m_caItems.size(), 2);
   lastItem = config.m_caItems.back();
-  BOOST_CHECK_EQUAL(lastItem.m_caName, "/ndn/edu/ucla/zhiyi");
+  BOOST_CHECK_EQUAL(lastItem.m_caPrefix, "/ndn/edu/ucla/zhiyi");
 }
 
 BOOST_AUTO_TEST_SUITE_END() // TestClientConfig
diff --git a/tests/unit-tests/client-module.t.cpp b/tests/unit-tests/client-module.t.cpp
index 5da0330..638820f 100644
--- a/tests/unit-tests/client-module.t.cpp
+++ b/tests/unit-tests/client-module.t.cpp
@@ -53,7 +53,7 @@
 
   ClientCaItem item;
   item.m_probe = "email:uid:name";
-  item.m_caName = Name("/site");
+  item.m_caPrefix = Name("/site");
   item.m_anchor = cert;
   client.getClientConf().m_caItems.push_back(item);
 
@@ -76,7 +76,7 @@
 
   ClientCaItem item;
   item.m_probe = "email:uid:name";
-  item.m_caName = Name("/site");
+  item.m_caPrefix = Name("/site");
   item.m_anchor = cert;
   client.getClientConf().m_caItems.push_back(item);
 
diff --git a/tools/ndncert-ca-status.cpp b/tools/ndncert-ca-status.cpp
index d426535..7438dc6 100644
--- a/tools/ndncert-ca-status.cpp
+++ b/tools/ndncert-ca-status.cpp
@@ -77,7 +77,7 @@
   for (const auto& entry : requestList) {
     std::cerr << "Request ID: " << entry.m_requestId << "\t"
               << "Current Status: " << entry.m_status << std::endl
-              << "Applying CA: " << entry.m_caName << std::endl
+              << "Applying CA: " << entry.m_caPrefix << std::endl
               << "Applying for key: " << entry.m_cert.getName() << std::endl
               << "Challenge remaining tries: " << entry.m_remainingTries << std::endl
               << "Challenge Secret: " << convertJson2String(entry.m_challengeSecrets) << std::endl;
diff --git a/tools/ndncert-client.cpp b/tools/ndncert-client.cpp
index 76531fe..788ee74 100644
--- a/tools/ndncert-client.cpp
+++ b/tools/ndncert-client.cpp
@@ -274,7 +274,7 @@
   for (auto item : caList) {
     std::cerr << "***************************************\n"
               << "Index: " << count++ << "\n"
-              << "CA prefix:" << item.m_caName << "\n"
+              << "CA prefix:" << item.m_caPrefix << "\n"
               << "Introduction: " << item.m_caInfo << "\n"
               << "***************************************\n";
   }
