diff --git a/ccnx/sync-app-socket.cc b/ccnx/sync-app-socket.cc
index 22d51b9..3bc6954 100644
--- a/ccnx/sync-app-socket.cc
+++ b/ccnx/sync-app-socket.cc
@@ -29,7 +29,7 @@
 {
 
 SyncAppSocket::SyncAppSocket (const string &syncPrefix, NewDataCallback dataCallback, RemoveCallback rmCallback )
-  : m_ccnxHandle (CcnxWrapper::Create ())
+  : m_ccnxHandle (new CcnxWrapper())
   , m_newDataCallback(dataCallback)
   , m_syncLogic (syncPrefix,
                  bind(&SyncAppSocket::passCallback, this, _1),
@@ -39,14 +39,13 @@
 
 SyncAppSocket::~SyncAppSocket()
 {
-  CcnxWrapper::Destroy ();
 }
 
 std::string
 SyncAppSocket::GetLocalPrefix()
 {
   // this handle is supposed to be short lived
-  CcnxWrapperPtr handle = CcnxWrapper::Create();
+  CcnxWrapperPtr handle( new CcnxWrapper());
   return handle->getLocalPrefix();
 }
 
diff --git a/ccnx/sync-ccnx-wrapper.cc b/ccnx/sync-ccnx-wrapper.cc
index df1cbab..b742548 100644
--- a/ccnx/sync-ccnx-wrapper.cc
+++ b/ccnx/sync-ccnx-wrapper.cc
@@ -45,8 +45,6 @@
 
 namespace Sync {
 
-boost::shared_ptr<CcnxWrapper> CcnxWrapper::s_wrapper;
-
 #ifdef _DEBUG_WRAPPER_      
 CcnxWrapper::CcnxWrapper(char c)
 #else
@@ -200,6 +198,9 @@
         }
         catch (CcnxOperationException &e)
         {
+          // do not try reconnect for now
+          throw e;
+          /*
           m_connected = false;
           // probably ccnd has been stopped
           // try reconnect with sleep
@@ -226,6 +227,7 @@
               }
             }
           }
+          */
         }
         catch (const std::exception &exc)
           {
diff --git a/include/sync-ccnx-wrapper.h b/include/sync-ccnx-wrapper.h
index 843ab54..6ffba7b 100644
--- a/include/sync-ccnx-wrapper.h
+++ b/include/sync-ccnx-wrapper.h
@@ -59,33 +59,8 @@
   typedef boost::function<void (std::string, const char *buf, size_t len)> RawDataCallback;
   typedef boost::function<void (std::string)> InterestCallback;
 
-private:
-  static boost::shared_ptr<CcnxWrapper> s_wrapper;
-
 public:
-  static
-  boost::shared_ptr<CcnxWrapper>
-  Create ()
-  {
-    if (s_wrapper.get () == 0)
-      s_wrapper = boost::shared_ptr<CcnxWrapper> (new CcnxWrapper ());
-    
-    return s_wrapper;
-  }
 
-  static
-  void
-  Destroy ()
-  {
-    s_wrapper.reset ();
-  }
-  
-private:
-  /**
-   * @brief initialize the wrapper; a lot of things needs to be done. 1) init
-   * keystore 2) init keylocator 3) start a thread to hold a loop of ccn_run
-   *
-   */
 #ifdef _DEBUG_WRAPPER_      
   CcnxWrapper(char c='.');
   char m_c;
@@ -93,7 +68,6 @@
   CcnxWrapper();
 #endif
 
-public:  
   ~CcnxWrapper();
 
   /**
diff --git a/model/sync-logic.cc b/model/sync-logic.cc
index f298768..acb4d90 100644
--- a/model/sync-logic.cc
+++ b/model/sync-logic.cc
@@ -66,7 +66,7 @@
   , m_onUpdate (onUpdate)
   , m_perBranch (false)
   , m_onRemove (onRemove)
-  , m_ccnxHandle(CcnxWrapper::Create ())
+  , m_ccnxHandle(new CcnxWrapper ())
   , m_recoveryRetransmissionInterval (m_defaultRecoveryRetransmitInterval)
 #ifndef NS3_MODULE
   , m_randomGenerator (static_cast<unsigned int> (std::time (0)))
@@ -96,7 +96,7 @@
   , m_syncPrefix (syncPrefix)
   , m_onUpdateBranch (onUpdateBranch)
   , m_perBranch(true)
-  , m_ccnxHandle(CcnxWrapper::Create ())
+  , m_ccnxHandle(new CcnxWrapper())
   , m_recoveryRetransmissionInterval (m_defaultRecoveryRetransmitInterval)
 #ifndef NS3_MODULE
   , m_randomGenerator (static_cast<unsigned int> (std::time (0)))
@@ -122,10 +122,6 @@
 SyncLogic::~SyncLogic ()
 {
   m_ccnxHandle->clearInterestFilter (m_syncPrefix);
-  m_ccnxHandle.reset ();
-  // m_scheduler.cancel (REEXPRESSING_INTEREST);
-  // m_scheduler.cancel (DELAYED_INTEREST_PROCESSING);
-  // sleep (m_syncInterestReexpress+1);
 }
 
 #ifdef NS3_MODULE
