diff --git a/model/sync-app-socket.h b/model/sync-app-socket.h
index 38a2657..29f8dc1 100644
--- a/model/sync-app-socket.h
+++ b/model/sync-app-socket.h
@@ -62,6 +62,14 @@
    */
   bool publish (const std::string &prefix, uint32_t session, const std::string &dataBuffer, int freshness);
 
+  /**
+   * @brief delete a participant's subtree from the sync tree; SyncLogic will do the work
+	 * this is just a wrapper
+   *
+	 * @param the prefix for the participant
+   */
+	bool remove (const std::string &prefix) {return m_syncLogic->remove(prefix);}
+
 private:
   CcnxWrapperPtr m_ccnxHandle;
 
diff --git a/model/sync-logic.cc b/model/sync-logic.cc
index 6b11c9a..f7bf4e7 100644
--- a/model/sync-logic.cc
+++ b/model/sync-logic.cc
@@ -295,15 +295,9 @@
 }
 
 void
-SyncLogic::addLocalNames (const string &prefix, uint32_t session, uint32_t seq)
-{
-  NameInfoConstPtr info = StdNameInfo::FindOrCreate(prefix);
-  SeqNo seqN(session, seq);
-  DiffStatePtr diff = make_shared<DiffState>();
-  diff->update(info, seqN);
-  m_state.update(info, seqN);
+SyncLogic::processPendingSyncInterests(DiffStatePtr &diff) {
   diff->setDigest(m_state.getDigest());
-  m_log.insert(diff);
+	m_log.insert(diff);
 
   vector<string> pis = m_syncInterestTable.fetchAll ();
   stringstream ss;
@@ -315,6 +309,30 @@
 }
 
 void
+SyncLogic::addLocalNames (const string &prefix, uint32_t session, uint32_t seq)
+{
+  NameInfoConstPtr info = StdNameInfo::FindOrCreate(prefix);
+  SeqNo seqN(session, seq);
+  m_state.update(info, seqN);
+
+  DiffStatePtr diff = make_shared<DiffState>();
+  diff->update(info, seqN);
+
+	processPendingSyncInterests(diff);
+}
+
+void
+SyncLogic::remove(const string &prefix) {
+  NameInfoConstPtr info = StdNameInfo::FindOrCreate(prefix);
+	m_state.remove(info);	
+
+  DiffStatePtr diff = make_shared<DiffState>();
+	diff->remove(info);
+
+	processPendingSyncInterests(diff);
+}
+
+void
 SyncLogic::sendSyncInterest ()
 {
   ostringstream os;
diff --git a/model/sync-logic.h b/model/sync-logic.h
index 42a2ae0..1cc42b6 100644
--- a/model/sync-logic.h
+++ b/model/sync-logic.h
@@ -75,6 +75,12 @@
    */
   void processSyncData (const std::string &name, const std::string &dataBuffer);
 
+  /**
+   * @brief remove a participant's subtree from the sync tree
+   * @param the name prefix for the participant
+   */
+	void remove(const std::string &prefix);
+
 #ifdef _DEBUG
   size_t
   getListChecksSize ()
@@ -91,7 +97,9 @@
   processSyncInterest (DigestConstPtr digest, const std::string &interestname, bool timedProcessing=false);
   
   void sendSyncInterest ();
-  // void checkAgain (const std::string &interest, DigestPtr digest);
+
+	void 
+	processPendingSyncInterests();
 
 private:
   typedef std::list< boost::tuple< boost::system_time, boost::function< void ( ) > > > DelayedChecksList;
