diff --git a/model/sync-app-data-fetch.h b/model/sync-app-data-fetch.h
index 1bba3a6..3816e4e 100644
--- a/model/sync-app-data-fetch.h
+++ b/model/sync-app-data-fetch.h
@@ -36,10 +36,22 @@
 class AppDataFetch
 {
 public:
+	/**
+	 * @param dataCallback the callback function to process data
+	 */
 	AppDataFetch(boost::function<void (boost::shared_ptr<DataBuffer>)>
 	dataCallback);
+
 	void setDataCallback(boost::function<void (boost::shared_ptr<DataBuffer>)>
 	dataCallback) {m_dataCallback = dataCallback;}
+
+	/**
+	 * @breif fetch data for a certain name prefix
+	 *
+	 * @param prefix the prefix for the data
+	 * @param startSeq the start of sequence number range (inclusive)
+	 * @param endSeq the end of sequence number range (inclusive)
+	 */
 	void fetch(string prefix, long startSeq, long endSeq);
 
 private:
diff --git a/model/sync-app-data-publish.h b/model/sync-app-data-publish.h
index 3859153..162abf5 100644
--- a/model/sync-app-data-publish.h
+++ b/model/sync-app-data-publish.h
@@ -34,19 +34,47 @@
 
 /**
  * \ingroup sync
- * @brief publishes application data and keeps track of most recently published
- * data
+ * @brief publishes application data using incrementing sequence number (for
+ * each sequence namber and keeps track of most recently published data for 
+ * each name prefix
  */
 class AppDataPublish
 {
 public:
-	std::pair<std::string, boost::shared_ptr<const DataBuffer> > getRecentData();
+	AppDataPublish();
+	~AppDataPublish() {};
+
+	/**
+	 * @brief get the name (including sequence number) and the content
+	 * (unencoded, just XML stanza) of the most recent published data
+	 *
+	 * @param prefix the name prefix to look for 
+	 * @return the pair of name and content
+	 */
+	std::pair<std::string, boost::shared_ptr<const DataBuffer> >
+	getRecentData(std::string prefix);
+
+	/**
+	 * brief get the most recent sequence number for a name prefix
+	 */
+	 long getHighestSeq(std:string prefix);
+
+	/**
+	 * @brief publish data for a name prefix, updates the corresponding
+	 * sequence number and recent data
+	 *
+	 * @param name data prefix
+	 * @param dataBuffer the data itself
+	 * @param freshness the freshness for the data object
+	 * @return whether the publish succeeded
+	 */
 	bool publishData(std::string name, boost::shared_ptr<DataBufer> dataBuffer,
 	int freshness);
   
 private:
-	boost::shared_ptr<CcnxWrapper> ccnxHandle;
-	std::pair<std::string, boost::shared_ptr<DataBuffer> > recentData;
+	boost::unordered_map<string, long> m_sequenceLog;
+	boost::shared_ptr<CcnxWrapper> m_ccnxHandle;
+	std::pair<std::string, boost::shared_ptr<DataBuffer> > m_recentData;
 };
 
 } // Sync
diff --git a/model/sync-app-socket.h b/model/sync-app-socket.h
index 5e44617..e4b6133 100644
--- a/model/sync-app-socket.h
+++ b/model/sync-app-socket.h
@@ -33,11 +33,32 @@
 class SyncAppSocket
 {
 public:
+	/**
+	 * @brief the constructor for SyncAppSocket; the parameter syncPrefix
+	 * should be passed to the constructor of m_syncAppWrapper; the other
+	 * parameter should be passed to the constructor of m_fetcher; furthermore,
+	 * the fetch function of m_fetcher should be a second paramter passed to
+	 * the constructor of m_syncAppWrapper, so that m_syncAppWrapper can tell
+	 * m_fetcher to fetch the actual app data after it learns the names
+	 *
+	 * @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>)>);
+	(boost::shared_ptr<DataBuffer>)> dataCallback);
+
 	~SyncAppSocket();
-	bool publishData(std::string prefix, boost::shared_ptr<DataBuffer>
-	dataBuffer);
+
+	/**
+	 * @brief publish data from local client and tell SyncAppWrapper 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);
 private:
 	boost::shared_ptr<AppDataFetch> m_fetcher;
 	boost::shared_ptr<AppDataPublish> m_publisher;
diff --git a/model/sync-app-wrapper.h b/model/sync-app-wrapper.h
index 97137ac..e9490e7 100644
--- a/model/sync-app-wrapper.h
+++ b/model/sync-app-wrapper.h
@@ -40,15 +40,32 @@
 class SyncAppWrapper
 {
 public:
+	/**
+	 * @brief constructor for this class; 
+	 * @param syncPrefix the name prefix to use for the Sync Interest
+	 * @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 (string, long,
 	long)> fetch);
+
 	~SyncAppWrapper();
 	/**
 	 * a wrapper for the same func in SyncApp
 	 */
 	void addLocalNames(std::string prefix, long seq);
+
+	/**
+	 * @brief respond to the Sync Interest; a lot of logic needs to go in here
+	 * @param interest the Sync Interest in string format
+	 */
 	void respondSyncInterest(std::string interest);	
-	void processSyncData(boost::shared_ptr<DataBuffer> databuffer);
+
+	/**
+	 * @brief process the fetched sync data
+	 * @param dataBuffer the sync data
+	 */
+	void processSyncData(boost::shared_ptr<DataBuffer> dataBuffer);
 
 private:
 	sendSyncInterest();
diff --git a/model/sync-ccnx-wrapper.h b/model/sync-ccnx-wrapper.h
index eaa86cf..4153606 100644
--- a/model/sync-ccnx-wrapper.h
+++ b/model/sync-ccnx-wrapper.h
@@ -31,7 +31,8 @@
 #include <ccn/bloom.h>
 }
 
