diff --git a/src/ca-config.cpp b/src/ca-config.cpp
index c615e49..1bd8e04 100644
--- a/src/ca-config.cpp
+++ b/src/ca-config.cpp
@@ -19,13 +19,13 @@
  */
 
 #include "ca-config.hpp"
-#include "challenge-module.hpp"
 
 #include <boost/filesystem.hpp>
-#include <ndn-cxx/util/io.hpp>
-#include <boost/property_tree/ptree.hpp>
 #include <boost/property_tree/json_parser.hpp>
-#include <boost/property_tree/info_parser.hpp>
+#include <boost/property_tree/ptree.hpp>
+#include <ndn-cxx/util/io.hpp>
+
+#include "challenge-module.hpp"
 
 namespace ndn {
 namespace ndncert {
@@ -38,10 +38,10 @@
     boost::property_tree::read_json(fileName, configJson);
   }
   catch (const std::exception& error) {
-    BOOST_THROW_EXCEPTION(Error("Failed to parse configuration file " + fileName + ", " + error.what()));
+    BOOST_THROW_EXCEPTION(std::runtime_error("Failed to parse configuration file " + fileName + ", " + error.what()));
   }
   if (configJson.begin() == configJson.end()) {
-    BOOST_THROW_EXCEPTION(Error("Error processing configuration file: " + fileName + " no data"));
+    BOOST_THROW_EXCEPTION(std::runtime_error("std::runtime_error processing configuration file: " + fileName + " no data"));
   }
   parse(configJson);
 }
@@ -52,7 +52,7 @@
   // CA prefix
   m_caPrefix = Name(configJson.get(CONFIG_CA_PREFIX, ""));
   if (m_caPrefix.empty()) {
-    BOOST_THROW_EXCEPTION(Error("Cannot parse ca-prefix from the config file"));
+    BOOST_THROW_EXCEPTION(std::runtime_error("Cannot parse ca-prefix from the config file"));
   }
   // CA info
   m_caInfo = configJson.get(CONFIG_CA_INFO, "");
@@ -68,7 +68,7 @@
   m_supportedChallenges.clear();
   auto challengeList = configJson.get_child_optional(CONFIG_SUPPORTED_CHALLENGES);
   if (!challengeList) {
-    BOOST_THROW_EXCEPTION(Error("Cannot parse challenge list"));
+    BOOST_THROW_EXCEPTION(std::runtime_error("Cannot parse challenge list"));
   }
   parseChallengeList(*challengeList);
 }
