diff --git a/model/sync-app-data-fetch.cc b/model/sync-app-data-fetch.cc
new file mode 100644
index 0000000..2680859
--- /dev/null
+++ b/model/sync-app-data-fetch.cc
@@ -0,0 +1,21 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2012 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>
+ *         卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
+ *	   Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
diff --git a/model/sync-app-data-fetch.h b/model/sync-app-data-fetch.h
new file mode 100644
index 0000000..1bba3a6
--- /dev/null
+++ b/model/sync-app-data-fetch.h
@@ -0,0 +1,54 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2012 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>
+ *         卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
+ *	   Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef SYNC_LEAF_H
+#define SYNC_LEAF_H
+#include "sync-ccnx-wrapper.h"
+#include <boost/function.hpp>
+#include <boost/shared_ptr.hpp>
+
+namespace Sync {
+
+/**
+ * \ingroup sync
+ * @brief fetch application data, by default it will try to fetch every piece
+ * of data
+ */
+class AppDataFetch
+{
+public:
+	AppDataFetch(boost::function<void (boost::shared_ptr<DataBuffer>)>
+	dataCallback);
+	void setDataCallback(boost::function<void (boost::shared_ptr<DataBuffer>)>
+	dataCallback) {m_dataCallback = dataCallback;}
+	void fetch(string prefix, long startSeq, long endSeq);
+
+private:
+	boost::shared_ptr<CcnxWrapper> ccnxHandle;
+	boost::shared_ptr<boost::function<void (boost::shared_ptr<DataBuffer>)>
+	m_dataCallback;
+};
+
+
+} // Sync
+
+#endif // SYNC_LEAF_H
diff --git a/model/sync-app-data-publish.h b/model/sync-app-data-publish.h
index 5d122dc..3859153 100644
--- a/model/sync-app-data-publish.h
+++ b/model/sync-app-data-publish.h
@@ -41,7 +41,8 @@
 {
 public:
 	std::pair<std::string, boost::shared_ptr<const DataBuffer> > getRecentData();
-	bool publishData(std::string name, const DataBufer &dataBuffer);
+	bool publishData(std::string name, boost::shared_ptr<DataBufer> dataBuffer,
+	int freshness);
   
 private:
 	boost::shared_ptr<CcnxWrapper> ccnxHandle;
diff --git a/model/sync-app-wrapper.cc b/model/sync-app-wrapper.cc
new file mode 100644
index 0000000..2680859
--- /dev/null
+++ b/model/sync-app-wrapper.cc
@@ -0,0 +1,21 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2012 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>
+ *         卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
+ *	   Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
diff --git a/model/sync-app-wrapper.h b/model/sync-app-wrapper.h
new file mode 100644
index 0000000..d07a4c7
--- /dev/null
+++ b/model/sync-app-wrapper.h
@@ -0,0 +1,66 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2012 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>
+ *         卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
+ *	   Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef SYNC_LEAF_H
+#define SYNC_LEAF_H
+#include <boost/shared_ptr.hpp>
+#include <boost/function.hpp>
+#include "sync-ccnx-wrapper.h"
+#include "sync-interest-table.h"
+#include "sync-data-buffer.h"
+#include "sync-diff-state.h"
+#include "sync-full-state.h"
+
+namespace Sync {
+
+/**
+ * \ingroup sync
+ * @brief 
+ */
+class SyncAppWrapper
+{
+public:
+	SyncAppWrapper(std::string syncPrefix, boost::function<void (string, long,
+	long)> fetch);
+	~SyncAppWrapper();
+	/**
+	 * a wrapper for the same func in SyncApp
+	 */
+	void addLocalNames(std::string prefix, long seq);
+	void respondSyncInterest(std::string interest);	
+	void processSyncData(boost::shared_ptr<DataBuffer> databuffer);
+
+private:
+	sendSyncInterest();
+
+private:
+	boost::shared_ptr<CcnxWrapper> m_ccnxHandle;
+	boost::shared_ptr<SyncApp> m_syncApp;
+	boost::function<void (string, long, long)> m_fetch;
+	SyncInterestTable m_syncInterestTable;	
+	std::string m_syncPrefix;
+};
+
+
+} // Sync
+
+#endif // SYNC_LEAF_H
diff --git a/model/sync-ccnx-wrapper.h b/model/sync-ccnx-wrapper.h
index 5aaf69c..eaa86cf 100644
--- a/model/sync-ccnx-wrapper.h
+++ b/model/sync-ccnx-wrapper.h
@@ -78,7 +78,8 @@
    (boost::shared_ptr<DataBuffer>)> processData);
    int sendInterestFilter(std::string prefix, boost::function<void (std::string)>
    processInterest);
-   int publishData(std::string name, boost::shared_ptr<DataBuffer> dataBuffer);
+   int publishData(std::string name, boost::shared_ptr<DataBuffer> dataBuffer,
+   int freshness);
 
 };
 
