diff --git a/test/test_app_socket.cc b/test/test_app_socket.cc
index 4ef86c9..3f952c2 100644
--- a/test/test_app_socket.cc
+++ b/test/test_app_socket.cc
@@ -40,6 +40,7 @@
   map<string, string> data;
   void set(string str1, string str2) {
     data.insert(make_pair(str1, str2));
+    // cout << str1 << ", " << str2 << endl;
   }
 
   string toString(){
@@ -51,8 +52,9 @@
       str += "|";
       str += it->second;
       str += ">";
-			str += "\n";
+      str += "\n";
     }
+
     return str;
   }
 
@@ -61,74 +63,70 @@
 BOOST_AUTO_TEST_CASE (AppSocketTest)
 {
 
-	TestSocketApp a1, a2, a3;
-	boost::function<void(string, string)> f1 = bind(&TestSocketApp::set, &a1, _1,
-	_2);
-	boost::function<void(string, string)> f2 = bind(&TestSocketApp::set, &a2, _1,
-	_2);
-	boost::function<void(string, string)> f3 = bind(&TestSocketApp::set, &a3, _1,
-	_2);
+  TestSocketApp a1, a2, a3;
 	
-	string syncPrefix("/let/us/sync");
-	string p1("/irl.cs.ucla.edu"), p2("/yakshi.org"), p3("/google.com");
+  string syncPrefix("/let/us/sync");
+  string p1("/irl.cs.ucla.edu"), p2("/yakshi.org"), p3("/google.com");
 
-	SyncAppSocket s1(syncPrefix, f1), s2(syncPrefix, f2), s3(syncPrefix, f3);
+  SyncAppSocket s1 (syncPrefix, bind(&TestSocketApp::set, &a1, _1, _2));
+  this_thread::sleep (posix_time::milliseconds (500));
+  SyncAppSocket s2 (syncPrefix, bind(&TestSocketApp::set, &a2, _1, _2));
+  // SyncAppSocket s3 (syncPrefix, bind(&TestSocketApp::set, &a3, _1, _2));
 
+  // single source
+  string data0 = "Very funny Scotty, now beam down my clothes";
+  s1.publish (p1, 0, data0, 10); 
+  this_thread::sleep (posix_time::milliseconds (1));
 
-	// single source
-	string data0 = "Very funny Scotty, now beam down my clothes";
-	s1.publish(p1, 0, data0 , 10); 
-	usleep(10000);
+  // from code logic, we won't be fetching our own data
+  a1.set(p1 + "/0/0", data0);
+  BOOST_CHECK_EQUAL(a1.toString(), a2.toString());
+  // BOOST_CHECK_EQUAL(a2.toString(), a3.toString());
 
-	// from code logic, we won't be fetching our own data
-	a1.set(p1 + "/0/0", data0);
-	BOOST_CHECK_EQUAL(a1.toString(), a2.toString());
-	BOOST_CHECK_EQUAL(a2.toString(), a3.toString());
+  // // single source, multiple data at once
+  // string data1 = "Yes, give me that ketchup";
+  // string data2 = "Don't look conspicuous, it draws fire";
 
-	// single source, multiple data at once
-	string data1 = "Yes, give me that ketchup";
-	string data2 = "Don't look conspicuous, it draws fire";
-	s1.publish(p1, 0, data1, 10); 
-	s1.publish(p1, 0, data2, 10); 
-	usleep(10000);
+  // s1.publish (p1, 0, data1, 10);
+  // s1.publish(p1, 0, data2, 10); 
+  // sleep (1);
 
-	// from code logic, we won't be fetching our own data
-	a1.set(p1 + "/0/1", data1);
-	a1.set(p1 + "/0/2", data2);
-	BOOST_CHECK_EQUAL(a1.toString(), a2.toString());
-	BOOST_CHECK_EQUAL(a2.toString(), a3.toString());
+  // // from code logic, we won't be fetching our own data
+  // a1.set(p1 + "/0/1", data1);
+  // a1.set(p1 + "/0/2", data2);
+  // BOOST_CHECK_EQUAL(a1.toString(), a2.toString());
+  // BOOST_CHECK_EQUAL(a2.toString(), a3.toString());
 
-	// another single source
-	string data3 = "You surf the Internet, I surf the real world";
-	string data4 = "I got a fortune cookie once that said 'You like Chinese food'";
-	string data5 = "Real men wear pink. Why? Because their wives make them";
-	s3.publish(p3, 0, data3, 10); 
-	usleep(10000);
-	// another single source, multiple data at once
-	s2.publish(p2, 0, data4, 10); 
-	s2.publish(p2, 0, data5, 10);
-	usleep(10000);
+  // // another single source
+  // string data3 = "You surf the Internet, I surf the real world";
+  // string data4 = "I got a fortune cookie once that said 'You like Chinese food'";
+  // string data5 = "Real men wear pink. Why? Because their wives make them";
+  // s3.publish(p3, 0, data3, 10); 
+  // usleep(20000);
+  // // another single source, multiple data at once
+  // s2.publish(p2, 0, data4, 10); 
+  // s2.publish(p2, 0, data5, 10);
+  // usleep(20000);
 
-	// from code logic, we won't be fetching our own data
-	a3.set(p3 + "/0/0", data3);
-	a2.set(p2 + "/0/0", data4);
-	a2.set(p2 + "/0/1", data5);
-	BOOST_CHECK_EQUAL(a1.toString(), a2.toString());
-	BOOST_CHECK_EQUAL(a2.toString(), a3.toString());
+  // // from code logic, we won't be fetching our own data
+  // a3.set(p3 + "/0/0", data3);
+  // a2.set(p2 + "/0/0", data4);
+  // a2.set(p2 + "/0/1", data5);
+  // BOOST_CHECK_EQUAL(a1.toString(), a2.toString());
+  // BOOST_CHECK_EQUAL(a2.toString(), a3.toString());
 
-	// not sure weither this is simultanous data generation from multiple sources
-	string data6 = "Shakespeare says: 'Prose before hos.'";
-	string data7 = "Pick good people, talent never wears out";
-	s1.publish(p1, 0, data6, 10); 
-	s2.publish(p2, 0, data7, 10); 
-	usleep(10000);
+  // // not sure weither this is simultanous data generation from multiple sources
+  // string data6 = "Shakespeare says: 'Prose before hos.'";
+  // string data7 = "Pick good people, talent never wears out";
+  // s1.publish(p1, 0, data6, 10); 
+  // s2.publish(p2, 0, data7, 10); 
+  // usleep(10000);
 
-	// from code logic, we won't be fetching our own data
-	a1.set(p1 + "/0/3", data6);
-	a2.set(p2 + "/0/2", data7);
-	BOOST_CHECK_EQUAL(a1.toString(), a2.toString());
-	BOOST_CHECK_EQUAL(a2.toString(), a3.toString());
-
+  // // from code logic, we won't be fetching our own data
+  // a1.set(p1 + "/0/3", data6);
+  // a2.set(p2 + "/0/2", data7);
+  // BOOST_CHECK_EQUAL(a1.toString(), a2.toString());
+  // BOOST_CHECK_EQUAL(a2.toString(), a3.toString());
 }
 
 
