diff --git a/model/sync-interest-table.cc b/model/sync-interest-table.cc
index 5b1c3e0..0ec430c 100644
--- a/model/sync-interest-table.cc
+++ b/model/sync-interest-table.cc
@@ -28,16 +28,17 @@
 namespace Sync
 {
 
-unordered_set<string> SyncInterestTable::fetchAll()
+vector<string> SyncInterestTable::fetchAll()
 {
 	expireInterests();
 
 	recursive_mutex::scoped_lock lock(m_mutex);
-	unordered_set<string> entries;
+	vector<string> entries;
 	for (unordered_map<string, time_t>::iterator it = m_table.begin(); it !=
 		m_table.end(); ++it) {
-		entries.insert(it->first);
+		entries.push_back(it->first);
 	}
+	m_table.clear();
 
 	return entries;
 }
diff --git a/model/sync-interest-table.h b/model/sync-interest-table.h
index 0b5ead5..6fc258e 100644
--- a/model/sync-interest-table.h
+++ b/model/sync-interest-table.h
@@ -56,7 +56,7 @@
 	/**
 	 * @brief fetch all Interests and clear the table
 	 */
-	boost::unordered_set<std::string> fetchAll();
+	std::vector<std::string> fetchAll();
 
 private:
 	/**
diff --git a/model/sync-logic.cc b/model/sync-logic.cc
index 8a64e60..ecd1d5a 100644
--- a/model/sync-logic.cc
+++ b/model/sync-logic.cc
@@ -26,6 +26,7 @@
 #include <boost/make_shared.hpp>
 #include <boost/foreach.hpp>
 #include <sys/socket.h>
+#include <vector>
 
 using namespace std;
 using namespace boost;
@@ -166,10 +167,10 @@
   m_state.update(info, seqN);
   diff->setDigest(m_state.getDigest());
 
-  unordered_set<string> pis = m_syncInterestTable.fetchAll();
+  vector<string> pis = m_syncInterestTable.fetchAll();
   stringstream ss;
   ss << *diff;
-  for (unordered_set<string>::iterator ii = pis.begin(); ii != pis.end(); ++ii)
+  for (vector<string>::iterator ii = pis.begin(); ii != pis.end(); ++ii)
   {
     m_ccnxHandle->publishData(*ii, ss.str(), m_syncResponseFreshness);
   }
diff --git a/test/test_pit.cc b/test/test_pit.cc
new file mode 100644
index 0000000..bb85580
--- /dev/null
+++ b/test/test_pit.cc
@@ -0,0 +1,68 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil -*- */
+/*
+ * Copyright (c) 2012 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * Author: Zhenkai Zhu <zhenkai@cs.ucla.edu>
+ *         卞超轶 Chaoyi Bian <bcy@pku.edu.cn>
+ *	   Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#include <boost/test/unit_test.hpp>
+#include <boost/test/output_test_stream.hpp> 
+using boost::test_tools::output_test_stream;
+#include <vector>
+
+#include <boost/make_shared.hpp>
+
+#include "../model/sync-interest-table.h"
+
+using namespace Sync;
+using namespace std;
+using namespace boost;
+
+string sitToString(SyncInterestTable *sit) {
+	vector<string> ent = sit->fetchAll();
+	sort(ent.begin(), ent.end());
+	string str = "";
+	while(!ent.empty()){
+		str += ent.back();
+		ent.pop_back();
+	}
+	return str;
+}
+
+BOOST_AUTO_TEST_CASE (SyncInterestTableTest)
+{
+	SyncInterestTable sit;
+	sit.insert("/ucla.edu/0");
+	sit.insert("/ucla.edu/1");
+	string str = sitToString(&sit);
+	BOOST_CHECK_EQUAL(str, "/ucla.edu/1/ucla.edu/0");
+
+	str = sitToString(&sit);
+	BOOST_CHECK_EQUAL(str, "");
+
+	sit.insert("/ucla.edu/0");
+	sit.insert("/ucla.edu/1");
+	sleep(2);
+	sit.insert("/ucla.edu/0");
+	sit.insert("/ucla.edu/2");
+	sleep(3);
+	str = sitToString(&sit);
+	BOOST_CHECK_EQUAL(str, "/ucla.edu/2/ucla.edu/0");
+}
+
+
