diff --git a/test/test-ccnx-tunnel.cc b/test/test-ccnx-tunnel.cc
deleted file mode 100644
index 724d6e5..0000000
--- a/test/test-ccnx-tunnel.cc
+++ /dev/null
@@ -1,121 +0,0 @@
-#include "ccnx-tunnel.h"
-#include "ccnx-closure.h"
-#include "ccnx-name.h"
-#include "ccnx-pco.h"
-#include <unistd.h>
-
-#include <boost/test/unit_test.hpp>
-
-
-using namespace Ccnx;
-using namespace std;
-using namespace boost;
-
-BOOST_AUTO_TEST_SUITE(CcnxTunnelTests)
-
-class DummyTunnel : public CcnxTunnel
-{
-public:
-  DummyTunnel();
-  virtual ~DummyTunnel() {}
-
-  virtual Name
-  queryRoutableName(const Name &name);
-
-  void
-  overridePrefix();
-
-};
-
-DummyTunnel::DummyTunnel() : CcnxTunnel()
-{
-  m_localPrefix = Name("/local");
-}
-
-void
-DummyTunnel::overridePrefix()
-{
-  CcnxWrapper::setInterestFilter(m_localPrefix, bind(&DummyTunnel::handleTunneledInterest, this, _1));
-}
-
-Name
-DummyTunnel::queryRoutableName (const Name &name)
-{
-  return Name("/local") + name;
-}
-
-CcnxWrapperPtr t1(new DummyTunnel());
-CcnxWrapperPtr t2(new DummyTunnel());
-CcnxWrapperPtr c1(new CcnxWrapper());
-
-DummyTunnel t3;
-
-// global data callback counter;
-int g_dc_i = 0;
-int g_dc_o = 0;
-int g_ic = 0;
-
-void innerCallback(const Name &name, const Bytes &content)
-{
-  g_dc_i ++;
-  string str((const char *)&content[0], content.size());
-  BOOST_CHECK_EQUAL(name, str);
-}
-
-void outerCallback(const Name &name, const Bytes &content)
-{
-  g_dc_o ++;
-}
-
-void interestCallback(const Name &name)
-{
-  string strName = name.toString();
-  t3.publishData(name, (const unsigned char *)strName.c_str(), strName.size(), 5);
-  g_ic++;
-}
-
-BOOST_AUTO_TEST_CASE (CcnxTunnelTest)
-{
-  // test publish
-  string inner = "/hello";
-
-  g_dc_o = 0;
-  t1->publishData(Name(inner), (const unsigned char *)inner.c_str(), inner.size(), 5);
-  usleep(100000);
-
-  c1->sendInterest(Name("/local/hello"), Closure(bind(outerCallback, _1, _2)));
-  usleep(100000);
-  // it is indeed published as /local/hello
-  BOOST_CHECK_EQUAL(g_dc_o, 1);
-
-  g_dc_i = 0;
-  t2->sendInterest(Name(inner), Closure(bind(innerCallback, _1, _2)));
-  usleep(100000);
-  BOOST_CHECK_EQUAL(g_dc_i, 1);
-}
-
-BOOST_AUTO_TEST_CASE (CcnxTunnelRegister)
-{
-
-  g_ic = 0;
-  g_dc_i = 0;
-  t3.overridePrefix();
-  t3.setInterestFilter(Name("/t3"), bind(interestCallback, _1));
-  usleep(100000);
-  Closure innerClosure (bind(innerCallback, _1, _2));
-  t1->sendInterest(Name("/t3/hello"), innerClosure);
-  usleep(100000);
-  BOOST_CHECK_EQUAL(g_dc_i, 1);
-  BOOST_CHECK_EQUAL(g_ic, 1);
-
-  t3.clearInterestFilter(Name("/t3"));
-  usleep(100000);
-  t1->sendInterest(Name("/t3/hello-there"), innerClosure);
-  usleep(100000);
-  BOOST_CHECK_EQUAL(g_dc_i, 1);
-  BOOST_CHECK_EQUAL(g_ic, 1);
-
-}
-
-
-BOOST_AUTO_TEST_SUITE_END()
diff --git a/test/test-ccnx-wrapper.cc b/test/test-ccnx-wrapper.cc
index b64f513..d5188de 100644
--- a/test/test-ccnx-wrapper.cc
+++ b/test/test-ccnx-wrapper.cc
@@ -31,9 +31,10 @@
   c2->publishData(name, (const unsigned char*)content.c_str(), content.size(), 5);
 }
 