-#include <boost/thread.hpp>
+#include <boost/thread/recursive_mutex.hpp>
+#include <boost/thread/thread.hpp>
 #include <boost/shared_ptr.hpp>
 #include <string>
 #include "sync-data-buffer.h"
@@ -52,7 +53,8 @@
 	ccn* m_handle;
 	ccn_keystore *m_keyStore;
 	ccn_charbuf *m_keyLoactor;
-	boost::mutex m_mutex;
+	// to lock, use "boost::recursive_mutex::scoped_lock scoped_lock(mutex);
+	boost::recursive_mutex m_mutex;
 	boost::shared_ptr<boos::thread> m_thread;
 
 private:
@@ -65,19 +67,43 @@
 
 public:
   
-
+  /**
+   * @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 
+   *
+   */
    CcnxWrapper();
    ~CcnxWrapper();
+
   /**
-   * @brief send Interest 
+   * @brief send Interest; need to grab lock m_mutex first
    *
    * @param strInterest the Interest name
-   * @param callback the callback function to deal with the returned data
+   * @param dataCallback the callback function to deal with the returned data
+   * @return the return code of ccn_express_interest 
    */
    int sendInterest(std::string strInterest, boost::function<void
-   (boost::shared_ptr<DataBuffer>)> processData);
+   (boost::shared_ptr<DataBuffer>)> dataCallback);
+
+  /**
+   * @brief set Interest filter (specify what interest you want to receive 
+   *
+   * @param prefix the prefix of Interest
+   * @param interestCallback the callback function to deal with the returned data
+   * @return the return code of ccn_set_interest_filter
+   */
    int sendInterestFilter(std::string prefix, boost::function<void (std::string)>
-   processInterest);
+   interestCallback);
+
+  /**
+   * @brief publish data and put it to local ccn content store; need to grab
+   * lock m_mutex first
+   *
+   * @param name the name for the data object
+   * @param dataBuffer the data to be published
+   * @param freshness the freshness time for the data object
+   * @return code generated by ccnx library calls, >0 if success
+   */
    int publishData(std::string name, boost::shared_ptr<DataBuffer> dataBuffer,
    int freshness);
 
diff --git a/model/sync-data-buffer.h b/model/sync-data-buffer.h
index 269b379..4b6fe3e 100644
--- a/model/sync-data-buffer.h
+++ b/model/sync-data-buffer.h
@@ -38,7 +38,8 @@
 
 /**
  * \ingroup sync
- * @brief DataBuffer Interface
+ * @brief DataBuffer Interface to be used by CcnxWrapper and all other data
+ * publish/request/processing related functions
  */
 class DataBuffer {
 public:
@@ -59,10 +60,15 @@
 	AppDataBuffer(const unsigned char *buffer, size_t len);
 	AppDataBuffer(const DataBuffer *DataBuffer);
 	AppDataBuffer &operator=(const DataBuffer *DataBuffer);
+
+	/**
+	 * @brief reset the buffer and len
+	 */
 	virtual void setBufferAndLength(const unsigned char *buffer, size_t len);
-	virtual ~DataBuffer();
-	virtual size_t length() {return len;}
-	virtual const unsigned char *buffer() { return const_cast<const unsigned char *> (buffer); }
+	virtual ~AppDataBuffer();
+	virtual size_t length() {return m_len;}
+	virtual const unsigned char *buffer() { return const_cast<const unsigned
+	char *> (m_buffer); }
 
 private:
 	unsigned char *m_buffer;
@@ -77,6 +83,10 @@
  */
 class SyncDataBuffer : DataBuffer{
 public:
+	/**
+	 * @brief decorates some object that implements DataBuffer interface
+	 * primary usage here is to decorate AppDataBuffer
+	 */
 	SyncDataBuffer(DataBuffer *dataBuffer) { m_dataBuffer = dataBuffer;}
 	virtual ~SyncDataBuffer(){};	
 	virtual size_t length() {m_dataBuffer->length();}
