diff --git a/model/sync-app-socket.cc b/model/sync-app-socket.cc
index 2680859..8f11c97 100644
--- a/model/sync-app-socket.cc
+++ b/model/sync-app-socket.cc
@@ -19,3 +19,36 @@
  *         卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
  *	   Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
+
+#include "sync-app-socket.h"
+
+using namespace std;
+using namespace boost;
+
+namespace Sync
+{
+
+SyncAppSocket::SyncAppSocket(string syncPrefix, function<void (string)> dataCallback)
+{
+  m_ccnxHandle.reset(new CcnxWrapper());
+  m_fetcher = new AppDataFetch(m_ccnxHandle, dataCallback);
+  m_publisher = new AppDataPublish(m_ccnxHandle);
+
+  function<void (string, uint32_t, uint32_t)> f(bind(&AppDataFetch::fetch, m_fetcher, _1, _2, _3));
+  m_syncLogic = new SyncLogic(syncPrefix, f, m_ccnxHandle);
+}
+
+SyncAppSocket::~SyncAppSocket()
+{
+  delete m_syncLogic;
+  delete m_fetcher;
+  delete m_publisher;
+}
+
+bool SyncAppSocket::publish(string prefix, string dataBuffer, int freshness)
+{
+  m_publisher->publishData(prefix, dataBuffer, freshness);
+  m_syncLogic->addLocalNames(prefix, m_publisher->getHighestSeq(prefix));
+}
+
+}
\ No newline at end of file
diff --git a/model/sync-app-socket.h b/model/sync-app-socket.h
index 4c86f2d..d94d4db 100644
--- a/model/sync-app-socket.h
+++ b/model/sync-app-socket.h
@@ -22,6 +22,10 @@
 
 #ifndef SYNC_APP_SOCKET_H
 #define SYNC_APP_SOCKET_H
+
+#include "sync-logic.h"
+#include "sync-app-data-fetch.h"
+#include "sync-app-data-publish.h"
 #include <boost/function.hpp>
 
 namespace Sync {
@@ -44,25 +48,26 @@
 	 * @param syncPrefix the name prefix for Sync Interest
 	 * @param dataCallback the callback to process data
 	 */
-	SyncAppSocket(std::string syncPrefix, boost::function<void
-	(boost::shared_ptr<DataBuffer>)> dataCallback);
+	SyncAppSocket(std::string syncPrefix, boost::function<void (std::string)>
+	dataCallback);
 
 	~SyncAppSocket();
 
 	/**
-	 * @brief publish data from local client and tell SyncAppWrapper to update
+	 * @brief publish data from local client and tell SyncLogic to update
 	 * the sync tree by adding the local names
-	 * 
+	 *
 	 * @param prefix the name prefix for the data
 	 * @param dataBuffer the data itself
 	 * @param freshness the freshness time for the data (in seconds)
 	 */
-	bool publish(std::string prefix, boost::shared_ptr<DataBuffer>
-	dataBuffer, int freshness);
+	bool publish(std::string prefix, std::string dataBuffer, int freshness);
+
 private:
-	boost::shared_ptr<AppDataFetch> m_fetcher;
-	boost::shared_ptr<AppDataPublish> m_publisher;
-	boost::shared_ptr<SyncAppWrapper> m_syncAppWrapper;
+	AppDataFetch *m_fetcher;
+	AppDataPublish *m_publisher;
+	SyncLogic *m_syncLogic;
+	boost::shared_ptr<CcnxWrapper> m_ccnxHandle;
 };
 
 } // Sync
diff --git a/model/sync-ccnx-wrapper.cc b/model/sync-ccnx-wrapper.cc
index be6f203..741a143 100644
--- a/model/sync-ccnx-wrapper.cc
+++ b/model/sync-ccnx-wrapper.cc
@@ -101,7 +101,7 @@
       int ret = poll(pfds, 1, 100);
       if (ret >= 0)
       {
-	boost::recursive_mutex::scoped_lock lock(m_mutex);
+	recursive_mutex::scoped_lock lock(m_mutex);
 	res = ccn_run(m_handle, 0);
       }
     }
@@ -126,6 +126,7 @@
   ccn_encode_ContentObject(content, pname, signed_info,
 			   dataBuffer.c_str(), dataBuffer.length(),
 			   NULL, getPrivateKey());
+  recursive_mutex::scoped_lock lock(m_mutex);
   ccn_put(m_handle, content->buf, content->length);
 
   ccn_charbuf_destroy(&pname);
