diff --git a/ndn-cpp/common.h b/ndn-cpp/common.h
index e45f067..30b705a 100644
--- a/ndn-cpp/common.h
+++ b/ndn-cpp/common.h
@@ -19,27 +19,6 @@
 
 namespace ndn
 {
-template<class T>
-struct Ptr : public boost::shared_ptr<T>
-{
-  Ptr () { }
-  Ptr (boost::shared_ptr<T> ptr) : boost::shared_ptr<T>(ptr) { }
-  Ptr (T *ptr) :  boost::shared_ptr<T>(ptr) { }
-
-  template<class Y>
-  Ptr & operator = (boost::shared_ptr<Y> ptr)
-  {
-    boost::static_pointer_cast<T> (ptr).swap (*this);
-    // *this = boost::static_pointer_cast<T> (ptr);
-    return *this;
-  }
-
-  operator Ptr<const T> () const { return *this; }
-
-  static Ptr
-  Create () { return boost::make_shared<T> (); }
-};
-
 typedef boost::posix_time::ptime Time;
 typedef boost::posix_time::time_duration TimeInterval;
 
@@ -97,6 +76,7 @@
 typedef std::vector<std::string>Comps;
 
 typedef boost::shared_ptr<Bytes> BytesPtr;
+typedef boost::shared_ptr<const Bytes> ConstBytesPtr;
 
 inline
 const unsigned char *
diff --git a/ndn-cpp/data.h b/ndn-cpp/data.h
index 212dfbd..3264e4d 100644
--- a/ndn-cpp/data.h
+++ b/ndn-cpp/data.h
@@ -61,13 +61,13 @@
   /**
    * @brief Get const smart pointer to signature object
    */
-  inline Ptr<const Signature>
+  inline ConstSignaturePtr
   getSignature () const;
 
   /**
    * @brief Get smart pointer to signature object
    */
-  inline Ptr<Signature>
+  inline SignaturePtr
   getSignature ();
 
   /**
@@ -75,7 +75,7 @@
    * @param signature smart pointer to a signature object
    */
   inline void
-  setSignature (Ptr<Signature> sigature);
+  setSignature (SignaturePtr sigature);
 
   /**
    * @brief Get const reference to content object (content info + actual content)
@@ -126,10 +126,10 @@
 
 private:
   Name m_name;
-  Ptr<Signature> m_signature; // signature with its parameters "binds" name and content
+  SignaturePtr m_signature; // signature with its parameters "binds" name and content
   Content m_content;
 
-  Ptr<SignedBlob> m_wire;  
+  SignedBlobPtr m_wire;  
 };
 
 inline Data &
@@ -151,20 +151,20 @@
   return m_name;
 }
 
-inline Ptr<const Signature>
+inline ConstSignaturePtr
 Data::getSignature () const
 {
   return m_signature;
 }
 
-inline Ptr<Signature>
+inline SignaturePtr
 Data::getSignature ()
 {
   return m_signature;
 }
 
 inline void
-Data::setSignature (Ptr<Signature> signature)
+Data::setSignature (SignaturePtr signature)
 {
   m_signature = signature;
 }
diff --git a/ndn-cpp/fields/blob.h b/ndn-cpp/fields/blob.h
index 85fd71b..ce0d667 100644
--- a/ndn-cpp/fields/blob.h
+++ b/ndn-cpp/fields/blob.h
@@ -15,9 +15,14 @@
 
 #include <vector>
 #include <cstddef>
+#include <boost/shared_ptr.hpp>
 
 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 18e2412..a356f8f 100644
--- a/ndn-cpp/fields/name.h
+++ b/ndn-cpp/fields/name.h
@@ -18,6 +18,10 @@
 
 namespace ndn {
 
+class Name;
+typedef boost::shared_ptr<Name> NamePtr;
+typedef boost::shared_ptr<const Name> ConstNamePtr;
+
 /**
  * @brief Class for NDN Name
  */
@@ -393,8 +397,6 @@
   std::vector<name::Component> m_comps;
 };
 
-typedef boost::shared_ptr<Name> NamePtr;
-
 inline std::ostream &
 operator << (std::ostream &os, const Name &name)
 {
diff --git a/ndn-cpp/fields/signature.h b/ndn-cpp/fields/signature.h
index a9fb39a..1368663 100644
--- a/ndn-cpp/fields/signature.h
+++ b/ndn-cpp/fields/signature.h
@@ -12,11 +12,16 @@
 #define NDN_SIGNATURE_H
 
 #include <iostream>
+#include <boost/shared_ptr.hpp>
 
 namespace ndn {
 
 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 2686977..fd5bf90 100644
--- a/ndn-cpp/fields/signed-blob.h
+++ b/ndn-cpp/fields/signed-blob.h
@@ -17,6 +17,10 @@
 
 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)
  */
@@ -92,7 +96,6 @@
   return m_signedEnd - m_signedBegin;
 }
 
-
 } // ndn
 
 #endif // NDN_SIGNED_BLOB_H
diff --git a/ndn-cpp/helpers/hash.h b/ndn-cpp/helpers/hash.h
index 1652f2b..8ac23fa 100644
--- a/ndn-cpp/helpers/hash.h
+++ b/ndn-cpp/helpers/hash.h
@@ -25,6 +25,7 @@
 
 class Hash;
 typedef boost::shared_ptr<Hash> HashPtr;
+typedef boost::shared_ptr<const Hash> ConstHashPtr;
 
 class Hash
 {
diff --git a/ndn-cpp/interest.h b/ndn-cpp/interest.h
index d929efa..1596b6d 100644
--- a/ndn-cpp/interest.h
+++ b/ndn-cpp/interest.h
@@ -20,6 +20,10 @@
 
 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)
  */
@@ -293,11 +297,9 @@
   Hash m_publisherPublicKeyDigest;
   Exclude m_exclude;
 
-  Ptr<Blob> m_wire;
+  BlobPtr m_wire;
 };
 
-typedef boost::shared_ptr<Interest> InterestPtr;
-
 namespace Error
 {
 /**