-void dataCallback(const Name &name, const Bytes &content)
+void dataCallback(const Name &name, Ccnx::PcoPtr pco)
 {
-  string msg((const char*)&content[0], content.size());
+  BytesPtr content = pco->contentPtr ();
+  string msg(reinterpret_cast<const char *> (head (*content)), content->size());
   g_dataCallback_counter ++;
   BOOST_CHECK_EQUAL(name, msg);
 }
diff --git a/test/test-fetch-manager.cc b/test/test-fetch-manager.cc
index 55c85df..276fe0c 100644
--- a/test/test-fetch-manager.cc
+++ b/test/test-fetch-manager.cc
@@ -50,15 +50,17 @@
 
   void
   onData (Fetcher &fetcher, uint32_t seqno, const Ccnx::Name &basename,
-          const Ccnx::Name &name, const Ccnx::Bytes &data)
+          const Ccnx::Name &name, Ccnx::PcoPtr pco)
   {
     recvData.insert (seqno);
     differentNames.insert (basename);
     segmentNames.insert (name);
 
-    if (data.size () == sizeof(int))
+    BytesPtr data = pco->contentPtr ();
+
+    if (data->size () == sizeof(int))
       {
-        recvContent.insert (*reinterpret_cast<const int*> (head(data)));
+        recvContent.insert (*reinterpret_cast<const int*> (head(*data)));
       }
 
     // cout << "<<< " << basename << ", " << name << ", " << seqno << endl;
diff --git a/test/test-sync-core.cc b/test/test-sync-core.cc
index 2caa99b..b8316c1 100644
--- a/test/test-sync-core.cc
+++ b/test/test-sync-core.cc
@@ -3,9 +3,11 @@
 
 #include <boost/test/unit_test.hpp>
 #include <boost/filesystem.hpp>
+#include <boost/make_shared.hpp>
 
 using namespace std;
 using namespace Ccnx;
+using namespace boost;
 using namespace boost::filesystem;
 
 BOOST_AUTO_TEST_SUITE(SyncCoreTests)
@@ -55,16 +57,17 @@
   SyncLogPtr log1(new SyncLog(dir1, user1.toString()));
   SyncLogPtr log2(new SyncLog(dir2, user2.toString()));
 
-  SchedulerPtr scheduler(new Scheduler());
+  // should not have used the same scheduler...
+  SchedulerPtr scheduler1 = make_shared<Scheduler> ();
+  SchedulerPtr scheduler2 = make_shared<Scheduler> ();
 
-
-  SyncCore *core1 = new SyncCore(log1, user1, loc1, syncPrefix, bind(callback, _1), c1, scheduler);
+  SyncCore *core1 = new SyncCore(log1, user1, loc1, syncPrefix, bind(callback, _1), c1, scheduler1);
   usleep(10000);
-  SyncCore *core2 = new SyncCore(log2, user2, loc2, syncPrefix, bind(callback, _1), c2, scheduler);
+  SyncCore *core2 = new SyncCore(log2, user2, loc2, syncPrefix, bind(callback, _1), c2, scheduler2);
   usleep(1000000);
   checkRoots(core1->root(), core2->root());
 
-  cout << "\n\n\n\n\n\n----------\n";
+  // cout << "\n\n\n\n\n\n----------\n";
   core1->updateLocalState(1);
   usleep(100000);
   checkRoots(core1->root(), core2->root());
@@ -84,11 +87,11 @@
   BOOST_CHECK_EQUAL(log1->LookupLocator (user2), loc2);
 
   // simple simultaneous data generation
-  cout << "\n\n\n\n\n\n----------Simultaneous\n";
+  // cout << "\n\n\n\n\n\n----------Simultaneous\n";
   core1->updateLocalState(11);
   usleep(100);
   core2->updateLocalState(15);
-  usleep(1000000);
+  usleep(2000000);
   checkRoots(core1->root(), core2->root());
   BOOST_CHECK_EQUAL(core1->seq(user2), 15);
   BOOST_CHECK_EQUAL(core2->seq(user1), 11);
