diff --git a/src/dispatcher.cc b/src/dispatcher.cc
index de52384..02ae150 100644
--- a/src/dispatcher.cc
+++ b/src/dispatcher.cc
@@ -33,6 +33,7 @@
 INIT_LOGGER ("Dispatcher");
 
 static const string BROADCAST_DOMAIN = "/ndn/broadcast/chronoshare";
+const static double DEFAULT_SYNC_INTEREST_INTERVAL = 20.0;
 
 Dispatcher::Dispatcher(const std::string &localUserName
                        , const std::string &sharedFolder
@@ -62,7 +63,7 @@
   m_server->registerPrefix(Name(BROADCAST_DOMAIN));
 
   m_core = new SyncCore (m_syncLog, localUserName, Name ("/"), syncPrefix,
-                         bind(&Dispatcher::Did_SyncLog_StateChange, this, _1), ccnx);
+                         bind(&Dispatcher::Did_SyncLog_StateChange, this, _1), ccnx, DEFAULT_SYNC_INTEREST_INTERVAL);
 
   m_actionFetcher = make_shared<FetchManager> (m_ccnx, bind (&SyncLog::LookupLocator, &*m_syncLog, _1), 3);
   m_fileFetcher   = make_shared<FetchManager> (m_ccnx, bind (&SyncLog::LookupLocator, &*m_syncLog, _1), 3);
diff --git a/src/sync-core.cc b/src/sync-core.cc
index 29f8664..e113b24 100644
--- a/src/sync-core.cc
+++ b/src/sync-core.cc
@@ -38,13 +38,14 @@
 using namespace Ccnx;
 
 SyncCore::SyncCore(SyncLogPtr syncLog, const Name &userName, const Name &localPrefix, const Name &syncPrefix,
-                   const StateMsgCallback &callback, CcnxWrapperPtr ccnx)
+                   const StateMsgCallback &callback, CcnxWrapperPtr ccnx, double syncInterestInterval/*= -1.0*/)
   : m_ccnx (ccnx)
   , m_log(syncLog)
   , m_scheduler(new Scheduler ())
   , m_stateMsgCallback(callback)
   , m_syncPrefix(syncPrefix)
   , m_recoverWaitGenerator(new RandomIntervalGenerator(WAIT, RANDOM_PERCENT, RandomIntervalGenerator::UP))
+  , m_syncInterestInterval(syncInterestInterval)
 {
   m_rootHash = m_log->RememberStateInStateLog();
 
@@ -54,7 +55,8 @@
 
   m_scheduler->start();
   string tag = userName.toString() + "send-sync-interest";
-  m_sendSyncInterestTask = make_shared<OneTimeTask>(bind(&SyncCore::sendSyncInterest, this), tag, m_scheduler, 4.0);
+  double interval = (m_syncInterestInterval > 0 && m_syncInterestInterval < 30.0) ? m_syncInterestInterval : 4.0;
+  m_sendSyncInterestTask = make_shared<OneTimeTask>(bind(&SyncCore::sendSyncInterest, this), tag, m_scheduler, interval);
   sendSyncInterest();
 }
 
@@ -283,15 +285,19 @@
 
   _LOG_DEBUG ("[" << m_log->GetLocalName () << "] >>> SYNC Interest for " << m_rootHash->shortHash () << ": " << syncInterest);
 
+  Selectors selectors;
+  if (m_syncInterestInterval > 0 && m_syncInterestInterval < 30.0)
+  {
+    selectors.interestLifetime(m_syncInterestInterval);
+  }
   m_ccnx->sendInterest(syncInterest,
                          Closure (boost::bind(&SyncCore::handleSyncData, this, _1, _2),
-                                  boost::bind(&SyncCore::handleSyncInterestTimeout, this, _1)));
+                                  boost::bind(&SyncCore::handleSyncInterestTimeout, this, _1)),
+                          selectors);
 
-  // if there is a pending syncSyncInterest task, reschedule it to be 4 seconds from now
+  // if there is a pending syncSyncInterest task, reschedule it to be m_syncInterestInterval seconds from now
   // if no such task exists, it will be added
-  _LOG_DEBUG("[" << m_log->GetLocalName () << "] >>> Attempt to schedule sendSyncInterest ");
   m_scheduler->rescheduleTask(m_sendSyncInterestTask);
-  _LOG_DEBUG("[" << m_log->GetLocalName () << "] >>> Scheduled sendSyncInterest ");
 }
 
 void
diff --git a/src/sync-core.h b/src/sync-core.h
index b0d8af0..a0eb547 100644
--- a/src/sync-core.h
+++ b/src/sync-core.h
@@ -45,7 +45,8 @@
            , const Ccnx::Name &localPrefix      // routable name used by the local user
            , const Ccnx::Name &syncPrefix       // the prefix for the sync collection
            , const StateMsgCallback &callback   // callback when state change is detected
-           , Ccnx::CcnxWrapperPtr ccnx);
+           , Ccnx::CcnxWrapperPtr ccnx
+           , double syncInterestInterval = -1.0);
   ~SyncCore();
 
   void
@@ -113,6 +114,8 @@
   IntervalGeneratorPtr m_recoverWaitGenerator;
 
   TaskPtr m_sendSyncInterestTask;
+
+  double m_syncInterestInterval;
 };
 
 #endif // SYNC_CORE_H
