diff --git a/model/sync-app-socket-c.cc b/model/sync-app-socket-c.cc
index 0bd9f0f..0fc03e1 100644
--- a/model/sync-app-socket-c.cc
+++ b/model/sync-app-socket-c.cc
@@ -25,43 +25,43 @@
 using namespace Sync;
 
 class CallbackHolder{
-	public:
-	void (*m_callback)(const char *, const char *);
-	void callbackWrapper(string name, string data) {
-		m_callback(name.c_str(), data.c_str());
-	}
+public:
+  void (*m_callback)(const char *, const char *);
+  void callbackWrapper(string name, string data) {
+    m_callback(name.c_str(), data.c_str());
+  }
 };
 
 SyncAppSocketStruct *
 create_sync_app_socket(const char *prefix, void (*callback)(const char *, const char *)) 
-	{
-		CallbackHolder holder;
-		holder.m_callback = callback;
-		boost::function<void (string, string)> cb = bind(&CallbackHolder::callbackWrapper, &holder, _1, _2);
-		SyncAppSocket *sock = new SyncAppSocket(prefix, cb);
-		return (SyncAppSocketStruct *) sock;
-	}
+{
+  CallbackHolder holder;
+  holder.m_callback = callback;
+  boost::function<void (string, string)> cb = bind(&CallbackHolder::callbackWrapper, &holder, _1, _2);
+  SyncAppSocket *sock = new SyncAppSocket(prefix, cb);
+  return (SyncAppSocketStruct *) sock;
+}
 
 
 void
 delete_sync_app_socket(SyncAppSocketStruct **sock) {
-		SyncAppSocket *temp = *((SyncAppSocket **)sock);
-		delete temp;
-		temp = NULL;
-	}
+  SyncAppSocket *temp = *((SyncAppSocket **)sock);
+  delete temp;
+  temp = NULL;
+}
 
 // assume char *buf ends with '\0', or otherwise it's going to crash;
 // should fix this "feature" 
 bool
 sync_app_socket_publish(SyncAppSocketStruct *sock, const char *prefix, uint32_t session, const char *buf, int freshness) 
-	{
-		SyncAppSocket *temp = (SyncAppSocket *)sock;
-		return temp->publish(prefix, session, buf, freshness);
-	}
+{
+  SyncAppSocket *temp = (SyncAppSocket *)sock;
+  return temp->publish(prefix, session, buf, freshness);
+}
 
 void
 sync_app_socket_remove(SyncAppSocketStruct *sock, const char *prefix) 
-	{
-		SyncAppSocket *temp = (SyncAppSocket *)sock;
-		temp->remove(prefix);
-	}
+{
+  SyncAppSocket *temp = (SyncAppSocket *)sock;
+  temp->remove(prefix);
+}
diff --git a/model/sync-app-socket-c.h b/model/sync-app-socket-c.h
index 12e74b2..77afc79 100644
--- a/model/sync-app-socket-c.h
+++ b/model/sync-app-socket-c.h
@@ -26,12 +26,12 @@
 #include "sync-app-socket.h"
 
 extern "C" {
-	typedef struct SyncAppSocketStruct;
+  typedef struct SyncAppSocketStruct;
 
-	SyncAppSocketStruct *create_sync_app_socket(const char *prefix, void (*callback)(const char *, const char *));
-	void delete_sync_app_socket(SyncAppSocketStruct **sock);
-	bool sync_app_socket_publish(SyncAppSocketStruct *sock, const char *prefix, uint32_t session, const char *buf, int freshness);
-	void sync_app_socket_remove(SyncAppSocketStruct *sock, const char *prefix);
+  SyncAppSocketStruct *create_sync_app_socket(const char *prefix, void (*callback)(const char *, const char *));
+  void delete_sync_app_socket(SyncAppSocketStruct **sock);
+  bool sync_app_socket_publish(SyncAppSocketStruct *sock, const char *prefix, uint32_t session, const char *buf, int freshness);
+  void sync_app_socket_remove(SyncAppSocketStruct *sock, const char *prefix);
 }
 
 #endif // SYNC_APP_SOCKET_C_H
diff --git a/model/sync-app-socket.h b/model/sync-app-socket.h
index fb2d271..dfa29db 100644
--- a/model/sync-app-socket.h
+++ b/model/sync-app-socket.h
@@ -64,11 +64,11 @@
 
   /**
    * @brief delete a participant's subtree from the sync tree; SyncLogic will do the work
-	 * this is just a wrapper
+   * this is just a wrapper
    *
-	 * @param the prefix for the participant
+   * @param prefix the prefix for the participant
    */
-	void remove (const std::string &prefix) {m_syncLogic.remove(prefix);}
+  void remove (const std::string &prefix) {m_syncLogic.remove(prefix);}
 
 private:
   CcnxWrapperPtr m_ccnxHandle;
diff --git a/model/sync-logic.h b/model/sync-logic.h
index bbf3fad..4270181 100644
--- a/model/sync-logic.h
+++ b/model/sync-logic.h
@@ -52,7 +52,8 @@
   /**
    * @brief Constructor
    * @param syncPrefix the name prefix to use for the Sync Interest
-   * @param fetch the fetch function, which will be called to actually fetch
+   * @param onUpdate function that will be called when new state is detected
+   * @param onRemove function that will be called when state is removed
    * @param ccnxHandle ccnx handle
    * the app data when new remote names are learned
    */
@@ -83,9 +84,9 @@
 
   /**
    * @brief remove a participant's subtree from the sync tree
-   * @param the name prefix for the participant
+   * @param prefix the name prefix for the participant
    */
-  void remove(const std::string &prefix);
+  void remove (const std::string &prefix);
 
 #ifdef _DEBUG
   Scheduler &
diff --git a/model/sync-scheduler.h b/model/sync-scheduler.h
index 7cc23da..8c48f86 100644
--- a/model/sync-scheduler.h
+++ b/model/sync-scheduler.h
@@ -58,7 +58,7 @@
 
   /**
    * @brief Schedule an event at relative time 'reltime'
-   * @param abstime Relative time
+   * @param reltime Relative time
    * @param event function to be called at the time
    */
   void
