diff --git a/ChronoSync b/ChronoSync
index 6e1c9cd..68bc51a 160000
--- a/ChronoSync
+++ b/ChronoSync
@@ -1 +1 @@
-Subproject commit 6e1c9cda3665eac823c86b321e5ba872df026d48
+Subproject commit 68bc51a3d959b9b8b7ff0d21f526cbf1d3f3b744
diff --git a/src/browse-contact-dialog.cpp b/src/browse-contact-dialog.cpp
index 5cf2ba9..50ca82d 100644
--- a/src/browse-contact-dialog.cpp
+++ b/src/browse-contact-dialog.cpp
@@ -16,7 +16,6 @@
 #include "profile.h"
 #endif
 
-using namespace std;
 using namespace ndn;
 using namespace chronos;
 
diff --git a/src/chat-dialog.cpp b/src/chat-dialog.cpp
index ba2cda5..74b75c3 100644
--- a/src/chat-dialog.cpp
+++ b/src/chat-dialog.cpp
@@ -28,8 +28,8 @@
 #include "logging.h"
 #endif
 
-using namespace std;
 using namespace ndn;
+using ndn::shared_ptr;
 using namespace chronos;
 
 INIT_LOGGER("ChatDialog");
@@ -47,7 +47,7 @@
                        const IdentityCertificate& myCertificate,
                        const Name& chatroomPrefix,
 		       const Name& localPrefix,
-                       const string& nick,
+                       const std::string& nick,
                        bool withSecurity,
 		       QWidget* parent) 
   : QDialog(parent)
@@ -176,7 +176,7 @@
 }
 
 void
-ChatDialog::processTreeUpdateWrapper(const vector<Sync::MissingDataInfo>& v, Sync::SyncSocket *sock)
+ChatDialog::processTreeUpdateWrapper(const std::vector<Sync::MissingDataInfo>& v, Sync::SyncSocket *sock)
 {
   emit processTreeUpdate(v);
   _LOG_DEBUG("<<< Tree update signal emitted");
@@ -196,7 +196,7 @@
 }
 
 void
-ChatDialog::processRemoveWrapper(string prefix)
+ChatDialog::processRemoveWrapper(std::string prefix)
 {
   _LOG_DEBUG("Sync REMOVE signal received for prefix: " << prefix);
 }
@@ -402,7 +402,7 @@
 
 void
 ChatDialog::onReplyValidationFailed(const shared_ptr<const Data>& data,
-                                    const string& failureInfo)
+                                    const std::string& failureInfo)
 {
   _LOG_DEBUG("Invitation reply cannot be validated: " + failureInfo + " ==> " + data->getName().toUri());
 }
@@ -473,7 +473,7 @@
 }
 
 void
