diff --git a/ndn-cpp/common.h b/ndn-cpp/common.h
index a9c078b..b517c1b 100644
--- a/ndn-cpp/common.h
+++ b/ndn-cpp/common.h
@@ -19,6 +19,7 @@
 
 namespace ndn
 {
+namespace ptr_lib = boost;
 typedef boost::posix_time::ptime Time;
 typedef boost::posix_time::time_duration TimeInterval;
 
@@ -66,9 +67,6 @@
 typedef std::vector<unsigned char> Bytes;
 typedef std::vector<std::string>Comps;
 
-typedef boost::shared_ptr<Bytes> BytesPtr;
-typedef boost::shared_ptr<const Bytes> ConstBytesPtr;
-
 inline
 const unsigned char *
 head(const Bytes &bytes)
@@ -94,18 +92,18 @@
   }
 }
 
-inline BytesPtr
+inline ptr_lib::shared_ptr<Bytes>
 readRawPtr (const unsigned char *src, size_t len)
 {
   if (len > 0)
     {
-      BytesPtr ret (new Bytes (len));
+      ptr_lib::shared_ptr<Bytes> ret (new Bytes (len));
       memcpy (head (*ret), src, len);
 
       return ret;
     }
   else
-    return BytesPtr ();
+    return ptr_lib::shared_ptr<Bytes> ();
 }
 } // ndn
 #endif // NDN_COMMON_H
diff --git a/ndn-cpp/data.h b/ndn-cpp/data.h
index 3264e4d..962bfe5 100644
--- a/ndn-cpp/data.h
+++ b/ndn-cpp/data.h
@@ -61,13 +61,13 @@
   /**
    * @brief Get const smart pointer to signature object
    */
-  inline ConstSignaturePtr
+  inline ptr_lib::shared_ptr<const Signature>
   getSignature () const;
 
   /**
    * @brief Get smart pointer to signature object
    */
-  inline SignaturePtr
+  inline ptr_lib::shared_ptr<Signature>
   getSignature ();
 
   /**
@@ -75,7 +75,7 @@
    * @param signature smart pointer to a signature object
    */
   inline void
-  setSignature (SignaturePtr sigature);
+  setSignature (ptr_lib::shared_ptr<Signature> sigature);
 
   /**
    * @brief Get const reference to content object (content info + actual content)
@@ -126,10 +126,10 @@
 
 private:
   Name m_name;
-  SignaturePtr m_signature; // signature with its parameters "binds" name and content
+  ptr_lib::shared_ptr<Signature> m_signature; // signature with its parameters "binds" name and content
   Content m_content;
 
-  SignedBlobPtr m_wire;  
+  ptr_lib::shared_ptr<SignedBlob> m_wire;  
 };
 
 inline Data &
@@ -151,20 +151,20 @@
   return m_name;
 }
 
-inline ConstSignaturePtr
+inline ptr_lib::shared_ptr<const Signature>
 Data::getSignature () const
 {
   return m_signature;
 }
 
-inline SignaturePtr
+inline ptr_lib::shared_ptr<Signature>
 Data::getSignature ()
 {
   return m_signature;
 }
 
 inline void
-Data::setSignature (SignaturePtr signature)
+Data::setSignature (ptr_lib::shared_ptr<Signature> signature)
 {
   m_signature = signature;
 }
diff --git a/ndn-cpp/fields/blob.h b/ndn-cpp/fields/blob.h
index ce0d667..d81d039 100644
--- a/ndn-cpp/fields/blob.h
+++ b/ndn-cpp/fields/blob.h
@@ -19,10 +19,6 @@
 
 namespace ndn {
 
-class Blob;
-typedef boost::shared_ptr<Blob> BlobPtr;
-typedef boost::shared_ptr<const Blob> ConstBlobPtr;
-
 /**
  * @brief Class representing a general-use binary blob
  */
