diff --git a/model/sync-logic.cc b/model/sync-logic.cc
index 7f052f1..d51a3a6 100644
--- a/model/sync-logic.cc
+++ b/model/sync-logic.cc
@@ -140,11 +140,22 @@
 
   if (stateInDiffLog != m_log.end ())
   {
-    _LOG_TRACE (">> D " << interestName);
+    DiffStateConstPtr stateDiff = (*stateInDiffLog)->diff ();
+    // string state = lexical_cast<string> (*stateDiff);
+    // erase_all (state, "\n");
+    // _LOG_TRACE (">> D " << interestName << ", state: " << state);
+    // _LOG_DEBUG ("Log size: " << m_log.size ());
+
+    // BOOST_FOREACH (DiffStateConstPtr ds, m_log.get<sequenced> ())
+    //   {
+    //     string state = lexical_cast<string> (*ds);
+    //     erase_all (state, "\n");
+    //     _LOG_DEBUG ("   " << state << ", " << *ds->getDigest ());
+    //   }
 
     m_syncInterestTable.remove (interestName);
     m_ccnxHandle->publishData (interestName,
-                               lexical_cast<string> (*(*stateInDiffLog)->diff ()),
+                               lexical_cast<string> (*stateDiff),
                                m_syncResponseFreshness);
     if (m_outstandingInterest == interestName)
       {
@@ -254,14 +265,7 @@
             }
         }
 
-      diffLog->setDigest(m_state.getDigest());
-      if (m_log.size () > 0)
-        {
-          m_log.get<sequenced> ().front ()->setNext (diffLog);
-        }
-      m_log.erase (m_state.getDigest());
-      /// @todo Optimization
-      m_log.insert (diffLog);
+      insertToDiffLog (diffLog);
     }
   catch (Error::SyncXmlDecodingFailure &e)
     {
@@ -322,7 +326,7 @@
 }
 
 void
-SyncLogic::processPendingSyncInterests (DiffStatePtr diffLog) 
+SyncLogic::insertToDiffLog (DiffStatePtr diffLog) 
 {
   //cout << "Process Pending Interests" <<endl;
   diffLog->setDigest (m_state.getDigest());  
@@ -352,7 +356,7 @@
     
     diff = make_shared<DiffState>();
     diff->update(info, seqN);
-    processPendingSyncInterests (diff);
+    insertToDiffLog (diff);
   }
 
   // _LOG_DEBUG ("PIT size: " << m_syncInterestTable.size ());
@@ -371,7 +375,7 @@
     diff = make_shared<DiffState>();
     diff->remove(info);
 
-    processPendingSyncInterests (diff);
+    insertToDiffLog (diff);
   }
 
   satisfyPendingSyncInterests (diff);  
diff --git a/model/sync-logic.h b/model/sync-logic.h
index e966dea..561ff9b 100644
--- a/model/sync-logic.h
+++ b/model/sync-logic.h
@@ -110,7 +110,7 @@
   sendSyncInterest ();
 
   void 
-  processPendingSyncInterests (DiffStatePtr diff);
+  insertToDiffLog (DiffStatePtr diff);
 
   void
   satisfyPendingSyncInterests (DiffStatePtr diff);
diff --git a/test/test_app_socket.cc b/test/test_app_socket.cc
index d1b90c0..d35fdaa 100644
--- a/test/test_app_socket.cc
+++ b/test/test_app_socket.cc
@@ -44,7 +44,7 @@
 public:
   map<string, string> data;
   void set(string str1, string str2) {
-    _LOG_FUNCTION (this << ", " << str1);
+    // _LOG_FUNCTION (this << ", " << str1);
     data.insert(make_pair(str1, str2));
     // cout << str1 << ", " << str2 << endl;
   }
@@ -88,14 +88,14 @@
   string data0 = "Very funny Scotty, now beam down my clothes";
   _LOG_DEBUG ("s1 publish");
   s1.publish (p1, 0, data0, 10); 
-  this_thread::sleep (posix_time::milliseconds (250));
+  this_thread::sleep (posix_time::milliseconds (120));
 
   // 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
+  // single source, multiple data at once
   string data1 = "Yes, give me that ketchup";
   string data2 = "Don't look conspicuous, it draws fire";
 
@@ -105,13 +105,13 @@
   s1.publish (p1, 0, data2, 10);
   this_thread::sleep (posix_time::milliseconds (250));
   
-  // // // from code logic, we won't be fetching our own data
+  // 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
+  // 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";
@@ -132,15 +132,21 @@
   BOOST_CHECK_EQUAL(a2.toString(), a3.toString());
 
   // not sure weither this is simultanous data generation from multiple sources
+  _LOG_DEBUG ("Simultaneous publishing");
   string data6 = "Shakespeare says: 'Prose before hos.'";
   string data7 = "Pick good people, talent never wears out";
   s1.publish(p1, 0, data6, 10); 
+  // this_thread::sleep (posix_time::milliseconds (1000));
   s2.publish(p2, 0, data7, 10); 
-  this_thread::sleep (posix_time::milliseconds (10000));
+  this_thread::sleep (posix_time::milliseconds (1500));
 
   // from code logic, we won't be fetching our own data
   a1.set(p1 + "/0/3", data6);
   a2.set(p2 + "/0/2", data7);
+  // a1.set(p1 + "/0/1", data6);
+  // a2.set(p2 + "/0/0", data7);
   BOOST_CHECK_EQUAL(a1.toString(), a2.toString());
   BOOST_CHECK_EQUAL(a2.toString(), a3.toString());
+
+  _LOG_DEBUG ("Finish");
 }
