diff --git a/catalog/src/query/query-adapter.hpp b/catalog/src/query/query-adapter.hpp
index c0f292c..ab0b126 100644
--- a/catalog/src/query/query-adapter.hpp
+++ b/catalog/src/query/query-adapter.hpp
@@ -522,10 +522,24 @@
 
   _LOG_DEBUG("Interest : " << interestPtr->getName());
 
-  // TODO: save the content in memory, first check the memory, if not exists, start thread to generate it
-  // Note that if ChronoSync state changes, we need to clear the saved value, and regenerate it
+  if(m_socket != nullptr) {
+    const ndn::ConstBufferPtr digestPtr = m_socket->getRootDigest();
+    std::string digestStr = ndn::toHex(digestPtr->buf(), digestPtr->size());
+    _LOG_DEBUG("Original digest :" << m_chronosyncDigest);
+    _LOG_DEBUG("New digest : " << digestStr);
+    // if the m_chronosyncDigest and the rootdigest are not equal
+    if (digestStr != m_chronosyncDigest) {
+      // (1) update chronosyncDigest
+      // (2) clear all staled ACK data
+      m_mutex.lock();
+      m_chronosyncDigest = digestStr;
+      m_activeQueryToFirstResponse.erase(ndn::Name("/"));
+      m_mutex.unlock();
+      _LOG_DEBUG("Change digest to " << m_chronosyncDigest);
+    }
+  }
 
-  auto data = m_cache.find(interest.getName());
+  auto data = m_activeQueryToFirstResponse.find(interest.getName());
   if (data) {
     m_face->put(*data);
   }
@@ -551,8 +565,8 @@
   const std::string filterValue = fastWriter.write(filters);
 
   if (!filters.empty()) {
-    ndn::Name filterDataName(interest->getName());
-    filterDataName.append("stateVersion");// TODO: should replace with a state version
+    // use /<prefix>/filters-initialization/<seg> as data name
+    ndn::Name filterDataName(interest->getName().getPrefix(-1));
 
     const char* payload = filterValue.c_str();
     size_t payloadLength = filterValue.size();
@@ -562,7 +576,8 @@
       payloadLength = PAYLOAD_LIMIT;
       ndn::Name segmentName = ndn::Name(filterDataName).appendSegment(seqNo);
       std::shared_ptr<ndn::Data> filterData = std::make_shared<ndn::Data>(segmentName);
-      filterData->setFreshnessPeriod(ndn::time::milliseconds(10000));
+      // freshnessPeriod 0 means permanent?
+      filterData->setFreshnessPeriod(ndn::time::milliseconds(10));
       filterData->setContent(reinterpret_cast<const uint8_t*>(payload + startIndex), payloadLength);
 
       signData(*filterData);
@@ -570,7 +585,9 @@
       _LOG_DEBUG("Populate Filter Data :" << segmentName);
 
       m_mutex.lock();
-      m_cache.insert(*filterData);
+      // save the filter results in the activeQueryToFirstResponse structure
+      // when version changes, the activeQueryToFirstResponse should be cleaned
+      m_activeQueryToFirstResponse.insert(*filterData);
       try {
         m_face->put(*filterData);
       }
@@ -586,13 +603,13 @@
 
     ndn::Name lastSegment = ndn::Name(filterDataName).appendSegment(seqNo);
     std::shared_ptr<ndn::Data> filterData = std::make_shared<ndn::Data>(lastSegment);
-    filterData->setFreshnessPeriod(ndn::time::milliseconds(10000));
+    filterData->setFreshnessPeriod(ndn::time::milliseconds(10));
     filterData->setContent(reinterpret_cast<const uint8_t*>(payload + startIndex), payloadLength);
     filterData->setFinalBlockId(ndn::Name::Component::fromSegment(seqNo));
 
     signData(*filterData);
     m_mutex.lock();
-    m_cache.insert(*filterData);
+    m_activeQueryToFirstResponse.insert(*filterData);
     m_face->put(*filterData);
     m_mutex.unlock();
   }
@@ -954,7 +971,7 @@
   if(m_socket != nullptr) {
     const ndn::ConstBufferPtr digestPtr = m_socket->getRootDigest();
     std::string digestStr = ndn::toHex(digestPtr->buf(), digestPtr->size());
-    _LOG_DEBUG("Original digest" << m_chronosyncDigest);
+    _LOG_DEBUG("Original digest " << m_chronosyncDigest);
     _LOG_DEBUG("New digest : " << digestStr);
     // if the m_chronosyncDigest and the rootdigest are not equal
     if (digestStr != m_chronosyncDigest) {
diff --git a/client/catalog-dev/js/catalog.js b/client/catalog-dev/js/catalog.js
index 84a62c5..158aad9 100644
--- a/client/catalog-dev/js/catalog.js
+++ b/client/catalog-dev/js/catalog.js
@@ -751,7 +751,8 @@
 
       d.push(data.getContent().toString());
 
-      if (interest.getName().get(-1).toSegment() == data.getMetaInfo().getFinalBlockId().toSegment()){
+      if (data.getMetaInfo().getFinalBlockId().value.length !== 0 &&
+          interest.getName().get(-1).toSegment() == data.getMetaInfo().getFinalBlockId().toSegment()){
         callback(d.join(""));
       } else {
         request(interest.getName().get(-1).toSegment() + 1);
