diff --git a/src/detail/ca-request-state.cpp b/src/detail/ca-request-state.cpp
index 63ac317..8959422 100644
--- a/src/detail/ca-request-state.cpp
+++ b/src/detail/ca-request-state.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2017-2022, Regents of the University of California.
+ * Copyright (c) 2017-2023, Regents of the University of California.
  *
  * This file is part of ndncert, a certificate management system based on NDN.
  *
@@ -56,7 +56,7 @@
 namespace ca {
 
 ChallengeState::ChallengeState(const std::string& challengeStatus,
-                               const time::system_clock::TimePoint& challengeTp,
+                               const time::system_clock::time_point& challengeTp,
                                size_t remainingTries, time::seconds remainingTime,
                                JsonSection&& challengeSecrets)
   : challengeStatus(challengeStatus)
diff --git a/src/detail/ca-request-state.hpp b/src/detail/ca-request-state.hpp
index 5fbb8f7..a11caf0 100644
--- a/src/detail/ca-request-state.hpp
+++ b/src/detail/ca-request-state.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2017-2022, Regents of the University of California.
+ * Copyright (c) 2017-2023, Regents of the University of California.
  *
  * This file is part of ndncert, a certificate management system based on NDN.
  *
@@ -34,7 +34,7 @@
   CHALLENGE = 1,
   PENDING = 2,
   SUCCESS = 3,
-  FAILURE = 4
+  FAILURE = 4,
 };
 
 /**
@@ -56,9 +56,10 @@
  */
 struct ChallengeState
 {
-  ChallengeState(const std::string& challengeStatus, const time::system_clock::TimePoint& challengeTp,
+  ChallengeState(const std::string& challengeStatus, const time::system_clock::time_point& challengeTp,
                  size_t remainingTries, time::seconds remainingTime,
                  JsonSection&& challengeSecrets);
+
   /**
    * @brief The status of the challenge.
    */
@@ -66,7 +67,7 @@
   /**
    * @brief The timestamp of the last update of the challenge state.
    */
-  time::system_clock::TimePoint timestamp;
+  time::system_clock::time_point timestamp;
   /**
    * @brief Remaining tries of the challenge.
    */
diff --git a/src/requester-request.cpp b/src/requester-request.cpp
index 32e29df..277a7e7 100644
--- a/src/requester-request.cpp
+++ b/src/requester-request.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2017-2022, Regents of the University of California.
+ * Copyright (c) 2017-2023, Regents of the University of California.
  *
  * This file is part of ndncert, a certificate management system based on NDN.
  *
@@ -118,8 +118,8 @@
 
 std::shared_ptr<Interest>
 Request::genNewInterest(const Name& keyName,
-                        const time::system_clock::TimePoint& notBefore,
-                        const time::system_clock::TimePoint& notAfter)
+                        const time::system_clock::time_point& notBefore,
+                        const time::system_clock::time_point& notAfter)
 {
   if (!m_caProfile.caPrefix.isPrefixOf(keyName)) {
     return nullptr;
diff --git a/src/requester-request.hpp b/src/requester-request.hpp
index 729d106..c031083 100644
--- a/src/requester-request.hpp
+++ b/src/requester-request.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2017-2022, Regents of the University of California.
+ * Copyright (c) 2017-2023, Regents of the University of California.
  *
  * This file is part of ndncert, a certificate management system based on NDN.
  *
@@ -118,13 +118,12 @@
    */
   std::shared_ptr<Interest>
   genNewInterest(const Name& keyName,
-                 const time::system_clock::TimePoint& notBefore,
-                 const time::system_clock::TimePoint& notAfter);
+                 const time::system_clock::time_point& notBefore,
+                 const time::system_clock::time_point& notAfter);
 
   /**
    * @brief Generates a REVOKE interest to the CA.
    *
-   * @param state The current requester state for this request. Will be modified in the function.
    * @param certificate The certificate to the revoked.
    * @return The shared pointer to the encoded interest.
    */
@@ -134,7 +133,6 @@
   /**
    * @brief Decodes the replied data of NEW, RENEW, or REVOKE interest from the CA.
    *
-   * @param state The current requester state for the request. Will be updated in the function.
    * @param reply The replied data from the network
    * @return the list of challenge accepted by the CA, for CHALLENGE step.
    * @throw std::runtime_error if the decoding fails or receiving an error packet.
@@ -146,9 +144,8 @@
   /**
    * @brief Generates the required parameter for the selected challenge for the request
    *
-   * @param state, The requester state of the request.Will be updated in the function.
-   * @param challengeSelected, The selected challenge for the request.
-   *            Can use state.m_challengeType to continue.
+   * @param challengeSelected The selected challenge for the request.
+   *                          Can use state.m_challengeType to continue.
    * @return The requirement list for the current stage of the challenge, in name, prompt mapping.
    * @throw std::runtime_error if the challenge is not supported.
    */
@@ -158,8 +155,7 @@
   /**
    * @brief Generates the CHALLENGE interest for the request.
    *
-   * @param state, The requester state of the request.
-   * @param parameters, The requirement list, in name, value mapping.
+   * @param parameters The requirement list, in name, value mapping.
    * @return The shared pointer to the encoded interest
    * @throw std::runtime_error if the challenge is not selected or is not supported.
    */
@@ -169,8 +165,7 @@
   /**
    * @brief Decodes the responded data from the CHALLENGE interest.
    *
-   * @param state, the corresponding requester state of the request. Will be modified.
-   * @param reply, the response data.
+   * @param reply The response data.
    * @throw std::runtime_error if the decoding fails or receiving an error packet.
    */
   void
@@ -179,7 +174,6 @@
   /**
    * @brief Generate the interest to fetch the issued certificate
    *
-   * @param state, the state of the request.
    * @return The shared pointer to the encoded interest
    */
   std::shared_ptr<Interest>
@@ -188,7 +182,7 @@
   /**
    * @brief Decoded and installs the response certificate from the certificate fetch.
    *
-   * @param reply, the data replied from the certificate fetch interest.
+   * @param reply The data replied from the certificate fetch interest.
    * @return The shared pointer to the certificate being fetched.
    */
   static std::shared_ptr<Certificate>
@@ -234,7 +228,7 @@
   /**
    * @brief The time this challenge will remain fresh
    */
-  time::system_clock::TimePoint m_freshBefore;
+  time::system_clock::time_point m_freshBefore;
   /**
    * @brief the name of the certificate being issued.
    */
diff --git a/tests/unit-tests/bench.t.cpp b/tests/unit-tests/bench.t.cpp
index 2a97b2c..9f30470 100644
--- a/tests/unit-tests/bench.t.cpp
+++ b/tests/unit-tests/bench.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2017-2022, Regents of the University of California.
+ * Copyright (c) 2017-2023, Regents of the University of California.
  *
  * This file is part of ndncert, a certificate management system based on NDN.
  *
@@ -40,7 +40,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  ndn::util::DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   ca::CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
   auto profileData = ca.getCaProfileData();
@@ -98,7 +98,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  ndn::util::DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   ca::CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
diff --git a/tests/unit-tests/ca-module.t.cpp b/tests/unit-tests/ca-module.t.cpp
index 00a3f58..14b72b2 100644
--- a/tests/unit-tests/ca-module.t.cpp
+++ b/tests/unit-tests/ca-module.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2017-2022, Regents of the University of California.
+ * Copyright (c) 2017-2023, Regents of the University of California.
  *
  * This file is part of ndncert, a certificate management system based on NDN.
  *
@@ -35,14 +35,13 @@
 namespace ndncert::tests {
 
 using namespace ca;
-using ndn::util::DummyClientFace;
 using ndn::security::verifySignature;
 
 BOOST_FIXTURE_TEST_SUITE(TestCaModule, IoKeyChainFixture)
 
 BOOST_AUTO_TEST_CASE(Initialization)
 {
-  DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_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().caProfile.caPrefix, "/ndn");
 
@@ -57,7 +56,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
   auto profileData = ca.getCaProfileData();
@@ -110,7 +109,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
@@ -145,7 +144,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
@@ -180,7 +179,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-5", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
@@ -220,7 +219,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
@@ -271,7 +270,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1");
   advanceClocks(time::milliseconds(20), 60);
 
@@ -313,7 +312,7 @@
   m_keyChain.sign(cert, signingByKey(key.getName()).setSignatureInfo(signatureInfo));
   m_keyChain.setDefaultCertificate(key, cert);
 
-  DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
@@ -345,7 +344,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
@@ -388,7 +387,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1");
   advanceClocks(time::milliseconds(20), 60);
 
@@ -419,7 +418,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
@@ -500,7 +499,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  DummyClientFace face(m_io, {true, true});
+  ndn::DummyClientFace face(m_io, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
@@ -571,7 +570,7 @@
   auto key = identity.getDefaultKey();
   auto cert = key.getDefaultCertificate();
 
-  DummyClientFace face(m_io, {true, true});
+  ndn::DummyClientFace face(m_io, {true, true});
   CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-1", "ca-storage-memory");
   advanceClocks(time::milliseconds(20), 60);
 
diff --git a/tests/unit-tests/requester.t.cpp b/tests/unit-tests/requester.t.cpp
index d1a47a4..8fc0b8d 100644
--- a/tests/unit-tests/requester.t.cpp
+++ b/tests/unit-tests/requester.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2017-2022, Regents of the University of California.
+ * Copyright (c) 2017-2023, Regents of the University of California.
  *
  * This file is part of ndncert, a certificate management system based on NDN.
  *
@@ -77,7 +77,7 @@
   availableNames.emplace_back("/site1");
   availableNames.emplace_back("/site2");
 
-  ndn::util::DummyClientFace face(m_io, m_keyChain, {true, true});
+  ndn::DummyClientFace face(m_io, m_keyChain, {true, true});
   ca::CaModule ca(face, m_keyChain, "tests/unit-tests/config-files/config-ca-5", "ca-storage-memory");
 
   Data reply;
