diff --git a/src/content-server.cc b/src/content-server.cc
index 91b6561..542f453 100644
--- a/src/content-server.cc
+++ b/src/content-server.cc
@@ -24,10 +24,11 @@
 using namespace Ccnx;
 using namespace std;
 
-ContentServer::ContentServer(CcnxWrapperPtr ccnx, ActionLogPtr actionLog, const boost::filesystem::path &rootDir)
+ContentServer::ContentServer(CcnxWrapperPtr ccnx, ActionLogPtr actionLog, const boost::filesystem::path &rootDir, int freshness)
               : m_ccnx(ccnx)
               , m_actionLog(actionLog)
               , m_dbFolder(rootDir / ".chronoshare")
+              , m_freshness(freshness)
 {
 }
 
@@ -64,11 +65,6 @@
 void
 ContentServer::serve(const Name &interest)
 {
-  int size = interest.size();
-  cout << ">>> Serving: " << interest.getPartialName(0, size - 2) << ", seq = " << interest.getCompAsInt(size -1) << endl;
-
-
-
   ReadLock lock(m_mutex);
   for (PrefixIt it = m_prefixes.begin(); it != m_prefixes.end(); ++it)
   {
@@ -110,7 +106,14 @@
 
         if (co)
         {
-          m_ccnx->publishData(interest, *co);
+          if (m_freshness > 0)
+          {
+            m_ccnx->publishData(interest, *co, m_freshness);
+          }
+          else
+          {
+            m_ccnx->publishData(interest, *co);
+          }
         }
       }
     }
diff --git a/src/content-server.h b/src/content-server.h
index 3eb2325..994f8b9 100644
--- a/src/content-server.h
+++ b/src/content-server.h
@@ -31,7 +31,7 @@
 class ContentServer
 {
 public:
-  ContentServer(Ccnx::CcnxWrapperPtr ccnx, ActionLogPtr actionLog, const boost::filesystem::path &rootDir);
+  ContentServer(Ccnx::CcnxWrapperPtr ccnx, ActionLogPtr actionLog, const boost::filesystem::path &rootDir, int freshness = -1);
   ~ContentServer();
 
   // the assumption is, when the interest comes in, interest is informs of
@@ -54,5 +54,6 @@
   std::set<Ccnx::Name> m_prefixes;
   Mutex m_mutex;
   boost::filesystem::path m_dbFolder;
+  int m_freshness;
 };
 #endif // CONTENT_SERVER_H
diff --git a/src/fetcher.cc b/src/fetcher.cc
index e311461..5f731bb 100644
--- a/src/fetcher.cc
+++ b/src/fetcher.cc
@@ -96,7 +96,7 @@
 
       Name x = Name(m_forwardingHint)(m_name)(m_minSendSeqNo+1);
       int xsize = x.size();
-      _LOG_DEBUG (" >>> i " << x.getPartialName(0, xsize - 2) << ", seq = " << (m_minSendSeqNo + 1 ));
+      //_LOG_DEBUG (" >>> i " << x.getPartialName(0, xsize - 2) << ", seq = " << (m_minSendSeqNo + 1 ));
 
       // cout << ">>> " << m_minSendSeqNo+1 << endl;
       m_ccnx->sendInterest (Name (m_forwardingHint)(m_name)(m_minSendSeqNo+1),
diff --git a/test/test-serve-and-fetch.cc b/test/test-serve-and-fetch.cc
index 4db2094..05782c2 100644
--- a/test/test-serve-and-fetch.cc
+++ b/test/test-serve-and-fetch.cc
@@ -34,6 +34,7 @@
 #include <boost/thread/thread_time.hpp>
 #include <boost/thread/condition_variable.hpp>
 #include <stdio.h>
+#include <ctime>
 
 using namespace Ccnx;
 using namespace std;
@@ -112,6 +113,7 @@
 
 BOOST_AUTO_TEST_CASE (TestServeAndFetch)
 {
+  cout << "Setting up test environment ..." << endl;
   setup();
 
   CcnxWrapperPtr ccnx_serve = make_shared<CcnxWrapper>();
@@ -119,21 +121,26 @@
   CcnxWrapperPtr ccnx_fetch = make_shared<CcnxWrapper>();
   ObjectManager om(ccnx_serve, root);
 
-  Name deviceName("/device");
+  Name deviceName("/test/device");
   Name localPrefix("/local");
   Name broadcastPrefix("/broadcast");
+
+  time_t start = time(NULL);
+  cout << "At time " << start << ", publish local file to database, this is extremely slow ..." << endl;
   // publish file to db
   tuple<HashPtr, size_t> pub = om.localFileToObjects(filePath, deviceName);
+  time_t end = time(NULL);
+  cout << "At time " << end <<", publish finally finished, used " << end - start << " seconds ..."<< endl;
 
   ActionLogPtr dummyLog;
-  ContentServer server(ccnx_serve, dummyLog, root);
+  ContentServer server(ccnx_serve, dummyLog, root, 5);
   server.registerPrefix(localPrefix);
   server.registerPrefix(broadcastPrefix);
 
   FetchManager fm(ccnx_fetch, bind(simpleMap, _1));
   HashPtr hash = pub.get<0> ();
   Name baseName = Name (deviceName)("file")(hash->GetHash(), hash->GetHashBytes());
-  fm.Enqueue(deviceName, baseName, bind(segmentCallback, _1, _2, _3, _4), bind(finishCallback, _1, _2), 0, get<1>(pub));
+  fm.Enqueue(deviceName, baseName, bind(segmentCallback, _1, _2, _3, _4), bind(finishCallback, _1, _2), 0, pub.get<1>() - 1);
 
   unique_lock<mutex> lock(mut);
   system_time timeout = get_system_time() + posix_time::milliseconds(5000);
@@ -146,6 +153,8 @@
     }
   }
 
+  cout << "ack : " << ack << endl;
+
   teardown();
 }
 