-ChatDialog::onIntroCertListTimeout(const Interest& interest, int retry, const string& msg)
+ChatDialog::onIntroCertListTimeout(const Interest& interest, int retry, const std::string& msg)
 {
   if(retry > 0)
     m_face->expressInterest(interest,
@@ -498,13 +498,13 @@
 void
 ChatDialog::onCertListInterest(const Name& prefix, const ndn::Interest& interest)
 {
-  vector<Name> certNameList;
+  std::vector<Name> certNameList;
   m_sock->getIntroCertNames(certNameList);
 
   Chronos::IntroCertListMsg msg;
 
-  vector<Name>::const_iterator it  = certNameList.begin();
-  vector<Name>::const_iterator end = certNameList.end();
+  std::vector<Name>::const_iterator it  = certNameList.begin();
+  std::vector<Name>::const_iterator end = certNameList.end();
   for(; it != end; it++)
     {
       Name certName;
@@ -522,7 +522,7 @@
 }
 
 void
-ChatDialog::onCertListRegisterFailed(const Name& prefix, const string& msg)
+ChatDialog::onCertListRegisterFailed(const Name& prefix, const std::string& msg)
 {
   _LOG_DEBUG("ChatDialog::onCertListRegisterFailed failed: " + msg);
 }
@@ -546,7 +546,7 @@
 }
 
 void
-ChatDialog::onCertSingleRegisterFailed(const Name& prefix, const string& msg)
+ChatDialog::onCertSingleRegisterFailed(const Name& prefix, const std::string& msg)
 {
   _LOG_DEBUG("ChatDialog::onCertListRegisterFailed failed: " + msg);
 }
@@ -757,11 +757,11 @@
   timeCell.firstCursorPosition().insertText(formatTime(timestamp));
 }
 
-string
+std::string
 ChatDialog::getRandomString()
 {
   uint32_t r = random::generateWord32();
-  stringstream ss;
+  std::stringstream ss;
   {
     using namespace CryptoPP;
     StringSource(reinterpret_cast<uint8_t*>(&r), 4, true,
@@ -797,13 +797,13 @@
 ChatDialog::summonReaper()
 {
   Sync::SyncLogic &logic = m_sock->getLogic ();
-  map<string, bool> branches = logic.getBranchPrefixes();
+  std::map<std::string, bool> branches = logic.getBranchPrefixes();
   QMap<QString, DisplayUserPtr> roster = m_scene->getRosterFull();
 
   m_zombieList.clear();
 
   QMapIterator<QString, DisplayUserPtr> it(roster);
-  map<string, bool>::iterator mapIt;
+  std::map<std::string, bool>::iterator mapIt;
   while(it.hasNext())
   {
     it.next();
@@ -836,15 +836,15 @@
 void
 ChatDialog::getTree(TrustTreeNodeList& nodeList)
 {
-  typedef map<Name, shared_ptr<TrustTreeNode> > NodeMap;
+  typedef std::map<Name, shared_ptr<TrustTreeNode> > NodeMap;
 
-  vector<Name> certNameList;
+  std::vector<Name> certNameList;
   NodeMap nodeMap;
 
   m_sock->getIntroCertNames(certNameList);
 
-  vector<Name>::const_iterator it  = certNameList.begin();
-  vector<Name>::const_iterator end = certNameList.end();
+  std::vector<Name>::const_iterator it  = certNameList.begin();
+  std::vector<Name>::const_iterator end = certNameList.end();
   for(; it != end; it++)
     {
       Name introducerCertName;
@@ -877,7 +877,7 @@
     }
   
   nodeList.clear();
-  queue<shared_ptr<TrustTreeNode> > nodeQueue;
+  std::queue<shared_ptr<TrustTreeNode> > nodeQueue;
 
   NodeMap::iterator nodeIt = nodeMap.find(m_identity);
   if(nodeIt == nodeMap.end())
@@ -1101,7 +1101,7 @@
 }
 
 void
-ChatDialog::onProcessTreeUpdate(const vector<Sync::MissingDataInfo>& v)
+ChatDialog::onProcessTreeUpdate(const std::vector<Sync::MissingDataInfo>& v)
 {
   _LOG_DEBUG("<<< processing Tree Update");
 
@@ -1239,7 +1239,7 @@
 {
   if (m_zombieIndex < m_zombieList.size())
   {
-    string prefix = m_zombieList.at(m_zombieIndex).toStdString();
+    std::string prefix = m_zombieList.at(m_zombieIndex).toStdString();
     m_sock->remove(prefix);
     _LOG_DEBUG("Reaped: prefix = " << prefix);
     m_zombieIndex++;
diff --git a/src/contact-manager.cpp b/src/contact-manager.cpp
index 36a0705..f89e023 100644
--- a/src/contact-manager.cpp
+++ b/src/contact-manager.cpp
@@ -32,13 +32,14 @@
 #endif
 
 using namespace ndn;
-using namespace std;
 namespace fs = boost::filesystem;
 
 INIT_LOGGER("chronos.ContactManager");
 
 namespace chronos{
 
+using ndn::shared_ptr;
+
 static const uint8_t DNS_RP_SEPARATOR[2] = {0xF0, 0x2E}; // %F0.
 
 ContactManager::ContactManager(shared_ptr<Face> face,
@@ -181,7 +182,7 @@
   Profile::const_iterator pIt  = profile.begin();
   Profile::const_iterator pEnd = profile.end();
 
-  map<string, int> endorseCount;
+  std::map<std::string, int> endorseCount;
   for(; pIt != pEnd; pIt++)
     {
       // _LOG_DEBUG("prepareEndorseInfo: profile[" << pIt->first << "]: " << pIt->second);
@@ -190,8 +191,8 @@
 
   int endorseCertCount = 0;
 
-  vector<shared_ptr<EndorseCertificate> >::const_iterator cIt  = m_bufferedContacts[identity].m_endorseCertList.begin();
-  vector<shared_ptr<EndorseCertificate> >::const_iterator cEnd = m_bufferedContacts[identity].m_endorseCertList.end();
+  std::vector<shared_ptr<EndorseCertificate> >::const_iterator cIt  = m_bufferedContacts[identity].m_endorseCertList.begin();
+  std::vector<shared_ptr<EndorseCertificate> >::const_iterator cEnd = m_bufferedContacts[identity].m_endorseCertList.end();
 
   for(; cIt != cEnd; cIt++, endorseCertCount++)
     {
@@ -210,8 +211,8 @@
       if(tmpProfile != profile)
         continue;
 
-      const vector<string>& endorseList = (*cIt)->getEndorseList();
-      vector<string>::const_iterator eIt = endorseList.begin();
+      const std::vector<std::string>& endorseList = (*cIt)->getEndorseList();
+      std::vector<std::string>::const_iterator eIt = endorseList.begin();
       for(; eIt != endorseList.end(); eIt++)
         endorseCount[*eIt] += 1;
     }
@@ -223,7 +224,7 @@
       EndorseInfo::Endorsement* endorsement = endorseInfo->add_endorsement();
       endorsement->set_type(pIt->first);
       endorsement->set_value(pIt->second);
-      stringstream ss;
+      std::stringstream ss;
       ss << endorseCount[pIt->first] << "/" << endorseCertCount;
       endorsement->set_endorse(ss.str());
     }
@@ -264,7 +265,7 @@
 
 void
 ContactManager::onDnsSelfEndorseCertValidationFailed(const shared_ptr<const Data>& data, 
-                                                     const string& failInfo,
+                                                     const std::string& failInfo,
                                                      const Name& identity)
 {
   // If we cannot validate the Self-Endorse-Certificate, we may retry or fetch id-cert,
@@ -297,7 +298,7 @@
 
 void
 ContactManager::onDnsCollectEndorseValidationFailed(const shared_ptr<const Data>& data, 
-                                                    const string& failInfo,
+                                                    const std::string& failInfo,
                                                     const Name& identity)
 {
   prepareEndorseInfo(identity);
@@ -316,9 +317,9 @@
                                              Data& data, 
                                              const Name& identity, 
                                              int certIndex,
-                                             string hash)
+                                             std::string hash)
 {
-  stringstream ss;
+  std::stringstream ss;
   {  
     using namespace CryptoPP;
 
@@ -384,7 +385,7 @@
 }
 
 void
-ContactManager::onDnsEndorseeValidationFailed(const shared_ptr<const Data>& data, const string& failInfo)
+ContactManager::onDnsEndorseeValidationFailed(const shared_ptr<const Data>& data, const std::string& failInfo)
 {
   decreaseCollectStatus();
 }
@@ -440,7 +441,7 @@
 }
 
 void
-ContactManager::onIdentityCertValidationFailed(const shared_ptr<const Data>& data, const string& failInfo)
+ContactManager::onIdentityCertValidationFailed(const shared_ptr<const Data>& data, const std::string& failInfo)
 {
   _LOG_DEBUG("ContactManager::onIdentityCertValidationFailed " << data->getName());
   decreaseIdCertCount();
@@ -489,7 +490,7 @@
 
   shared_ptr<IdentityCertificate> signingCert = m_keyChain.getCertificate(certificateName);
 
-  vector<string> endorseList;
+  std::vector<std::string> endorseList;
   Profile::const_iterator it = profile.begin();
   for(; it != profile.end(); it++)
     endorseList.push_back(it->first);
@@ -528,7 +529,7 @@
 
   Name signerKeyName = m_keyChain.getDefaultKeyNameForIdentity(m_identity);
 
-  vector<string> endorseList;
+  std::vector<std::string> endorseList;
   m_contactStorage->getEndorseList(identity, endorseList);
 
   shared_ptr<EndorseCertificate> cert = 
@@ -630,7 +631,7 @@
 }
   
 void
-ContactManager::onDnsRegisterFailed(const Name& prefix, const string& failInfo)
+ContactManager::onDnsRegisterFailed(const Name& prefix, const std::string& failInfo)
 {
   emit warning(QString(failInfo.c_str()));
 }
@@ -752,7 +753,7 @@
       request_stream << "Host: ndncert.named-data.net\r\n\r\n";
       request_stream.flush();
 
-      string line1;
+      std::string line1;
       std::getline(request_stream,line1);
       if (!request_stream)
         {
@@ -778,7 +779,7 @@
           emit warning(QString::fromStdString("Fail to fetch certificate directory! #4"));
           return;
         }
-      vector<string> headers;
+      std::vector<std::string> headers;
       std::string header;
       while (std::getline(request_stream, header) && header != "\r")
         headers.push_back(header);
diff --git a/src/contact-storage.cpp b/src/contact-storage.cpp
index 4c1fe04..d5aeee8 100644
--- a/src/contact-storage.cpp
+++ b/src/contact-storage.cpp
@@ -17,16 +17,16 @@
 #include <cryptopp/files.h>
 #include "logging.h"
 
-using namespace std;
 using namespace ndn;
 namespace fs = boost::filesystem;
 
-
 INIT_LOGGER ("chronos.ContactStorage");
 
 namespace chronos{
 
-const string INIT_SP_TABLE = "\
+using ndn::shared_ptr;
+
+const std::string INIT_SP_TABLE = "\
 CREATE TABLE IF NOT EXISTS                                           \n \
   SelfProfile(                                                       \n \
       profile_type      BLOB NOT NULL,                               \n \
@@ -38,7 +38,7 @@
 CREATE INDEX sp_index ON SelfProfile(profile_type);                  \n \
 "; // user's own profile;
 
-const string INIT_SE_TABLE = "\
+const std::string INIT_SE_TABLE = "\
 CREATE TABLE IF NOT EXISTS                                           \n \
   SelfEndorse(                                                       \n \
       identity          BLOB NOT NULL UNIQUE,                        \n \
@@ -49,7 +49,7 @@
 CREATE INDEX se_index ON SelfEndorse(identity);                      \n \
 "; // user's self endorse cert;
 
-const string INIT_CONTACT_TABLE = "\
+const std::string INIT_CONTACT_TABLE = "\
 CREATE TABLE IF NOT EXISTS                                           \n \
   Contact(                                                           \n \
       contact_namespace BLOB NOT NULL,                               \n \
@@ -66,7 +66,7 @@
 CREATE INDEX contact_index ON Contact(contact_namespace);            \n \
 "; // contact's basic info
 
-const string INIT_TS_TABLE = "\
+const std::string INIT_TS_TABLE = "\
 CREATE TABLE IF NOT EXISTS                                           \n \
   TrustScope(                                                        \n \
       id                INTEGER PRIMARY KEY AUTOINCREMENT,           \n \
@@ -77,7 +77,7 @@
 CREATE INDEX ts_index ON TrustScope(contact_namespace);              \n \
 "; // contact's trust scope;
 
-const string INIT_CP_TABLE = "\
+const std::string INIT_CP_TABLE = "\
 CREATE TABLE IF NOT EXISTS                                           \n \
   ContactProfile(                                                    \n \
       profile_identity  BLOB NOT NULL,                               \n \
@@ -91,7 +91,7 @@
 CREATE INDEX cp_index ON ContactProfile(profile_identity);           \n \
 "; // contact's profile
 
-const string INIT_PE_TABLE = "\
+const std::string INIT_PE_TABLE = "\
 CREATE TABLE IF NOT EXISTS                                           \n \
   ProfileEndorse(                                                    \n \
       identity          BLOB NOT NULL UNIQUE,                        \n \
@@ -103,7 +103,7 @@
 CREATE INDEX pe_index ON ProfileEndorse(identity);                   \n \
 "; // user's endorsement on contacts
 
-const string INIT_CE_TABLE = "\
+const std::string INIT_CE_TABLE = "\
 CREATE TABLE IF NOT EXISTS                                           \n \
   CollectEndorse(                                                    \n \
       endorser          BLOB NOT NULL,                               \n \
@@ -114,7 +114,7 @@
   );                                                                 \n \
 "; // contact's endorsements on the user
 
-const string INIT_DD_TABLE = "\
+const std::string INIT_DD_TABLE = "\
 CREATE TABLE IF NOT EXISTS                                           \n \
   DnsData(                                                           \n \
       dns_name      BLOB NOT NULL,                                   \n \
@@ -149,12 +149,12 @@
 
 }
 
-string
+std::string
 ContactStorage::getDBName()
 {
-  string dbName("chronos-");
+  std::string dbName("chronos-");
 
-  stringstream ss;
+  std::stringstream ss;
   {
     using namespace CryptoPP;
 
@@ -168,7 +168,7 @@
 }
 
 void
-ContactStorage::initializeTable(const string& tableName, const string& sqlCreateStmt)
+ContactStorage::initializeTable(const std::string& tableName, const std::string& sqlCreateStmt)
 {
   sqlite3_stmt *stmt;
   sqlite3_prepare_v2 (m_db, "SELECT name FROM sqlite_master WHERE type='table' And name=?", -1, &stmt, 0);
@@ -198,8 +198,8 @@
 
   while( sqlite3_step (stmt) == SQLITE_ROW)
     {
-      string profileType(reinterpret_cast<const char *>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes (stmt, 0));
-      string profileValue(reinterpret_cast<const char *>(sqlite3_column_text(stmt, 1)), sqlite3_column_bytes (stmt, 1));
+      std::string profileType(reinterpret_cast<const char *>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes (stmt, 0));
+      std::string profileValue(reinterpret_cast<const char *>(sqlite3_column_text(stmt, 1)), sqlite3_column_bytes (stmt, 1));
       (*profile)[profileType] = profileValue;
     }
 
@@ -261,8 +261,8 @@
 
   while(sqlite3_step (stmt) == SQLITE_ROW)
     {
-      string certName(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes(stmt, 1));
-      stringstream ss;
+      std::string certName(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes(stmt, 1));
+      std::stringstream ss;
       {
         using namespace CryptoPP;
         SHA256 hash;
@@ -279,7 +279,7 @@
 }
 
 void
-ContactStorage::getEndorseList(const Name& identity, vector<string>& endorseList)
+ContactStorage::getEndorseList(const Name& identity, std::vector<std::string>& endorseList)
 {
   sqlite3_stmt *stmt;
   sqlite3_prepare_v2 (m_db, "SELECT profile_type FROM ContactProfile WHERE profile_identity=? AND endorse=1 ORDER BY profile_type", -1, &stmt, 0);
@@ -287,7 +287,7 @@
 
   while( sqlite3_step (stmt) == SQLITE_ROW)
     {
-      string profileType(reinterpret_cast<const char *>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes (stmt, 0));
+      std::string profileType(reinterpret_cast<const char *>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes (stmt, 0));
       endorseList.push_back(profileType);      
     }
   sqlite3_finalize (stmt);  
@@ -297,7 +297,7 @@
 void 
 ContactStorage::removeContact(const Name& identityName)
 {
-  string identity = identityName.toUri();
+  std::string identity = identityName.toUri();
   
   sqlite3_stmt *stmt;  
   sqlite3_prepare_v2 (m_db, "DELETE FROM Contact WHERE contact_namespace=?", -1, &stmt, 0);
@@ -322,7 +322,7 @@
   if(doesContactExist(contact.getNameSpace()))
     throw Error("Normal Contact has already existed");
 
-  string identity = contact.getNameSpace().toUri();
+  std::string identity = contact.getNameSpace().toUri();
   bool isIntroducer = contact.isIntroducer();
 
   sqlite3_stmt *stmt;  
@@ -397,8 +397,8 @@
 
   if(sqlite3_step (stmt) == SQLITE_ROW)
     {
-      string alias(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes (stmt, 0));
-      string keyName(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 1)), sqlite3_column_bytes (stmt, 1));
+      std::string alias(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes (stmt, 0));
+      std::string keyName(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 1)), sqlite3_column_bytes (stmt, 1));
       PublicKey key(sqlite3_column_text(stmt, 2), sqlite3_column_bytes (stmt, 2));
       time::system_clock::TimePoint notBefore = time::fromUnixTimestamp(time::milliseconds(sqlite3_column_int64 (stmt, 3)));
       time::system_clock::TimePoint notAfter = time::fromUnixTimestamp(time::milliseconds(sqlite3_column_int64 (stmt, 4)));
@@ -413,8 +413,8 @@
   
   while(sqlite3_step (stmt) == SQLITE_ROW)
     {
-      string type(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes (stmt, 0));
-      string value(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 1)), sqlite3_column_bytes (stmt, 1));
+      std::string type(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes (stmt, 0));
+      std::string value(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 1)), sqlite3_column_bytes (stmt, 1));
       profile[type] = value;
     }
   sqlite3_finalize (stmt);
@@ -427,7 +427,7 @@
 
       while(sqlite3_step (stmt) == SQLITE_ROW)
         {
-          Name scope(string(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes (stmt, 0)));
+          Name scope(std::string(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes (stmt, 0)));
           contact->addTrustScope(scope);
         }
       sqlite3_finalize (stmt);
@@ -450,7 +450,7 @@
 }
 
 void 
-ContactStorage::updateAlias(const Name& identity, string alias)
+ContactStorage::updateAlias(const Name& identity, std::string alias)
 {
   sqlite3_stmt *stmt;
   sqlite3_prepare_v2 (m_db, "UPDATE Contact SET contact_alias=? WHERE contact_namespace=?", -1, &stmt, 0);
@@ -483,22 +483,22 @@
 }
 
 void
-ContactStorage::getAllContacts(vector<shared_ptr<Contact> >& contacts) const
+ContactStorage::getAllContacts(std::vector<shared_ptr<Contact> >& contacts) const
 {
-  vector<Name> contactNames;
+  std::vector<Name> contactNames;
 
   sqlite3_stmt *stmt;
   sqlite3_prepare_v2 (m_db, "SELECT contact_namespace FROM Contact", -1, &stmt, 0);
   
   while(sqlite3_step (stmt) == SQLITE_ROW)
     {
-      string identity(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes(stmt, 0));
+      std::string identity(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 0)), sqlite3_column_bytes(stmt, 0));
       contactNames.push_back(Name(identity));
     }
   sqlite3_finalize (stmt);
 
-  vector<Name>::iterator it  = contactNames.begin();
-  vector<Name>::iterator end = contactNames.end();
+  std::vector<Name>::iterator it  = contactNames.begin();
+  std::vector<Name>::iterator end = contactNames.end();
   for(; it != end; it++)
     {
       shared_ptr<Contact> contact = getContact(*it);
@@ -509,9 +509,9 @@
 
 void
 ContactStorage::updateDnsData(const Block& data, 
-                              const string& name, 
-                              const string& type, 
-                              const string& dataName)
+                              const std::string& name, 
+                              const std::string& type, 
+                              const std::string& dataName)
 {  
   sqlite3_stmt *stmt;
   sqlite3_prepare_v2 (m_db, "INSERT OR REPLACE INTO DnsData (dns_name, dns_type, dns_value, data_name) VALUES (?, ?, ?, ?)", -1, &stmt, 0);
@@ -545,7 +545,7 @@
 }
 
 shared_ptr<Data>
-ContactStorage::getDnsData(const string& name, const string& type)
+ContactStorage::getDnsData(const std::string& name, const std::string& type)
 {
   shared_ptr<Data> data;
 
diff --git a/src/controller.cpp b/src/controller.cpp
index 4d80604..171dfc7 100644
--- a/src/controller.cpp
+++ b/src/controller.cpp
@@ -39,6 +39,8 @@
 
 namespace chronos {
 
+using ndn::shared_ptr;
+
 static const uint8_t ROUTING_PREFIX_SEPARATOR[2] = {0xF0, 0x2E};
 
 // constructor & destructor
diff --git a/src/endorse-certificate.cpp b/src/endorse-certificate.cpp
index 3aef18e..b5c94ad 100644
--- a/src/endorse-certificate.cpp
+++ b/src/endorse-certificate.cpp
@@ -12,7 +12,7 @@
 #include "endorse-extension.pb.h"
 #include <boost/iostreams/stream.hpp>
 
-using namespace std;
+
 using namespace ndn;
 
 namespace chronos{
@@ -23,9 +23,9 @@
 const std::vector<std::string> EndorseCertificate::DEFAULT_ENDORSE_LIST = std::vector<std::string>();
 
 Chronos::EndorseExtensionMsg&
-operator << (Chronos::EndorseExtensionMsg& endorseExtension, const vector<string>& endorseList)
+operator << (Chronos::EndorseExtensionMsg& endorseExtension, const std::vector<std::string>& endorseList)
 { 
-  vector<string>::const_iterator it = endorseList.begin();
+  std::vector<std::string>::const_iterator it = endorseList.begin();
   for(; it != endorseList.end(); it++)
     endorseExtension.add_endorseentry()->set_name(*it);
 
@@ -33,7 +33,7 @@
 }
 
 Chronos::EndorseExtensionMsg&
-operator >> (Chronos::EndorseExtensionMsg& endorseExtension, vector<string>& endorseList)
+operator >> (Chronos::EndorseExtensionMsg& endorseExtension, std::vector<std::string>& endorseList)
 {
   for(int i = 0; i < endorseExtension.endorseentry_size(); i ++)
     endorseList.push_back(endorseExtension.endorseentry(i).name());
@@ -43,7 +43,7 @@
 
 EndorseCertificate::EndorseCertificate(const IdentityCertificate& kskCertificate,
                                        const Profile& profile,
-                                       const vector<string>& endorseList)
+                                       const std::vector<std::string>& endorseList)
   : Certificate()
   , m_profile(profile)
   , m_endorseList(endorseList)
@@ -75,7 +75,7 @@
 
 EndorseCertificate::EndorseCertificate(const EndorseCertificate& endorseCertificate,
                                        const Name& signer,
-                                       const vector<string>& endorseList)
+                                       const std::vector<std::string>& endorseList)
   : Certificate()
   , m_keyName(endorseCertificate.m_keyName)
   , m_signer(signer)
@@ -110,7 +110,7 @@
                                        const time::system_clock::TimePoint& notAfter,
                                        const Name& signer,
                                        const Profile& profile,
-                                       const vector<string>& endorseList)
+                                       const std::vector<std::string>& endorseList)
   : Certificate()
   , m_keyName(keyName)
   , m_signer(signer)
diff --git a/src/invitation-dialog.cpp b/src/invitation-dialog.cpp
index d14715b..1da8f00 100644
--- a/src/invitation-dialog.cpp
+++ b/src/invitation-dialog.cpp
@@ -12,7 +12,6 @@
 #include "invitation-dialog.h"
 #include "ui_invitation-dialog.h"
 
-using namespace std;
 using namespace ndn;
 
 InvitationDialog::InvitationDialog(QWidget *parent) 
@@ -33,11 +32,11 @@
 }
 
 void
-InvitationDialog::setInvitation(const string& alias,
-                                const string& chatroom,
+InvitationDialog::setInvitation(const std::string& alias,
+                                const std::string& chatroom,
                                 const Name& interestName)
 {
-  string msg = alias;
+  std::string msg = alias;
   m_invitationInterest = interestName;
   msg.append(" invites you to: ").append(chatroom);
   ui->msgLabel->setText(QString::fromStdString(msg));
diff --git a/src/invitation.cpp b/src/invitation.cpp
index 851010b..cc5ba40 100644
--- a/src/invitation.cpp
+++ b/src/invitation.cpp
@@ -15,7 +15,6 @@
 
 #include "logging.h"
 
-using namespace std;
 using namespace ndn;
 
 INIT_LOGGER("Invitation");
@@ -52,7 +51,7 @@
 }
 
 Invitation::Invitation(const Name& inviteeNameSpace,
-                       const string& chatroom,
+                       const std::string& chatroom,
                        const Name& inviterRoutingPrefix,
                        const IdentityCertificate& inviterCertificate)
   : m_inviteeNameSpace(inviteeNameSpace)
diff --git a/src/invite-list-dialog.cpp b/src/invite-list-dialog.cpp
index c46036f..bfc4040 100644
--- a/src/invite-list-dialog.cpp
+++ b/src/invite-list-dialog.cpp
@@ -11,8 +11,6 @@
 #include "invite-list-dialog.h"
 #include "ui_invite-list-dialog.h"
 
-using namespace std;
-
 InviteListDialog::InviteListDialog(QWidget *parent) 
   :QDialog(parent)
   , ui(new Ui::InviteListDialog)
@@ -35,9 +33,9 @@
 }
 
 void
-InviteListDialog::setInviteLabel(string label)
+InviteListDialog::setInviteLabel(std::string label)
 { 
-  string msg("invite to chatroom:\n");
+  std::string msg("invite to chatroom:\n");
   msg += label;
   ui->inviteLabel->setText(QString::fromStdString(msg));
 }
diff --git a/src/main.cpp b/src/main.cpp
index 009f761..a1ed56c 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -19,6 +19,7 @@
 INIT_LOGGER("MAIN");
 
 using namespace ndn;
+using ndn::shared_ptr;
 
 class NewApp : public QApplication
 {
diff --git a/src/profile-editor.cpp b/src/profile-editor.cpp
index ac5dcbf..457ecfd 100644
--- a/src/profile-editor.cpp
+++ b/src/profile-editor.cpp
@@ -20,8 +20,6 @@
 
 INIT_LOGGER("ProfileEditor")
 
-using namespace std;
-
 ProfileEditor::ProfileEditor(QWidget *parent) 
   : QDialog(parent)
   , ui(new Ui::ProfileEditor)
diff --git a/src/profile.cpp b/src/profile.cpp
index 40a7aee..7bf7293 100644
--- a/src/profile.cpp
+++ b/src/profile.cpp
@@ -11,32 +11,31 @@
 #include "profile.h"
 #include "logging.h"
 
-using namespace std;
 using namespace ndn;
 
 INIT_LOGGER("Profile");
 
 namespace chronos{
 
-const string Profile::OID_NAME("2.5.4.41");
-const string Profile::OID_ORG("2.5.4.11");
-const string Profile::OID_GROUP("2.5.4.1");
-const string Profile::OID_HOMEPAGE("2.5.4.3");
-const string Profile::OID_ADVISOR("2.5.4.80");
-const string Profile::OID_EMAIL("1.2.840.113549.1.9.1");
+const std::string Profile::OID_NAME("2.5.4.41");
+const std::string Profile::OID_ORG("2.5.4.11");
+const std::string Profile::OID_GROUP("2.5.4.1");
+const std::string Profile::OID_HOMEPAGE("2.5.4.3");
+const std::string Profile::OID_ADVISOR("2.5.4.80");
+const std::string Profile::OID_EMAIL("1.2.840.113549.1.9.1");
 
 Profile::Profile(const IdentityCertificate& identityCertificate)
 {
   Name keyName = IdentityCertificate::certificateNameToPublicKeyName(identityCertificate.getName());
 
-  m_entries[string("IDENTITY")] = keyName.getPrefix(-1).toUri();
+  m_entries[std::string("IDENTITY")] = keyName.getPrefix(-1).toUri();
   
-  const vector<CertificateSubjectDescription>& subList = identityCertificate.getSubjectDescriptionList();
-  vector<CertificateSubjectDescription>::const_iterator it = subList.begin();
+  const std::vector<CertificateSubjectDescription>& subList = identityCertificate.getSubjectDescriptionList();
+  std::vector<CertificateSubjectDescription>::const_iterator it = subList.begin();
   for(; it != subList.end(); it++)
     {
-      const string oidStr = it->getOidString();
-      string valueStr = it->getValue();
+      const std::string oidStr = it->getOidString();
+      std::string valueStr = it->getValue();
       if(oidStr == OID_NAME)
         m_entries["name"] = valueStr;
       else if(oidStr == OID_ORG)
@@ -60,8 +59,8 @@
 }
 
 Profile::Profile(const Name& identityName,
-		 const string& name,
-		 const string& institution)
+		 const std::string& name,
+		 const std::string& institution)
 {
   m_entries["IDENTITY"] = identityName.toUri();
   m_entries["name"] = name;
@@ -73,7 +72,7 @@
 {}
 
 void
-Profile::encode(ostream& os) const
+Profile::encode(std::ostream& os) const
 {
   Chronos::ProfileMsg profileMsg;
   profileMsg << (*this);
@@ -81,7 +80,7 @@
 }
 
 void
-Profile::decode(istream& is)
+Profile::decode(std::istream& is)
 {
   Chronos::ProfileMsg profileMsg;    
   profileMsg.ParseFromIstream(&is);
@@ -91,7 +90,7 @@
 Chronos::ProfileMsg&
 operator << (Chronos::ProfileMsg& profileMsg, const Profile& profile)
 {
-  map<string, string>::const_iterator it = profile.begin();
+  std::map<std::string, std::string>::const_iterator it = profile.begin();
   for(; it != profile.end(); it++)
     {
       Chronos::ProfileMsg::ProfileEntry* profileEntry = profileMsg.add_entry();
diff --git a/src/set-alias-dialog.cpp b/src/set-alias-dialog.cpp
index 7327c1b..24fb6a8 100644
--- a/src/set-alias-dialog.cpp
+++ b/src/set-alias-dialog.cpp
@@ -12,9 +12,6 @@
 #include "ui_set-alias-dialog.h"
 
 
-using namespace ndn;
-using namespace std;
-
 SetAliasDialog::SetAliasDialog(QWidget *parent) 
   : QDialog(parent)
   , ui(new Ui::SetAliasDialog)
diff --git a/src/start-chat-dialog.cpp b/src/start-chat-dialog.cpp
index e9ac1f8..c508c1e 100644
--- a/src/start-chat-dialog.cpp
+++ b/src/start-chat-dialog.cpp
@@ -11,8 +11,6 @@
 #include "start-chat-dialog.h"
 #include "ui_start-chat-dialog.h"
 
-using namespace std;
-
 StartChatDialog::StartChatDialog(QWidget *parent) 
   : QDialog(parent)
   , ui(new Ui::StartChatDialog)
@@ -31,7 +29,7 @@
 }
 
 void
-StartChatDialog::setChatroom(const string& chatroom)
+StartChatDialog::setChatroom(const std::string& chatroom)
 { 
   ui->chatroomInput->setText(QString::fromStdString(chatroom)); 
 }
diff --git a/src/validator-invitation.cpp b/src/validator-invitation.cpp
index 1c38860..a95f898 100644
--- a/src/validator-invitation.cpp
+++ b/src/validator-invitation.cpp
@@ -13,13 +13,14 @@
 
 #include "logging.h"
 
-using namespace std;
 using namespace ndn;
 
 INIT_LOGGER("ValidatorInvitation");
 
 namespace chronos{
 
+using ndn::shared_ptr;
+
 const shared_ptr<CertificateCache> ValidatorInvitation::DefaultCertificateCache = shared_ptr<CertificateCache>();
 
 ValidatorInvitation::ValidatorInvitation()
@@ -37,7 +38,7 @@
                                   int stepCount, 
                                   const OnDataValidated& onValidated, 
                                   const OnDataValidationFailed& onValidationFailed,
-                                  vector<shared_ptr<ValidationRequest> >& nextSteps)
+                                  std::vector<shared_ptr<ValidationRequest> >& nextSteps)
 {
   try
     {
@@ -72,7 +73,7 @@
                                   int stepCount, 
                                   const OnInterestValidated& onValidated, 
                                   const OnInterestValidationFailed& onValidationFailed,
-                                  vector<shared_ptr<ValidationRequest> >& nextSteps)
+                                  std::vector<shared_ptr<ValidationRequest> >& nextSteps)
 {
   try
     {
diff --git a/src/validator-panel.cpp b/src/validator-panel.cpp
index 8de4bb6..2197d66 100644
--- a/src/validator-panel.cpp
+++ b/src/validator-panel.cpp
@@ -14,12 +14,13 @@
 
 using namespace std;
 using namespace ndn;
-using namespace ndn::ptr_lib;
 
 INIT_LOGGER("ValidatorPanel");
 
 namespace chronos{
 
+using ndn::shared_ptr;
+
 const shared_ptr<CertificateCache> ValidatorPanel::DEFAULT_CERT_CACHE = shared_ptr<CertificateCache>();
 
 ValidatorPanel::ValidatorPanel(int stepLimit /* = 10 */,
@@ -39,7 +40,7 @@
                              int stepCount, 
                              const OnDataValidated& onValidated, 
                              const OnDataValidationFailed& onValidationFailed,
-                             vector<shared_ptr<ValidationRequest> >& nextSteps)
+                             std::vector<shared_ptr<ValidationRequest> >& nextSteps)
 {
   if(m_stepLimit == stepCount)
     {
