diff --git a/src/ca-module.cpp b/src/ca-module.cpp
index d829f63..8b1c72a 100644
--- a/src/ca-module.cpp
+++ b/src/ca-module.cpp
@@ -267,7 +267,13 @@
 
   shared_ptr<security::v2::Certificate> clientCert = nullptr;
   // parse certificate request
-  Block requestPayload = parameterTLV.get(tlv_cert_request);
+  Block requestPayload;
+  if (requestType == RequestType::NEW) {
+    requestPayload = parameterTLV.get(tlv_cert_request);
+  }
+  else if (requestType == RequestType::REVOKE) {
+    requestPayload = parameterTLV.get(tlv_cert_to_revoke);
+  }
   requestPayload.parse();
   try {
     security::v2::Certificate cert = security::v2::Certificate(requestPayload.get(tlv::Data));
diff --git a/src/protocol-detail/info.cpp b/src/protocol-detail/info.cpp
index 306d060..da8b969 100644
--- a/src/protocol-detail/info.cpp
+++ b/src/protocol-detail/info.cpp
@@ -36,7 +36,6 @@
     caInfo = caConfig.m_caInfo;
   }
   content.push_back(makeStringBlock(tlv_ca_info, caInfo));
-
   for (const auto& key : caConfig.m_probeParameterKeys) {
     content.push_back(makeStringBlock(tlv_parameter_key, key));
   }
@@ -55,9 +54,9 @@
   CaConfigItem result;
   block.parse();
   for (auto const& item : block.elements()) {
-    item.parse();
     switch (item.type()) {
     case tlv_ca_prefix:
+      item.parse();
       result.m_caPrefix.wireDecode(item.get(tlv::Name));
       break;
     case tlv_ca_info:
@@ -73,7 +72,8 @@
       result.m_maxSuffixLength = readNonNegativeInteger(item);
       break;
     case tlv_ca_certificate:
-      result.m_cert->wireDecode(item.get(tlv::Data));
+      item.parse();
+      result.m_cert = std::make_shared<security::v2::Certificate>(item.get(tlv::Data));
       break;
     default:
       continue;
diff --git a/tests/unit-tests/bench.t.cpp b/tests/unit-tests/bench.t.cpp
index 4caed86..226f789 100644
--- a/tests/unit-tests/bench.t.cpp
+++ b/tests/unit-tests/bench.t.cpp
@@ -65,7 +65,8 @@
       contentBlock.parse();
       auto caItem = INFO::decodeDataContentToCaProfile(contentBlock);
       BOOST_CHECK_EQUAL(caItem.m_caPrefix, "/ndn");
-      BOOST_CHECK_EQUAL(caItem.m_probeParameterKeys.size(), 0);
+      BOOST_CHECK_EQUAL(caItem.m_probeParameterKeys.size(), 1);
+      BOOST_CHECK_EQUAL(caItem.m_probeParameterKeys.front(), "full name");
       BOOST_CHECK_EQUAL(caItem.m_cert->wireEncode(), cert.wireEncode());
       BOOST_CHECK_EQUAL(caItem.m_caInfo, "ndn testbed ca");
     }
diff --git a/tests/unit-tests/ca-module.t.cpp b/tests/unit-tests/ca-module.t.cpp
index 599b6ce..22c0d56 100644
--- a/tests/unit-tests/ca-module.t.cpp
+++ b/tests/unit-tests/ca-module.t.cpp
@@ -70,7 +70,7 @@
     contentBlock.parse();
     auto caItem = INFO::decodeDataContentToCaProfile(contentBlock);
     BOOST_CHECK_EQUAL(caItem.m_caPrefix, "/ndn");
-    BOOST_CHECK_EQUAL(caItem.m_probeParameterKeys.size(), 0);
+    BOOST_CHECK_EQUAL(caItem.m_probeParameterKeys.size(), 1);
     BOOST_CHECK_EQUAL(caItem.m_cert->wireEncode(), cert.wireEncode());
     BOOST_CHECK_EQUAL(caItem.m_caInfo, "ndn testbed ca");
   });
diff --git a/tests/unit-tests/configuration.t.cpp b/tests/unit-tests/configuration.t.cpp
index 2c0ca02..4f2f256 100644
--- a/tests/unit-tests/configuration.t.cpp
+++ b/tests/unit-tests/configuration.t.cpp
@@ -47,7 +47,7 @@
   BOOST_CHECK_EQUAL(config.m_caItem.m_maxValidityPeriod, time::seconds(86400));
   BOOST_CHECK(!config.m_caItem.m_maxSuffixLength);
   BOOST_CHECK_EQUAL(config.m_caItem.m_probeParameterKeys.size(), 0);
-  BOOST_CHECK_EQUAL(config.m_caItem.m_supportedChallenges.size(), 0);
+  BOOST_CHECK_EQUAL(config.m_caItem.m_supportedChallenges.size(), 2);
   BOOST_CHECK_EQUAL(config.m_caItem.m_supportedChallenges.front(), "pin");
   BOOST_CHECK_EQUAL(config.m_caItem.m_supportedChallenges.back(), "email");
 }
@@ -70,7 +70,7 @@
   BOOST_CHECK_EQUAL(config.m_caItems.size(), 2);
 
   auto& config1 = config.m_caItems.front();
-  BOOST_CHECK_EQUAL(config1.m_caPrefix, "/ndn");
+  BOOST_CHECK_EQUAL(config1.m_caPrefix, "/ndn/edu/ucla");
   BOOST_CHECK_EQUAL(config1.m_caInfo, "ndn testbed ca");
   BOOST_CHECK_EQUAL(config1.m_maxValidityPeriod, time::seconds(864000));
   BOOST_CHECK_EQUAL(*config1.m_maxSuffixLength, 3);
@@ -79,9 +79,9 @@
   BOOST_CHECK_EQUAL(config1.m_cert->getName(),
                     "/ndn/site1/KEY/%11%BC%22%F4c%15%FF%17/self/%FD%00%00%01Y%C8%14%D9%A5");
 
-  auto& config2 = config.m_caItems.front();
-  BOOST_CHECK_EQUAL(config2.m_caPrefix, "/ndn");
-  BOOST_CHECK_EQUAL(config2.m_caInfo, "ndn testbed ca");
+  auto& config2 = config.m_caItems.back();
+  BOOST_CHECK_EQUAL(config2.m_caPrefix, "/ndn/edu/ucla/zhiyi");
+  BOOST_CHECK_EQUAL(config2.m_caInfo, "");
   BOOST_CHECK_EQUAL(config2.m_maxValidityPeriod, time::seconds(86400));
   BOOST_CHECK(!config2.m_maxSuffixLength);
   BOOST_CHECK_EQUAL(config2.m_probeParameterKeys.size(), 0);