@@ -76,13 +76,12 @@
 void
 CaConfig::parseProbeParameters(const JsonSection& section)
 {
-  auto it = section.begin();
-  for (; it != section.end(); it++) {
-    auto probeParameter = it->second.get(CONFIG_PROBE_PARAMETER, "");
-    if (probeParameter == "") {
-      BOOST_THROW_EXCEPTION(Error("Cannot read probe-parameter-key in probe-parameters from the config file"));
-    }
+  for (const auto item : section) {
+    auto probeParameter = item.second.get(CONFIG_PROBE_PARAMETER, "");
     probeParameter = boost::algorithm::to_lower_copy(probeParameter);
+    if (probeParameter == "") {
+      BOOST_THROW_EXCEPTION(std::runtime_error("Cannot read probe-parameter-key in probe-parameters from the config file"));
+    }
     m_probeParameterKeys.push_back(probeParameter);
   }
 }
@@ -90,20 +89,19 @@
 void
 CaConfig::parseChallengeList(const JsonSection& section)
 {
-  auto it = section.begin();
-  for (; it != section.end(); it++) {
-    auto challengeType = it->second.get(CONFIG_CHALLENGE, "");
-    if (challengeType == "") {
-      BOOST_THROW_EXCEPTION(Error("Cannot read type in supported-challenges from the config file"));
-    }
+  for (const auto item : section) {
+    auto challengeType = item.second.get(CONFIG_CHALLENGE, "");
     challengeType = boost::algorithm::to_lower_copy(challengeType);
+    if (challengeType == "") {
+      BOOST_THROW_EXCEPTION(std::runtime_error("Cannot read type in supported-challenges from the config file"));
+    }
     if (!ChallengeModule::supportChallenge(challengeType)) {
-      BOOST_THROW_EXCEPTION(Error("Does not support challenge read from the config file"));
+      BOOST_THROW_EXCEPTION(std::runtime_error("Does not support challenge read from the config file"));
     }
     m_supportedChallenges.push_back(challengeType);
   }
   if (m_supportedChallenges.size() == 0) {
-    BOOST_THROW_EXCEPTION(Error("At least one challenge should be identified under supported-challenges"));
+    BOOST_THROW_EXCEPTION(std::runtime_error("At least one challenge should be identified under supported-challenges"));
   }
 }
 
diff --git a/src/ca-config.hpp b/src/ca-config.hpp
index 4855aca..e624e34 100644
--- a/src/ca-config.hpp
+++ b/src/ca-config.hpp
@@ -21,10 +21,9 @@
 #ifndef NDNCERT_CA_CONFIG_HPP
 #define NDNCERT_CA_CONFIG_HPP
 
-#include <ndn-cxx/security/v2/certificate.hpp>
-
 #include "certificate-request.hpp"
 #include "client-config.hpp"
+#include <ndn-cxx/security/v2/certificate.hpp>
 
 namespace ndn {
 namespace ndncert {
@@ -38,7 +37,6 @@
  * @p vector, input, a list of parameter key-value pair used for name assignment.
  * @return a vector containing the possible namespaces derived from the parameters.
  */
-// using ProbeHandler = function<std::string /*identity name*/ (const Block& tlv /*requester input*/)>;
 using NameAssignmentFunc = function<std::vector<std::string>(const std::vector<std::tuple<std::string, std::string>>)>;
 
 /**
@@ -76,42 +74,17 @@
 class CaConfig {
 public:
   /**
-   * @brief Error that can be thrown from CaConfig
-   */
-  class Error : public std::runtime_error {
-  public:
-    using std::runtime_error::runtime_error;
-  };
-
-public:
-  /**
    * Load CA configuration from the file.
    *
    * @param fileName, the configuration file name.
-   * @throw CaConfig::Error when config file does not exist or the configuration
+   * @throw std::runtime_error when config file does not exist or the configuration
    *        in the file cannot be parsed correctly.
-   * @throw CaConfig::Error when the ca-prefix attribute in JSON text is empty.
-   * @throw CaConfig::Error when the challenge is not specified or is not supported.
+   * @throw std::runtime_error when the ca-prefix attribute in JSON text is empty.
+   * @throw std::runtime_error when the challenge is not specified or is not supported.
    */
   void
   load(const std::string& fileName);
 
-  /**
-   * Set the NameAssignmentFunction.
-   */
-  // void
-  // setNameAssignmentFunc(const NameAssignmentFunc& nameAssignmentFunc) {
-  //   m_nameAssignmentFunc = nameAssignmentFunc;
-  // }
-
-  /**
-   * Set the StatusUpdateCallback.
-   */
-  void
-  setStatusUpdateCallback(const StatusUpdateCallback& statusUpdateCallback) {
-    m_statusUpdateCallback = statusUpdateCallback;
-  }
-
 private:
   void
   parse(const JsonSection& configJson);
diff --git a/tests/unit-tests/ca-config.t.cpp b/tests/unit-tests/ca-config.t.cpp
index 0538cd8..ef48457 100644
--- a/tests/unit-tests/ca-config.t.cpp
+++ b/tests/unit-tests/ca-config.t.cpp
@@ -44,19 +44,19 @@
 BOOST_AUTO_TEST_CASE(ReadNonexistConfigFile)
 {
   CaConfig config;
-  BOOST_CHECK_THROW(config.load("tests/unit-tests/Nonexist"), CaConfig::Error);
+  BOOST_CHECK_THROW(config.load("tests/unit-tests/Nonexist"), std::runtime_error);
 }
 
 BOOST_AUTO_TEST_CASE(ReadConfigFileWithoutCaPrefix)
 {
   CaConfig config;
-  BOOST_CHECK_THROW(config.load("tests/unit-tests/ca.conf.test2"), CaConfig::Error);
+  BOOST_CHECK_THROW(config.load("tests/unit-tests/ca.conf.test2"), std::runtime_error);
 }
 
 BOOST_AUTO_TEST_CASE(ReadConfigFileWithChallengeNotSupported)
 {
   CaConfig config;
-  BOOST_CHECK_THROW(config.load("tests/unit-tests/ca.conf.test3"), CaConfig::Error);
+  BOOST_CHECK_THROW(config.load("tests/unit-tests/ca.conf.test3"), std::runtime_error);
 }
 
 BOOST_AUTO_TEST_CASE(InfoContentEncodingDecoding)
@@ -76,8 +76,8 @@
   BOOST_CHECK_EQUAL(cert.wireEncode(), decoded.m_anchor.wireEncode());
 }
 
-BOOST_AUTO_TEST_SUITE_END() // TestCaConfig
+BOOST_AUTO_TEST_SUITE_END()  // TestCaConfig
 
-} // namespace tests
-} // namespace ndncert
-} // namespace ndn
+}  // namespace tests
+}  // namespace ndncert
+}  // namespace ndn