@@ -144,7 +145,7 @@
   switch (kind)
   {
     case CCN_UPCALL_FINAL:
-      free(selfp);
+      delete selfp;
       return CCN_UPCALL_RESULT_OK;
 
     case CCN_UPCALL_INTEREST:
@@ -177,7 +178,7 @@
   switch (kind)
   {
     case CCN_UPCALL_FINAL:
-      free(selfp);
+      delete selfp;
       return CCN_UPCALL_RESULT_OK;
 
     case CCN_UPCALL_CONTENT:
@@ -191,6 +192,7 @@
   size_t len;
   ccn_content_get_value(info->content_ccnb, info->pco->offset[CCN_PCO_E], info->pco, (const unsigned char **)&pcontent, &len);
   f((string)pcontent);
+  return CCN_UPCALL_RESULT_OK;
 }
 
 int CcnxWrapper::sendInterest(string strInterest, function<void (string)> dataCallback)
@@ -200,9 +202,10 @@
   function<void (string)> *f = new function<void (string)>(dataCallback);
 
   ccn_name_from_uri(pname, strInterest.c_str());
-  ccn_express_interest(m_handle, pname, dataClosure, NULL);
   dataClosure->data = f;
   dataClosure->p = &incomingData;
+  recursive_mutex::scoped_lock lock(m_mutex);
+  ccn_express_interest(m_handle, pname, dataClosure, NULL);
 
   ccn_charbuf_destroy(&pname);
 }
diff --git a/model/sync-app-wrapper.cc b/model/sync-logic.cc
similarity index 78%
rename from model/sync-app-wrapper.cc
rename to model/sync-logic.cc
index b06de1d..5d6703a 100644
--- a/model/sync-app-wrapper.cc
+++ b/model/sync-logic.cc
@@ -20,7 +20,7 @@
  *	   Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#include "sync-app-wrapper.h"
+#include "sync-logic.h"
 
 using namespace std;
 using namespace boost;
@@ -28,7 +28,7 @@
 namespace Sync
 {
 
-SyncAppWrapper::SyncAppWrapper(string syncPrefix,
+SyncLogic::SyncLogic(string syncPrefix,
 			       function<void (string, uint32_t, uint32_t)> fetch,
 			       shared_ptr<CcnxWrapper> ccnxHandle)
 {
@@ -37,27 +37,27 @@
   m_ccnxHandle = ccnxHandle;
 }
 
-SyncAppWrapper::~SyncAppWrapper()
+SyncLogic::~SyncLogic()
 {
 
 }
 
-void SyncAppWrapper::processSyncData(string dataBuffer)
+void SyncLogic::processSyncData(string dataBuffer)
 {
 
 }
 
-void SyncAppWrapper::addLocalNames(string prefix, uint32_t seq)
+void SyncLogic::addLocalNames(string prefix, uint32_t seq)
 {
 
 }
 
-void SyncAppWrapper::respondSyncInterest(string interest)
+void SyncLogic::respondSyncInterest(string interest)
 {
 
 }
 
-void SyncAppWrapper::sendSyncInterest()
+void SyncLogic::sendSyncInterest()
 {
 
 }
diff --git a/model/sync-app-wrapper.h b/model/sync-logic.h
similarity index 92%
rename from model/sync-app-wrapper.h
rename to model/sync-logic.h
index 72202ce..6fe589c 100644
--- a/model/sync-app-wrapper.h
+++ b/model/sync-logic.h
@@ -20,8 +20,8 @@
  *	   Alexander Afanasyev <alexander.afanasyev@ucla.edu>
  */
 
-#ifndef SYNC_APP_WRAPPER_H
-#define SYNC_APP_WRAPPER_H
+#ifndef SYNC_LOGIC_H
+#define SYNC_LOGIC_H
 #include <boost/shared_ptr.hpp>
 #include <boost/function.hpp>
 #include "sync-ccnx-wrapper.h"
@@ -37,7 +37,7 @@
  * @brief A wrapper for SyncApp, which handles ccnx related things (process
  * interests and data)
  */
-class SyncAppWrapper
+class SyncLogic
 {
 public:
 	/**
@@ -46,10 +46,10 @@
 	 * @param fetch the fetch function, which will be called to actually fetch
 	 * the app data when new remote names are learned
 	 */
-	SyncAppWrapper(std::string syncPrefix, boost::function<void (std::string,
+	SyncLogic(std::string syncPrefix, boost::function<void (std::string,
 	uint32_t, uint32_t)> fetch, boost::shared_ptr<CcnxWrapper> ccnxHandle);
 
-	~SyncAppWrapper();
+	~SyncLogic();
 	/**
 	 * a wrapper for the same func in SyncApp
 	 */
