diff --git a/src/handles/base-handle.hpp b/src/handles/base-handle.hpp
index 44ac4a8..95b8caa 100644
--- a/src/handles/base-handle.hpp
+++ b/src/handles/base-handle.hpp
@@ -110,7 +110,7 @@
 inline void
 BaseHandle::reply(const Interest& commandInterest, const RepoCommandResponse& response)
 {
-  shared_ptr<Data> rdata = make_shared<Data>(commandInterest.getName());
+  std::shared_ptr<Data> rdata = std::make_shared<Data>(commandInterest.getName());
   rdata->setContent(response.wireEncode());
   m_keyChain.sign(*rdata);
   m_face.put(*rdata);
diff --git a/src/handles/delete-handle.cpp b/src/handles/delete-handle.cpp
index c6ad7c5..5cd0506 100644
--- a/src/handles/delete-handle.cpp
+++ b/src/handles/delete-handle.cpp
@@ -92,7 +92,8 @@
 }
 
 void
-DeleteHandle::onValidationFailed(const shared_ptr<const Interest>& interest, const string& reason)
+DeleteHandle::onValidationFailed(const shared_ptr<const Interest>& interest,
+                                 const std::string& reason)
 {
   std::cerr << reason << std::endl;
   negativeReply(*interest, 401);
diff --git a/src/handles/delete-handle.hpp b/src/handles/delete-handle.hpp
index 91ff244..5493d2e 100644
--- a/src/handles/delete-handle.hpp
+++ b/src/handles/delete-handle.hpp
@@ -25,8 +25,6 @@
 
 namespace repo {
 
-using std::vector;
-
 class DeleteHandle : public BaseHandle
 {
 
@@ -56,10 +54,10 @@
   onRegisterFailed(const Name& prefix, const std::string& reason);
 
   void
-  onValidated(const shared_ptr<const Interest>& interest, const Name& prefix);
+  onValidated(const std::shared_ptr<const Interest>& interest, const Name& prefix);
 
   void
-  onValidationFailed(const shared_ptr<const Interest>& interest, const string& reason);
+  onValidationFailed(const std::shared_ptr<const Interest>& interest, const std::string& reason);
 
   /**
    * @todo delete check has not been realized due to the while loop of segmented data deletion.
diff --git a/src/handles/tcp-bulk-insert-handle.hpp b/src/handles/tcp-bulk-insert-handle.hpp
index ef1cbdd..62ced11 100644
--- a/src/handles/tcp-bulk-insert-handle.hpp
+++ b/src/handles/tcp-bulk-insert-handle.hpp
@@ -59,7 +59,7 @@
 private:
   void
   handleAccept(const boost::system::error_code& error,
-               const shared_ptr<boost::asio::ip::tcp::socket>& socket);
+               const std::shared_ptr<boost::asio::ip::tcp::socket>& socket);
 
 private:
   boost::asio::ip::tcp::acceptor m_acceptor;
diff --git a/src/handles/watch-handle.cpp b/src/handles/watch-handle.cpp
index 15a82fa..9e80212 100644
--- a/src/handles/watch-handle.cpp
+++ b/src/handles/watch-handle.cpp
@@ -98,7 +98,8 @@
 }
 
 void
-WatchHandle::onValidationFailed(const shared_ptr<const Interest>& interest, const string& reason)
+WatchHandle::onValidationFailed(const shared_ptr<const Interest>& interest,
+                                const std::string& reason)
 {
   std::cerr << reason << std::endl;
   negativeReply(*interest, 401);
diff --git a/src/handles/watch-handle.hpp b/src/handles/watch-handle.hpp
index 10cddda..2fde3cf 100644
--- a/src/handles/watch-handle.hpp
+++ b/src/handles/watch-handle.hpp
@@ -71,10 +71,10 @@
   onInterest(const Name& prefix, const Interest& interest);
 
   void
-  onValidated(const shared_ptr<const Interest>& interest, const Name& prefix);
+  onValidated(const std::shared_ptr<const Interest>& interest, const Name& prefix);
 
   void
-  onValidationFailed(const shared_ptr<const Interest>& interest, const string& reason);
+  onValidationFailed(const std::shared_ptr<const Interest>& interest, const std::string& reason);
 
   void
   onRegistered(const Name& prefix);
@@ -96,14 +96,14 @@
   onTimeout(const Interest& interest, const Name& name);
 
   void
-  onDataValidated(const Interest& interest, const shared_ptr<const Data>& data,
+  onDataValidated(const Interest& interest, const std::shared_ptr<const Data>& data,
                   const Name& name);
 
   /**
    * @brief failure of validation
    */
   void
-  onDataValidationFailed(const Interest& interest, const shared_ptr<const Data>& data,
+  onDataValidationFailed(const Interest& interest, const std::shared_ptr<const Data>& data,
                          const std::string& reason, const Name& name);
 
 
@@ -121,10 +121,11 @@
   onCheckInterest(const Name& prefix, const Interest& interest);
 
   void
-  onCheckValidated(const shared_ptr<const Interest>& interest, const Name& prefix);
+  onCheckValidated(const std::shared_ptr<const Interest>& interest, const Name& prefix);
 
   void
-  onCheckValidationFailed(const shared_ptr<const Interest>& interest, const std::string& reason);
+  onCheckValidationFailed(const std::shared_ptr<const Interest>& interest,
+                          const std::string& reason);
 
 private: // watch stop command
   /**
@@ -134,10 +135,11 @@
   onStopInterest(const Name& prefix, const Interest& interest);
 
   void
-  onStopValidated(const shared_ptr<const Interest>& interest, const Name& prefix);
+  onStopValidated(const std::shared_ptr<const Interest>& interest, const Name& prefix);
 
   void
-  onStopValidationFailed(const shared_ptr<const Interest>& interest, const std::string& reason);
+  onStopValidationFailed(const std::shared_ptr<const Interest>& interest,
+                         const std::string& reason);
 
 private:
   void
diff --git a/src/handles/write-handle.cpp b/src/handles/write-handle.cpp
index 0bc4e12..08e951b 100644
--- a/src/handles/write-handle.cpp
+++ b/src/handles/write-handle.cpp
@@ -20,7 +20,6 @@
 #include "write-handle.hpp"
 
 namespace repo {
-using namespace ndn::time;
 
 static const int RETRY_TIMEOUT = 3;
 static const int DEFAULT_CREDIT = 12;
@@ -72,7 +71,7 @@
 }
 
 void
-WriteHandle::onValidated(const shared_ptr<const Interest>& interest, const Name& prefix)
+WriteHandle::onValidated(const std::shared_ptr<const Interest>& interest, const Name& prefix)
 {
   //m_validResult = 1;
   RepoCommandParameter parameter;
@@ -99,14 +98,15 @@
 }
 
 void
-WriteHandle::onValidationFailed(const shared_ptr<const Interest>& interest, const string& reason)
+WriteHandle::onValidationFailed(const std::shared_ptr<const Interest>& interest,
+                                const std::string& reason)
 {
   std::cerr << reason << std::endl;
   negativeReply(*interest, 401);
 }
 
 void
-WriteHandle::onData(const Interest& interest, ndn::Data& data, ProcessId processId)
+WriteHandle::onData(const Interest& interest, Data& data, ProcessId processId)
 {
   m_validator.validate(data,
                        bind(&WriteHandle::onDataValidated, this, interest, _1, processId),
@@ -114,7 +114,8 @@
 }
 
 void
-WriteHandle::onDataValidated(const Interest& interest, const shared_ptr<const Data>& data,
+WriteHandle::onDataValidated(const Interest& interest,
+                             const std::shared_ptr<const Data>& data,
                              ProcessId processId)
 {
   if (m_processes.count(processId) == 0) {
@@ -135,7 +136,8 @@
 }
 
 void
-WriteHandle::onDataValidationFailed(const shared_ptr<const Data>& data, const std::string& reason)
+WriteHandle::onDataValidationFailed(const std::shared_ptr<const Data>& data,
+                                    const std::string& reason)
 {
   std::cerr << reason << std::endl;
 }
@@ -150,7 +152,7 @@
 
 void
 WriteHandle::onSegmentDataValidated(const Interest& interest,
-                                    const shared_ptr<const Data>& data,
+                                    const std::shared_ptr<const Data>& data,
                                     ProcessId processId)
 {
   if (m_processes.count(processId) == 0) {
@@ -182,7 +184,7 @@
 }
 
 void
-WriteHandle::onTimeout(const ndn::Interest& interest, ProcessId processId)
+WriteHandle::onTimeout(const Interest& interest, ProcessId processId)
 {
   std::cerr << "Timeout" << std::endl;
   m_processes.erase(processId);
diff --git a/src/handles/write-handle.hpp b/src/handles/write-handle.hpp
index bbbfe28..1c64437 100644
--- a/src/handles/write-handle.hpp
+++ b/src/handles/write-handle.hpp
@@ -109,10 +109,10 @@
   onInterest(const Name& prefix, const Interest& interest);
 
   void
-  onValidated(const shared_ptr<const Interest>& interest, const Name& prefix);
+  onValidated(const std::shared_ptr<const Interest>& interest, const Name& prefix);
 
   void
-  onValidationFailed(const shared_ptr<const Interest>& interest, const string& reason);
+  onValidationFailed(const std::shared_ptr<const Interest>& interest, const std::string& reason);
 
   /**
    * @brief insert command prefix register failed
@@ -128,7 +128,7 @@
   onData(const Interest& interest, Data& data, ProcessId processId);
 
   void
-  onDataValidated(const Interest& interest, const shared_ptr<const Data>& data,
+  onDataValidated(const Interest& interest, const std::shared_ptr<const Data>& data,
                   ProcessId processId);
 
   /**
@@ -148,7 +148,7 @@
   onSegmentData(const Interest& interest, Data& data, ProcessId processId);
 
   void
-  onSegmentDataValidated(const Interest& interest, const shared_ptr<const Data>& data,
+  onSegmentDataValidated(const Interest& interest, const std::shared_ptr<const Data>& data,
                          ProcessId processId);
 
   /**
@@ -183,7 +183,7 @@
    * @brief failure of validation for both one or segmented data
    */
   void
-  onDataValidationFailed(const shared_ptr<const Data>& data, const std::string& reason);
+  onDataValidationFailed(const std::shared_ptr<const Data>& data, const std::string& reason);
 
   /**
    * @brief extends noEndTime of process if not noEndTimeout, set StatusCode 405
@@ -208,10 +208,11 @@
   onCheckRegisterFailed(const Name& prefix, const std::string& reason);
 
   void
-  onCheckValidated(const shared_ptr<const Interest>& interest, const Name& prefix);
+  onCheckValidated(const std::shared_ptr<const Interest>& interest, const Name& prefix);
 
   void
-  onCheckValidationFailed(const shared_ptr<const Interest>& interest, const std::string& reason);
+  onCheckValidationFailed(const std::shared_ptr<const Interest>& interest,
+                          const std::string& reason);
 
 private:
   void