diff --git a/ndn-cpp/fields/name.h b/ndn-cpp/fields/name.h
index a356f8f..0eeed2a 100644
--- a/ndn-cpp/fields/name.h
+++ b/ndn-cpp/fields/name.h
@@ -18,10 +18,6 @@
 
 namespace ndn {
 
-class Name;
-typedef boost::shared_ptr<Name> NamePtr;
-typedef boost::shared_ptr<const Name> ConstNamePtr;
-
 /**
  * @brief Class for NDN Name
  */
diff --git a/ndn-cpp/fields/signature.h b/ndn-cpp/fields/signature.h
index 1368663..65afc04 100644
--- a/ndn-cpp/fields/signature.h
+++ b/ndn-cpp/fields/signature.h
@@ -18,10 +18,6 @@
 
 namespace wire { class Base; }
 
-class Signature;
-typedef boost::shared_ptr<Signature> SignaturePtr;
-typedef boost::shared_ptr<const Signature> ConstSignaturePtr;
-
 /**
  * @brief Pure virtual class providing an interface to work with signatures for NDN data packets
  */
diff --git a/ndn-cpp/fields/signed-blob.h b/ndn-cpp/fields/signed-blob.h
index fd5bf90..b8cb39f 100644
--- a/ndn-cpp/fields/signed-blob.h
+++ b/ndn-cpp/fields/signed-blob.h
@@ -17,10 +17,6 @@
 
 namespace ndn {
 
-class SignedBlob;
-typedef boost::shared_ptr<SignedBlob> SignedBlobPtr;
-typedef boost::shared_ptr<const SignedBlob> ConstSignedBlobPtr;
-
 /**
  * @brief Class representing a blob, which has a signed portion (e.g., bytes of DATA packet)
  */
diff --git a/ndn-cpp/helpers/hash.cc b/ndn-cpp/helpers/hash.cc
index 0ecf927..aa98784 100644
--- a/ndn-cpp/helpers/hash.cc
+++ b/ndn-cpp/helpers/hash.cc
@@ -49,12 +49,12 @@
 
 
 unsigned char Hash::_origin = 0;
-HashPtr Hash::Origin(new Hash(&Hash::_origin, sizeof(unsigned char)));
+ptr_lib::shared_ptr<Hash> Hash::Origin(new Hash(&Hash::_origin, sizeof(unsigned char)));
 
-HashPtr
+ptr_lib::shared_ptr<Hash>
 Hash::FromString (const std::string &hashInTextEncoding)
 {
-  HashPtr retval = make_shared<Hash> (reinterpret_cast<void*> (0), 0);
+  ptr_lib::shared_ptr<Hash> retval = make_shared<Hash> (reinterpret_cast<void*> (0), 0);
 
   if (hashInTextEncoding.size () == 0)
     {
@@ -78,10 +78,10 @@
   return retval;
 }
 
-HashPtr
+ptr_lib::shared_ptr<Hash>
 Hash::FromFileContent (const char *filename)
 {
-  HashPtr retval = make_shared<Hash> (reinterpret_cast<void*> (0), 0);
+  ptr_lib::shared_ptr<Hash> retval = make_shared<Hash> (reinterpret_cast<void*> (0), 0);
   retval->m_buf = new unsigned char [EVP_MAX_MD_SIZE];
 
   EVP_MD_CTX *hash_context = EVP_MD_CTX_create ();
@@ -105,10 +105,10 @@
   return retval;
 }
 
-HashPtr
+ptr_lib::shared_ptr<Hash>
 Hash::FromBytes (const ndn::Bytes &bytes)
 {
-  HashPtr retval = make_shared<Hash> (reinterpret_cast<void*> (0), 0);
+  ptr_lib::shared_ptr<Hash> retval = make_shared<Hash> (reinterpret_cast<void*> (0), 0);
   retval->m_buf = new unsigned char [EVP_MAX_MD_SIZE];
 
   EVP_MD_CTX *hash_context = EVP_MD_CTX_create ();
diff --git a/ndn-cpp/helpers/hash.h b/ndn-cpp/helpers/hash.h
index 8ac23fa..b5d96aa 100644
--- a/ndn-cpp/helpers/hash.h
+++ b/ndn-cpp/helpers/hash.h
@@ -22,16 +22,11 @@
 
 namespace ndn
 {
-
-class Hash;
-typedef boost::shared_ptr<Hash> HashPtr;
-typedef boost::shared_ptr<const Hash> ConstHashPtr;
-
 class Hash
 {
 public:
   static unsigned char _origin;
-  static HashPtr Origin;
+  static ptr_lib::shared_ptr<Hash> Origin;
 
   Hash ()
     : m_buf(0)
@@ -59,13 +54,13 @@
       }
   }
 
-  static HashPtr
+  static ptr_lib::shared_ptr<Hash>
   FromString (const std::string &hashInTextEncoding);
 
-  static HashPtr
+  static ptr_lib::shared_ptr<Hash>
   FromFileContent (const char *fileName);
 
-  static HashPtr
+  static ptr_lib::shared_ptr<Hash>
   FromBytes (const ndn::Bytes &bytes);
 
   ~Hash ()
diff --git a/ndn-cpp/interest.h b/ndn-cpp/interest.h
index 7e778df..ace9847 100644
--- a/ndn-cpp/interest.h
+++ b/ndn-cpp/interest.h
@@ -21,9 +21,6 @@
 namespace ndn {
 
 class Interest;
-typedef boost::shared_ptr<Interest> InterestPtr;
-typedef boost::shared_ptr<const Interest> ConstInterestPtr;
-
 /**
  * @brief Class abstracting operations with Interests (constructing and getting access to Interest fields)
  */
@@ -288,7 +285,7 @@
   Hash m_publisherPublicKeyDigest;
   Exclude m_exclude;
 
-  BlobPtr m_wire;
+  ptr_lib::shared_ptr<Blob> m_wire;
 };
 
 namespace Error
