diff --git a/test/test_app_socket.cc b/test/test_app_socket.cc
index f5b7384..c64cc6b 100644
--- a/test/test_app_socket.cc
+++ b/test/test_app_socket.cc
@@ -35,12 +35,11 @@
 using namespace std;
 using namespace boost;
 
-class TestStructApp {
+class TestSocketApp {
 public:
   map<string, string> data;
   void set(string str1, string str2) {
     data.insert(make_pair(str1, str2));
-		cout << "Got: "<< str1 <<" => "<< str2 <<endl;
   }
 
   string toString(){
@@ -61,46 +60,70 @@
 BOOST_AUTO_TEST_CASE (AppSocketTest)
 {
 
-	TestStructApp a1, a2, a3;
-	boost::function<void(string, string)> f1 = bind(&TestStructApp::set, &a1, _1,
+	TestSocketApp a1, a2, a3;
+	boost::function<void(string, string)> f1 = bind(&TestSocketApp::set, &a1, _1,
 	_2);
-	boost::function<void(string, string)> f2 = bind(&TestStructApp::set, &a2, _1,
+	boost::function<void(string, string)> f2 = bind(&TestSocketApp::set, &a2, _1,
 	_2);
-	boost::function<void(string, string)> f3 = bind(&TestStructApp::set, &a3, _1,
+	boost::function<void(string, string)> f3 = bind(&TestSocketApp::set, &a3, _1,
 	_2);
 	
 	string p1("/irl.cs.ucla.edu"), p2("/yakshi.org"), p3("/google.com");
 
 	SyncAppSocket s1(p1, f1), s2(p2, f2), s3(p3, f3);
 
+
 	// single source
-	s1.publish(p1, 0, "Very funny Scotty, now beam down my clothes", 10); 
+	string data0 = "Very funny Scotty, now beam down my clothes";
+	s1.publish(p1, 0, data0 , 10); 
 	usleep(10000);
-	BOOST_CHECK(a1.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
-	s1.publish(p1, 0, "Yes, give me that ketchup", 10); 
-	s1.publish(p1, 0, "Don't look conspicuous, it draws fire", 10); 
+	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);
+
+	// 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
-	s3.publish(p3, 0, "You surf the Internet, I surf the real world", 10); 
+	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, "I got a fortune cookie once that said 'You like Chinese food'", 10); 
-	s2.publish(p2, 0, "Real men wear pink. Why? Because their wives make them", 10);
+	s2.publish(p2, 0, data4, 10); 
+	s2.publish(p2, 0, data5, 10);
 	usleep(10000);
+
+	// 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
-	s1.publish(p1, 0, "Shakespeare says: 'Prose before hos.'", 10); 
-	s2.publish(p2, 0, "Pick good people, talent never wears out", 10); 
+	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());
 
