diff --git a/ccnx/ccnx-closure.cpp b/ccnx/ccnx-closure.cpp
index a96bbbe..312af6d 100644
--- a/ccnx/ccnx-closure.cpp
+++ b/ccnx/ccnx-closure.cpp
@@ -46,7 +46,7 @@
 
 
 void
-Closure::runDataCallback(const Name &name, const Bytes &content)
+Closure::runDataCallback(const Name &name, PcoPtr content)
 {
   if (!m_dataCallback.empty ())
     {
diff --git a/ccnx/ccnx-closure.h b/ccnx/ccnx-closure.h
index 39fbc16..343d8be 100644
--- a/ccnx/ccnx-closure.h
+++ b/ccnx/ccnx-closure.h
@@ -27,10 +27,13 @@
 
 namespace Ccnx {
 
+class ParsedContentObject;
+typedef boost::shared_ptr<ParsedContentObject> PcoPtr;
+
 class Closure
 {
 public:
-  typedef boost::function<void (const Name &, const Bytes &)> DataCallback;
+  typedef boost::function<void (const Name &, PcoPtr pco)> DataCallback;
 
   typedef enum
   {
@@ -44,7 +47,7 @@
   virtual ~Closure();
 
   virtual void
-  runDataCallback(const Name &name, const Bytes &content);
+  runDataCallback(const Name &name, Ccnx::PcoPtr pco);
 
   virtual TimeoutCallbackReturnValue
   runTimeoutCallback(const Name &interest);
diff --git a/ccnx/ccnx-pco.cpp b/ccnx/ccnx-pco.cpp
index 8c2fd3f..2c4e351 100644
--- a/ccnx/ccnx-pco.cpp
+++ b/ccnx/ccnx-pco.cpp
@@ -1,3 +1,24 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
+ *         Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
 #include "ccnx-pco.h"
 
 namespace Ccnx {
@@ -5,13 +26,14 @@
 void
 ParsedContentObject::init(const unsigned char *data, size_t len)
 {
+  readRaw(m_bytes, data, len);
+
   m_comps = ccn_indexbuf_create();
-  int res = ccn_parse_ContentObject(data, len, &m_pco, m_comps);
+  int res = ccn_parse_ContentObject(head (m_bytes), len, &m_pco, m_comps);
   if (res < 0)
   {
     boost::throw_exception(MisformedContentObjectException());
   }
-  readRaw(m_bytes, data, len);
 }
 
 ParsedContentObject::ParsedContentObject(const unsigned char *data, size_t len)
@@ -43,13 +65,13 @@
 {
   const unsigned char *content;
   size_t len;
-  Bytes bytes;
   int res = ccn_content_get_value(head(m_bytes), m_pco.offset[CCN_PCO_E], &m_pco, &content, &len);
   if (res < 0)
   {
     boost::throw_exception(MisformedContentObjectException());
   }
 
+  Bytes bytes;
   readRaw(bytes, content, len);
   return bytes;
 }
diff --git a/ccnx/ccnx-pco.h b/ccnx/ccnx-pco.h
index 0c52c7a..cecc763 100644
--- a/ccnx/ccnx-pco.h
+++ b/ccnx/ccnx-pco.h
@@ -1,3 +1,24 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
+ *         Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
 #ifndef CCNX_CONTENT_OBJECT_H
 #define CCNX_CONTENT_OBJECT_H
 
@@ -5,16 +26,15 @@
 #include "ccnx-common.h"
 #include "ccnx-name.h"
 
-using namespace std;
-
 namespace Ccnx {
 
-struct MisformedContentObjectException : virtual boost::exception, virtual exception { };
+struct MisformedContentObjectException : virtual boost::exception, virtual std::exception { };
 
 class ParsedContentObject
 {
 public:
   ParsedContentObject(const unsigned char *data, size_t len);
+  ParsedContentObject(const unsigned char *data, const ccn_parsed_ContentObject &pco);
   ParsedContentObject(const Bytes &bytes);
   ParsedContentObject(const ParsedContentObject &other);
   virtual ~ParsedContentObject();
@@ -24,7 +44,7 @@
 
   BytesPtr
   contentPtr() const;
-  
+
   Name
   name() const;
 
diff --git a/ccnx/ccnx-tunnel.cpp b/ccnx/ccnx-tunnel.cpp
deleted file mode 100644
index def125a..0000000
--- a/ccnx/ccnx-tunnel.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
- *         Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#include "ccnx-tunnel.h"
-#include "ccnx-pco.h"
-
-namespace Ccnx
-{
-
-CcnxTunnel::CcnxTunnel()
-  : CcnxWrapper()
-  , m_localPrefix("/")
-{
-  refreshLocalPrefix();
-}
-
-CcnxTunnel::~CcnxTunnel()
-{
-}
-
-void
-CcnxTunnel::refreshLocalPrefix()
-{
-  Name newPrefix = getLocalPrefix();
-  if (!newPrefix.toString().empty() && m_localPrefix != newPrefix)
-  {
-    CcnxWrapper::clearInterestFilter(m_localPrefix);
-    CcnxWrapper::setInterestFilter(newPrefix, bind(&CcnxTunnel::handleTunneledInterest, this, _1));
-    m_localPrefix = newPrefix;
-  }
-}
-
-int
-CcnxTunnel::sendInterest (const Name &interest, const Closure &closure, const Selectors &selectors)
-{
-  Name tunneledInterest = queryRoutableName(interest);
-
-  CcnxWrapper::sendInterest(tunneledInterest,
-                            TunnelClosure(closure, *this, interest),
-                            selectors);
-
-  return 0;
-}
-
-void
-CcnxTunnel::handleTunneledData(const Name &name, const Bytes &tunneledData, const Closure::DataCallback &originalDataCallback)
-{
-  ParsedContentObject pco(tunneledData);
-  originalDataCallback(pco.name(), pco.content());
-}
-
-int
-CcnxTunnel::publishData(const Name &name, const unsigned char *buf, size_t len, int freshness)
-{
-  Bytes content = createContentObject(name, buf, len, freshness);
-  storeContentObject(name, content);
-
-  return publishContentObject(name, content, freshness);
-}
-
-int
-CcnxTunnel::publishContentObject(const Name &name, const Bytes &contentObject, int freshness)
-{
-  Name tunneledName = m_localPrefix + name;
-  Bytes tunneledCo = createContentObject(tunneledName, head(contentObject), contentObject.size(), freshness);
-  return putToCcnd(tunneledCo);
-}
-
-void
-CcnxTunnel::handleTunneledInterest(const Name &tunneledInterest)
-{
-  // The interest must have m_localPrefix as a prefix (component-wise), otherwise ccnd would not deliver it to us
-  Name interest = tunneledInterest.getPartialName(m_localPrefix.size());
-
-  ReadLock lock(m_ritLock);
-
-  // This is linear scan, but should be acceptable under the assumption that the caller wouldn't be listening to a lot prefixes (as of now, most app listen to one or two prefixes)
-  for (RitIter it = m_rit.begin(); it != m_rit.end(); it++)
-  {
-    // evoke callback for any prefix that is the prefix of the interest
-    if (isPrefix(it->first, interest))
-    {
-      (it->second)(interest);
-    }
-  }
-}
-
-bool
-CcnxTunnel::isPrefix(const Name &prefix, const Name &name)
-{
-  if (prefix.size() > name.size())
-  {
-    return false;
-  }
-
-  int size = prefix.size();
-  for (int i = 0; i < size; i++)
-  {
-    if (prefix.getCompAsString(i) != name.getCompAsString(i))
-    {
-      return false;
-    }
-  }
-
-  return true;
-}
-
-int
-CcnxTunnel::setInterestFilter(const Name &prefix, const InterestCallback &interestCallback)
-{
-  WriteLock lock(m_ritLock);
-  // make sure copy constructor for boost::function works properly
-  m_rit.insert(make_pair(prefix, interestCallback));
-  return 0;
-}
-
-void
-CcnxTunnel::clearInterestFilter(const Name &prefix)
-{
-  WriteLock lock(m_ritLock);
-  // remove all
-  m_rit.erase(prefix);
-}
-
-TunnelClosure::TunnelClosure(const DataCallback &dataCallback, CcnxTunnel &tunnel,
-                             const Name &originalInterest, const TimeoutCallback &timeoutCallback)
-  : Closure(dataCallback, timeoutCallback)
-  , m_tunnel(tunnel)
-  , m_originalInterest(originalInterest)
-{
-}
-
-TunnelClosure::TunnelClosure(const Closure &closure, CcnxTunnel &tunnel, const Name &originalInterest)
-  : Closure(closure)
-  , m_tunnel(tunnel)
-{
-}
-
-Closure *
-TunnelClosure::dup() const
-{
-  return new TunnelClosure (*this);
-}
-
-void
-TunnelClosure::runDataCallback(const Name &name, const Bytes &content)
-{
-  m_tunnel.handleTunneledData(name, content, m_dataCallback);
-}
-
-Closure::TimeoutCallbackReturnValue
-TunnelClosure::runTimeoutCallback(const Name &interest)
-{
-  return Closure::runTimeoutCallback(m_originalInterest);
-}
-
-} // Ccnx
diff --git a/ccnx/ccnx-tunnel.h b/ccnx/ccnx-tunnel.h
deleted file mode 100644
index 01dbf5e..0000000
--- a/ccnx/ccnx-tunnel.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
-/*
- * Copyright (c) 2013 University of California, Los Angeles
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
- *         Alexander Afanasyev <alexander.afanasyev@ucla.edu>
- */
-
-#ifndef CCNX_TUNNEL_H
-#define CCNX_TUNNEL_H
-
-#include "ccnx-wrapper.h"
-
-#define _OVERRIDE
-#ifdef __GNUC__
-#if __GNUC_MAJOR >= 4 && __GNUC_MINOR__ >= 7
-  #undef _OVERRIDE
-  #define _OVERRIDE override
-#endif // __GNUC__ version
-#endif // __GNUC__
-
-// Eventually, Sync::CcnxWrapper should be moved to this namespace.
-// It has nothing to do with Sync.
-namespace Ccnx
-{
-
-class CcnxTunnel : public CcnxWrapper
-{
-public:
-  typedef std::multimap<Name, InterestCallback> RegisteredInterestTable;
-  typedef std::multimap<Name, InterestCallback>::iterator RitIter;
-
-
-  CcnxTunnel();
-  virtual ~CcnxTunnel();
-
-  // name is topology-independent
-  virtual int
-  publishData(const Name &name, const unsigned char *buf, size_t len, int freshness) _OVERRIDE;
-
-  int
-  publishContentObject(const Name &name, const Bytes &contentObject, int freshness);
-
-  virtual int
-  sendInterest (const Name &interest, const Closure &closure, const Selectors &selectors = Selectors());
-
-
-  // prefix is topology-independent
-  virtual int
-  setInterestFilter(const Name &prefix, const InterestCallback &interestCallback) _OVERRIDE;
-
-  // prefix is topology-independent
-  // this clears all entries with key equal to prefix
-  virtual void
-  clearInterestFilter(const Name &prefix) _OVERRIDE;
-
-  // subclass should provide translation service from topology-independent name
-  // to routable name
-  virtual Name
-  queryRoutableName(const Name &name) = 0;
-
-  // subclass should implement the function to store ContentObject with topoloy-independent
-  // name to the permanent storage; default does nothing
-  virtual void
-  storeContentObject(const Name &name, const Bytes &content) {}
-
-  // should be called  when connect to a different network
-  void
-  refreshLocalPrefix();
-
-  static bool
-  isPrefix(const Name &prefix, const Name &name);
-
-  void
-  handleTunneledInterest(const Name &tunneldInterest);
-
-  void
-  handleTunneledData(const Name &name, const Bytes &tunneledData, const Closure::DataCallback &originalDataCallback);
-
-private:
-  CcnxTunnel(const CcnxTunnel &other) {}
-
-protected:
-  // need a way to update local prefix, perhaps using macports trick, but eventually we need something more portable
-  Name m_localPrefix;
-  RegisteredInterestTable m_rit;
-  Lock m_ritLock;
-};
-
-class TunnelClosure : public Closure
-{
-public:
-  TunnelClosure(const DataCallback &dataCallback, CcnxTunnel &tunnel,
-                const Name &originalInterest, const TimeoutCallback &timeoutCallback = TimeoutCallback());
-
-  TunnelClosure(const Closure &closure, CcnxTunnel &tunnel, const Name &originalInterest);
-
-  virtual void
-  runDataCallback(const Name &name, const Bytes &content) _OVERRIDE;
-
-  virtual TimeoutCallbackReturnValue
-  runTimeoutCallback(const Name &interest) _OVERRIDE;
-
-  virtual Closure *
-  dup() const;
-
-private:
-  CcnxTunnel &m_tunnel;
-  Name m_originalInterest;
-};
-
-};
-
-#endif
diff --git a/ccnx/ccnx-wrapper.cpp b/ccnx/ccnx-wrapper.cpp
index fcaf224..7f2e567 100644
--- a/ccnx/ccnx-wrapper.cpp
+++ b/ccnx/ccnx-wrapper.cpp
@@ -1,3 +1,24 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
+ *         Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
 #include "ccnx-wrapper.h"
 extern "C" {
 #include <ccn/fetch.h>
@@ -6,6 +27,7 @@
 #include <boost/throw_exception.hpp>
 #include <boost/date_time/posix_time/posix_time.hpp>
 #include <boost/random.hpp>
+#include <boost/make_shared.hpp>
 #include <sstream>
 
 typedef boost::error_info<struct tag_errmsg, std::string> errmsg_info_str;
@@ -265,21 +287,23 @@
       return CCN_UPCALL_RESULT_OK;
     }
 
-  const unsigned char *pcontent;
-  size_t len;
-  if (ccn_content_get_value(info->content_ccnb, info->pco->offset[CCN_PCO_E], info->pco, &pcontent, &len) < 0)
-  {
-    // BOOST_THROW_EXCEPTION(CcnxOperationException() << errmsg_info_str("decode ContentObject failed"));
-  }
+  PcoPtr pco = make_shared<ParsedContentObject> (info->content_ccnb, info->pco->offset[CCN_PCO_E]);
 
-  Name name(info->content_ccnb, info->content_comps);
+  // const unsigned char *pcontent;
+  // size_t len;
+  // if (ccn_content_get_value(info->content_ccnb, info->pco->offset[CCN_PCO_E], info->pco, &pcontent, &len) < 0)
+  // {
+  //   // BOOST_THROW_EXCEPTION(CcnxOperationException() << errmsg_info_str("decode ContentObject failed"));
+  // }
 
-  Bytes content;
-  // copy content and do processing on the copy
-  // otherwise the pointed memory may have been changed during the processing
-  readRaw(content, pcontent, len);
+  // Name name(info->content_ccnb, info->content_comps);
 
-  cp->runDataCallback(name, content);
+  // Bytes content;
+  // // copy content and do processing on the copy
+  // // otherwise the pointed memory may have been changed during the processing
+  // readRaw(content, pcontent, len);
+
+  cp->runDataCallback (pco->name (), pco);
 
   return CCN_UPCALL_RESULT_OK;
 }
diff --git a/ccnx/ccnx-wrapper.h b/ccnx/ccnx-wrapper.h
index 938b890..cfd030b 100644
--- a/ccnx/ccnx-wrapper.h
+++ b/ccnx/ccnx-wrapper.h
@@ -1,3 +1,24 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2013 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
+ *         Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
 #ifndef CCNX_WRAPPER_H
 #define CCNX_WRAPPER_H
 
@@ -9,12 +30,11 @@
 #include "ccnx-name.h"
 #include "ccnx-selectors.h"
 #include "ccnx-closure.h"
-
-using namespace std;
+#include "ccnx-pco.h"
 
 namespace Ccnx {
 
-struct CcnxOperationException : virtual boost::exception, virtual exception { };
+struct CcnxOperationException : virtual boost::exception, virtual std::exception { };
 
 class CcnxWrapper
 {