diff --git a/test/test_sync_logic.cc b/test/test_sync_logic.cc
index f1ee94d..66ea97a 100644
--- a/test/test_sync_logic.cc
+++ b/test/test_sync_logic.cc
@@ -44,24 +44,46 @@
   {
   }
   
-  void onUpdate (const string &p/*prefix*/, const SeqNo &seq/*newSeq*/, const SeqNo &/*oldSeq*/)
+  void onUpdate (const string &p/*prefix*/, const SeqNo &seq/*newSeq*/, const SeqNo &oldSeq/*oldSeq*/)
   {
-    cout << instance << "\t" << p << ": " << seq << endl;
+    m_map[p] = seq.getSeq ();
+    
+    cout << instance << "\t";
+    if (!oldSeq.isValid ())
+      cout << "Inserted: " << p << " (" << seq << ")" << endl;
+    else
+      cout << "Updated: " << p << "  ( " << oldSeq << ".." << seq << ")" << endl;
   }
 
   void onRemove (const string &p/*prefix*/)
   {
-    cout << instance << "\t" << p << endl;
+    cout << instance << "\tRemoved: " << p << endl;
+    m_map.erase (p);
   }
+
+  map<string, uint32_t> m_map;
 };
 
 BOOST_AUTO_TEST_CASE (SyncLogicTest)
 {
-  Handler h1 ("1"), h2 ("2");
+  Handler h1 ("1");
 
   SyncLogic l1 ("/bcast", bind (&Handler::onUpdate, &h1, _1, _2, _3), bind (&Handler::onRemove, &h1, _1));
-  SyncLogic L2 ("/bcast", bind (&Handler::onUpdate, &h2, _1, _2, _3), bind (&Handler::onRemove, &h2, _1));
+  l1.addLocalNames ("/one", 1, 2);
 
-  sleep (10);
-  // l1.  
+  BOOST_CHECK_EQUAL (h1.m_map.size (), 0);
+  sleep (1);
+  BOOST_CHECK_EQUAL (h1.m_map.size (), 0);
+
+  Handler h2 ("2");
+  SyncLogic l2 ("/bcast", bind (&Handler::onUpdate, &h2, _1, _2, _3), bind (&Handler::onRemove, &h2, _1));
+  
+  sleep (1);
+  BOOST_CHECK_EQUAL (h1.m_map.size (), 0);
+  BOOST_CHECK_EQUAL (h2.m_map.size (), 1);
+  
+  // l1.remove ("/one");
+
+  // sleep (10);
+// l1.  
 }
