diff --git a/src/ca-state.cpp b/src/ca-state.cpp
index 426f96d..b8b32c0 100644
--- a/src/ca-state.cpp
+++ b/src/ca-state.cpp
@@ -25,7 +25,7 @@
 namespace ndncert {
 
 ChallengeState::ChallengeState(const std::string& challengeStatus,
-                               const system_clock::TimePoint& challengeTp,
+                               const time::system_clock::TimePoint& challengeTp,
                                size_t remainingTries, time::seconds remainingTime,
                                JsonSection&& challengeSecrets)
     : m_challengeStatus(challengeStatus)
@@ -55,7 +55,7 @@
 
 CaState::CaState(const Name& caName, const std::string& requestId, RequestType requestType, Status status,
                  const security::Certificate& cert, const std::string& challengeType,
-                 const std::string& challengeStatus, const system_clock::TimePoint& challengeTp,
+                 const std::string& challengeStatus, const time::system_clock::TimePoint& challengeTp,
                  size_t remainingTries, time::seconds remainingTime, JsonSection&& challengeSecrets,
                  Block encryptionKey)
     : m_caPrefix(caName)
diff --git a/src/ca-state.hpp b/src/ca-state.hpp
index d74e680..e25704e 100644
--- a/src/ca-state.hpp
+++ b/src/ca-state.hpp
@@ -30,11 +30,11 @@
  * @brief The state maintained by the Challenge modules
  */
 struct ChallengeState {
-  ChallengeState(const std::string& challengeStatus, const system_clock::TimePoint& challengeTp,
+  ChallengeState(const std::string& challengeStatus, const time::system_clock::TimePoint& challengeTp,
                  size_t remainingTries, time::seconds remainingTime,
                  JsonSection&& challengeSecrets);
   std::string m_challengeStatus;
-  system_clock::TimePoint m_timestamp;
+  time::system_clock::TimePoint m_timestamp;
   size_t m_remainingTries;
   time::seconds m_remainingTime;
   JsonSection m_secrets;
@@ -53,7 +53,7 @@
           const security::Certificate& cert, Block m_encryptionKey);
   CaState(const Name& caName, const std::string& requestId, RequestType requestType, Status status,
           const security::Certificate& cert, const std::string& challengeType,
-          const std::string& challengeStatus, const system_clock::TimePoint& challengeTp,
+          const std::string& challengeStatus, const time::system_clock::TimePoint& challengeTp,
           size_t remainingTries, time::seconds remainingTime, JsonSection&& challengeSecrets,
           Block m_encryptionKey);
 
diff --git a/src/ca-storage/ca-storage.hpp b/src/ca-storage/ca-storage.hpp
index 99af926..e18a5bc 100644
--- a/src/ca-storage/ca-storage.hpp
+++ b/src/ca-storage/ca-storage.hpp
@@ -61,7 +61,7 @@
     CaStorageFactory& factory = getFactory();
     BOOST_ASSERT(factory.count(caStorageType) == 0);
     factory[caStorageType] = [] (const Name& caName, const std::string& path) {
-      return make_unique<CaStorageType>(caName, path);
+      return std::make_unique<CaStorageType>(caName, path);
     };
   }
 
diff --git a/src/identity-challenge/challenge-module.hpp b/src/identity-challenge/challenge-module.hpp
index 0f0d0b8..c12b03c 100644
--- a/src/identity-challenge/challenge-module.hpp
+++ b/src/identity-challenge/challenge-module.hpp
@@ -39,7 +39,7 @@
   {
     ChallengeFactory& factory = getFactory();
     BOOST_ASSERT(factory.count(typeName) == 0);
-    factory[typeName] = [] { return make_unique<ChallengeType>(); };
+    factory[typeName] = [] { return std::make_unique<ChallengeType>(); };
   }
 
   static bool
diff --git a/src/name-assignments/assignment-funcs.hpp b/src/name-assignments/assignment-funcs.hpp
index 3f78955..30408b5 100644
--- a/src/name-assignments/assignment-funcs.hpp
+++ b/src/name-assignments/assignment-funcs.hpp
@@ -54,7 +54,7 @@
   {
     FuncFactoryFactory& factory = getFactory();
     BOOST_ASSERT(factory.count(typeName) == 0);
-    factory[typeName] = [](const std::string& format) { return make_unique<ChallengeType>(format); };
+    factory[typeName] = [](const std::string& format) { return std::make_unique<ChallengeType>(format); };
   }
 
   static unique_ptr<NameAssignmentFunc>
diff --git a/src/ndncert-common.hpp b/src/ndncert-common.hpp
index c458be7..96c50ba 100644
--- a/src/ndncert-common.hpp
+++ b/src/ndncert-common.hpp
@@ -62,15 +62,6 @@
 namespace ndncert {
 
 using boost::noncopyable;
-using time::system_clock;
-using std::bind;
-using std::enable_shared_from_this;
-using std::function;
-using std::make_shared;
-using std::shared_ptr;
-using std::size_t;
-using std::unique_ptr;
-using std::weak_ptr;
 
 enum : uint32_t {
   tlv_ca_prefix = 129,
diff --git a/src/protocol-detail/new-renew-revoke.cpp b/src/protocol-detail/new-renew-revoke.cpp
index f153c40..75ffab7 100644
--- a/src/protocol-detail/new-renew-revoke.cpp
+++ b/src/protocol-detail/new-renew-revoke.cpp
@@ -71,7 +71,7 @@
   requestPayload.parse();
 
   security::Certificate cert = security::Certificate(requestPayload.get(tlv::Data));
-  clientCert = make_shared<security::Certificate>(cert);
+  clientCert =std::make_shared<security::Certificate>(cert);
 }
 
 Block
diff --git a/src/requester.cpp b/src/requester.cpp
index 9bafeb8..de2d1a6 100644
--- a/src/requester.cpp
+++ b/src/requester.cpp
@@ -91,7 +91,7 @@
 {
   Name interestName = ca.m_caPrefix;
   interestName.append("CA").append("PROBE");
-  auto interest = make_shared<Interest>(interestName);
+  auto interest =std::make_shared<Interest>(interestName);
   interest->setMustBeFresh(true);
   interest->setCanBePrefix(false);
   interest->setApplicationParameters(PROBE::encodeApplicationParameters(std::move(probeInfo)));
@@ -160,7 +160,7 @@
   // generate Interest packet
   Name interestName = state.m_caItem.m_caPrefix;
   interestName.append("CA").append("NEW");
-  auto interest = make_shared<Interest>(interestName);
+  auto interest =std::make_shared<Interest>(interestName);
   interest->setMustBeFresh(true);
   interest->setCanBePrefix(false);
   interest->setApplicationParameters(
@@ -180,7 +180,7 @@
   // generate Interest packet
   Name interestName = state.m_caItem.m_caPrefix;
   interestName.append("CA").append("REVOKE");
-  auto interest = make_shared<Interest>(interestName);
+  auto interest =std::make_shared<Interest>(interestName);
   interest->setMustBeFresh(true);
   interest->setCanBePrefix(false);
   interest->setApplicationParameters(
@@ -237,7 +237,7 @@
 
   Name interestName = state.m_caItem.m_caPrefix;
   interestName.append("CA").append("CHALLENGE").append(state.m_requestId);
-  auto interest = make_shared<Interest>(interestName);
+  auto interest =std::make_shared<Interest>(interestName);
   interest->setMustBeFresh(true);
   interest->setCanBePrefix(false);
 
@@ -267,7 +267,7 @@
 Requester::genCertFetchInterest(const RequesterState& state)
 {
   Name interestName = state.m_issuedCertName;
-  auto interest = make_shared<Interest>(interestName);
+  auto interest =std::make_shared<Interest>(interestName);
   interest->setMustBeFresh(false);
   interest->setCanBePrefix(false);
   return interest;
diff --git a/tests/unit-tests/bench.t.cpp b/tests/unit-tests/bench.t.cpp
index d71940a..64a0d05 100644
--- a/tests/unit-tests/bench.t.cpp
+++ b/tests/unit-tests/bench.t.cpp
@@ -63,7 +63,7 @@
       std::cout << "CA Config MetaData Size: " << response.wireEncode().size() << std::endl;
       auto block = response.getContent();
       block.parse();
-      infoInterest = make_shared<Interest>(Name(block.get(tlv::Name)).appendSegment(0));
+      infoInterest =std::make_shared<Interest>(Name(block.get(tlv::Name)).appendSegment(0));
       infoInterest->setCanBePrefix(false);
       std::cout << "CA Config fetch Interest Size: " << infoInterest->wireEncode().size() << std::endl;
     }
diff --git a/tests/unit-tests/ca-module.t.cpp b/tests/unit-tests/ca-module.t.cpp
index f429b2f..76098a0 100644
--- a/tests/unit-tests/ca-module.t.cpp
+++ b/tests/unit-tests/ca-module.t.cpp
@@ -73,7 +73,7 @@
       count++;
       auto block = response.getContent();
       block.parse();
-      infoInterest = make_shared<Interest>(Name(block.get(tlv::Name)).appendSegment(0));
+      infoInterest =std::make_shared<Interest>(Name(block.get(tlv::Name)).appendSegment(0));
       infoInterest->setCanBePrefix(false);
     }
     else {
diff --git a/tests/unit-tests/challenge-credential.t.cpp b/tests/unit-tests/challenge-credential.t.cpp
index 11fb328..9c5ee14 100644
--- a/tests/unit-tests/challenge-credential.t.cpp
+++ b/tests/unit-tests/challenge-credential.t.cpp
@@ -63,7 +63,7 @@
   credential.setName(credentialName);
   credential.setContent(keyB.getPublicKey().data(), keyB.getPublicKey().size());
   SignatureInfo signatureInfo;
-  signatureInfo.setValidityPeriod(security::ValidityPeriod(system_clock::now(), system_clock::now() + time::minutes(1)));
+  signatureInfo.setValidityPeriod(security::ValidityPeriod(time::system_clock::now(), time::system_clock::now() + time::minutes(1)));
   m_keyChain.sign(credential, signingByCertificate(trustAnchor).setSignatureInfo(signatureInfo));
   m_keyChain.addCertificate(keyB, credential);
 
diff --git a/tools/ndncert-client.cpp b/tools/ndncert-client.cpp
index d77d65e..ed078a7 100644
--- a/tools/ndncert-client.cpp
+++ b/tools/ndncert-client.cpp
@@ -403,7 +403,7 @@
   int validityPeriod = captureValidityPeriod();
   auto now = time::system_clock::now();
   std::cerr << "The validity period of your certificate will be: " << validityPeriod << " hours" << std::endl;
-  requesterState = make_shared<RequesterState>(keyChain, profile, RequestType::NEW);
+  requesterState =std::make_shared<RequesterState>(keyChain, profile, RequestType::NEW);
   auto interest = Requester::genNewInterest(*requesterState, identityName, now, now + time::hours(validityPeriod));
   if (interest != nullptr) {
     face.expressInterest(*interest, bind(&newCb, _2), bind(&onNackCb), bind(&timeoutCb));
