diff --git a/ndn-cpp/common.h b/ndn-cpp/common.h
index 30b705a..2acfd47 100644
--- a/ndn-cpp/common.h
+++ b/ndn-cpp/common.h
@@ -117,83 +117,6 @@
     return BytesPtr ();
 }
 
-template<class Msg>
-BytesPtr
-serializeMsg(const Msg &msg)
-{
-  int size = msg.ByteSize ();
-  BytesPtr bytes (new Bytes (size));
-  msg.SerializeToArray (head(*bytes), size);
-  return bytes;
-}
-
-template<class Msg>
-boost::shared_ptr<Msg>
-deserializeMsg (const Bytes &bytes)
-{
-  boost::shared_ptr<Msg> retval (new Msg ());
-  if (!retval->ParseFromArray (head (bytes), bytes.size ()))
-    {
-      // to indicate an error
-      return boost::shared_ptr<Msg> ();
-    }
-  return retval;
-}
-
-template<class Msg>
-boost::shared_ptr<Msg>
-deserializeMsg (const void *buf, size_t length)
-{
-  boost::shared_ptr<Msg> retval (new Msg ());
-  if (!retval->ParseFromArray (buf, length))
-    {
-      // to indicate an error
-      return boost::shared_ptr<Msg> ();
-    }
-  return retval;
-}
-
-
-template<class Msg>
-BytesPtr
-serializeGZipMsg(const Msg &msg)
-{
-  std::vector<char> bytes;   // Bytes couldn't work
-  {
-    boost::iostreams::filtering_ostream out;
-    out.push(boost::iostreams::gzip_compressor()); // gzip filter
-    out.push(boost::iostreams::back_inserter(bytes)); // back_inserter sink
-
-    msg.SerializeToOstream(&out);
-  }
-  BytesPtr uBytes = boost::make_shared<Bytes>(bytes.size());
-  memcpy(&(*uBytes)[0], &bytes[0], bytes.size());
-  return uBytes;
-}
-
-template<class Msg>
-boost::shared_ptr<Msg>
-deserializeGZipMsg(const Bytes &bytes)
-{
-  std::vector<char> sBytes(bytes.size());
-  memcpy(&sBytes[0], &bytes[0], bytes.size());
-  boost::iostreams::filtering_istream in;
-  in.push(boost::iostreams::gzip_decompressor()); // gzip filter
-  in.push(boost::make_iterator_range(sBytes)); // source
-
-  boost::shared_ptr<Msg> retval = boost::make_shared<Msg>();
-  if (!retval->ParseFromIstream(&in))
-    {
-      // to indicate an error
-      return boost::shared_ptr<Msg> ();
-    }
-
-  return retval;
-}
-
-
-// --- Bytes operations end ---
-
 // Exceptions
 typedef boost::error_info<struct tag_errmsg, std::string> error_info_str;
 
