diff --git a/include/ccnx-pco.h b/include/ccnx-pco.h
index 8711a3e..72a7289 100644
--- a/include/ccnx-pco.h
+++ b/include/ccnx-pco.h
@@ -26,8 +26,9 @@
   name() const;
 
 protected:
-  Name m_name;
-  Bytes m_content;
+  ccn_parsed_ContentObject m_pco;
+  ccn_indexbuf *m_comps;
+  Bytes m_bytes;
 };
 
 typedef boost::shared_ptr<ParsedContentObject> PcoPtr;
diff --git a/src/ccnx-pco.cpp b/src/ccnx-pco.cpp
index 1d83b26..dce3bcb 100644
--- a/src/ccnx-pco.cpp
+++ b/src/ccnx-pco.cpp
@@ -3,27 +3,15 @@
 namespace Ccnx {
 
 ParsedContentObject::ParsedContentObject(const unsigned char *data, size_t len)
+            : m_comps(NULL)
 {
-  ccn_indexbuf *comps = ccn_indexbuf_create();
-  ccn_parsed_ContentObject pco;
-  int res = ccn_parse_ContentObject(data, len, &pco, comps);
+  m_comps = ccn_indexbuf_create();
+  int res = ccn_parse_ContentObject(data, len, &m_pco, m_comps);
   if (res < 0)
   {
     boost::throw_exception(MisformedContentObjectException());
   }
-
-  const unsigned char *content;
-  size_t length;
-  res = ccn_content_get_value(data, pco.offset[CCN_PCO_E], &pco, &content, &length);
-  if (res < 0)
-  {
-    boost::throw_exception(MisformedContentObjectException());
-  }
-  readRaw(m_content, content, length);
-
-  m_name = Name(data, comps);
-  cout << "in Constructor: name " << m_name << endl;
-  cout << "content : " << string((const char *)&m_content[0], m_content.size()) << endl;
+  readRaw(m_bytes, data, len);
 }
 
 ParsedContentObject::ParsedContentObject(const Bytes &bytes)
@@ -33,26 +21,35 @@
 
 ParsedContentObject::ParsedContentObject(const ParsedContentObject &other)
 {
-  m_content = other.m_content;
-  m_name = other.m_name;
+  ParsedContentObject(other.m_bytes);
 }
 
 ParsedContentObject::~ParsedContentObject()
 {
+  ccn_indexbuf_destroy(&m_comps);
+  m_comps = NULL;
 }
 
 Bytes
 ParsedContentObject::content() const
 {
-  cout << "content() : " << string((const char *)&m_content[0], m_content.size()) << endl;
-  return m_content;
+  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());
+  }
+
+  readRaw(bytes, content, len);
+  return bytes;
 }
 
 Name
 ParsedContentObject::name() const
 {
-  cout <<"name() : " << m_name << endl;
-  return m_name;
+  return Name(head(m_bytes), m_comps);
 }
 
 }
diff --git a/src/ccnx-tunnel.cpp b/src/ccnx-tunnel.cpp
index 36b8f6f..9406474 100644
--- a/src/ccnx-tunnel.cpp
+++ b/src/ccnx-tunnel.cpp
@@ -8,7 +8,7 @@
                           : CcnxWrapper()
                           , m_localPrefix("/")
 {
-  //refreshLocalPrefix();
+  refreshLocalPrefix();
 }
 
 CcnxTunnel::~CcnxTunnel()
@@ -32,17 +32,13 @@
 {
   Name tunneledInterest = queryRoutableName(interest);
   Closure *cp = new TunnelClosure(closure, this, interest);
-  cout << "send interest in Tunnel" << endl;
-  CcnxWrapper::sendInterest(tunneledInterest, cp, selectors);
+  sendInterest(tunneledInterest, cp, selectors);
 }
 
 void
 CcnxTunnel::handleTunneledData(const Name &name, const Bytes &tunneledData, const Closure::DataCallback &originalDataCallback)
 {
   ParsedContentObject pco(tunneledData);
-  Name n = pco.name();
-  Bytes b = pco.content();
-  cout <<"Parsed ContentObject" << n << b.size() << endl;
   originalDataCallback(pco.name(), pco.content());
 }
 
diff --git a/test/test-ccnx-tunnel.cc b/test/test-ccnx-tunnel.cc
index 03f4250..fc1214a 100644
--- a/test/test-ccnx-tunnel.cc
+++ b/test/test-ccnx-tunnel.cc
@@ -24,7 +24,7 @@
 
 };
 
-DummyTunnel::DummyTunnel() : CcnxTunnel() {m_localPrefix = Name("/local");}
+DummyTunnel::DummyTunnel() : CcnxTunnel() {m_localPrefix = Name("/");}
 
 Name
 DummyTunnel::queryRoutableName (const Name &name)
