clean closure api
diff --git a/ccnx/ccnx-closure.cpp b/ccnx/ccnx-closure.cpp
index 528c721..bc9b244 100644
--- a/ccnx/ccnx-closure.cpp
+++ b/ccnx/ccnx-closure.cpp
@@ -2,15 +2,15 @@
 
 namespace Ccnx {
 
-Closure::Closure(int retry, const DataCallback &dataCallback, const TimeoutCallback &timeoutCallback)
-              : m_retry(retry), m_timeoutCallback(NULL), m_dataCallback(NULL)
+Closure::Closure(const DataCallback &dataCallback, const TimeoutCallback &timeoutCallback)
+              : m_timeoutCallback(NULL), m_dataCallback(NULL)
 {
   m_timeoutCallback = new TimeoutCallback (timeoutCallback);
   m_dataCallback = new DataCallback (dataCallback);
 }
 
 Closure::Closure(const Closure &other)
-            :m_retry(other.m_retry), m_timeoutCallback(NULL), m_dataCallback(NULL)
+            : m_timeoutCallback(NULL), m_dataCallback(NULL)
 {
   m_timeoutCallback = new TimeoutCallback(*(other.m_timeoutCallback));
   m_dataCallback = new DataCallback(*(other.m_dataCallback));
diff --git a/ccnx/ccnx-closure.h b/ccnx/ccnx-closure.h
index f006d11..1bcaa06 100644
--- a/ccnx/ccnx-closure.h
+++ b/ccnx/ccnx-closure.h
@@ -21,10 +21,8 @@
 
   typedef boost::function<TimeoutCallbackReturnValue (const Name &)> TimeoutCallback;
 
-  Closure(int retry, const DataCallback &dataCallback, const TimeoutCallback &timeoutCallback = TimeoutCallback());
+  Closure(const DataCallback &dataCallback, const TimeoutCallback &timeoutCallback = TimeoutCallback());
   Closure(const Closure &other);
-  int getRetry() {return m_retry;}
-  void decRetry() { m_retry--;}
   virtual ~Closure();
   virtual void
   runDataCallback(const Name &name, const Bytes &content);
@@ -35,7 +33,6 @@
   dup() const;
 
 protected:
-  int m_retry;
   TimeoutCallback *m_timeoutCallback;
   DataCallback *m_dataCallback;
 };
diff --git a/ccnx/ccnx-tunnel.cpp b/ccnx/ccnx-tunnel.cpp
index dfefc8b..0808663 100644
--- a/ccnx/ccnx-tunnel.cpp
+++ b/ccnx/ccnx-tunnel.cpp
@@ -118,8 +118,8 @@
   m_rit.erase(prefix);
 }
 
-TunnelClosure::TunnelClosure(int retry, const DataCallback &dataCallback, CcnxTunnel *tunnel, const Name &originalInterest, const TimeoutCallback &timeoutCallback)
-                  : Closure(retry, dataCallback, timeoutCallback)
+TunnelClosure::TunnelClosure(const DataCallback &dataCallback, CcnxTunnel *tunnel, const Name &originalInterest, const TimeoutCallback &timeoutCallback)
+                  : Closure(dataCallback, timeoutCallback)
                   , m_tunnel(tunnel)
                   , m_originalInterest(originalInterest)
 {
@@ -134,7 +134,7 @@
 Closure *
 TunnelClosure::dup() const
 {
-  Closure *closure = new TunnelClosure(m_retry, *m_dataCallback, m_tunnel, m_originalInterest, *m_timeoutCallback);
+  Closure *closure = new TunnelClosure(*m_dataCallback, m_tunnel, m_originalInterest, *m_timeoutCallback);
   return closure;
 }
 
diff --git a/ccnx/ccnx-tunnel.h b/ccnx/ccnx-tunnel.h
index 104c7cf..05f981a 100644
--- a/ccnx/ccnx-tunnel.h
+++ b/ccnx/ccnx-tunnel.h
@@ -89,7 +89,7 @@
 class TunnelClosure : public Closure
 {
 public:
-  TunnelClosure(int retry, const DataCallback &dataCallback, CcnxTunnel *tunnel, const Name &originalInterest, const TimeoutCallback &timeoutCallback = TimeoutCallback());
+  TunnelClosure(const DataCallback &dataCallback, CcnxTunnel *tunnel, const Name &originalInterest, const TimeoutCallback &timeoutCallback = TimeoutCallback());
 
   TunnelClosure(const Closure *closure, CcnxTunnel *tunnel, const Name &originalInterest);
 
diff --git a/ccnx/ccnx-wrapper.cpp b/ccnx/ccnx-wrapper.cpp
index 637b9af..b014a07 100644
--- a/ccnx/ccnx-wrapper.cpp
+++ b/ccnx/ccnx-wrapper.cpp
@@ -247,18 +247,16 @@
       break;
 
     case CCN_UPCALL_INTEREST_TIMED_OUT: {
-      if (cp != NULL && cp->getRetry() > 0) {
-        cp->decRetry();
-        return CCN_UPCALL_RESULT_REEXPRESS;
-      }
-
-      Name interest(info->interest_ccnb, info->interest_comps);
-      Closure::TimeoutCallbackReturnValue rv = cp->runTimeoutCallback(interest);
-      switch(rv)
+      if (cp != NULL)
       {
-        case Closure::RESULT_OK : return CCN_UPCALL_RESULT_OK;
-        case Closure::RESULT_REEXPRESS : return CCN_UPCALL_RESULT_REEXPRESS;
-        default : break;
+        Name interest(info->interest_ccnb, info->interest_comps);
+        Closure::TimeoutCallbackReturnValue rv = cp->runTimeoutCallback(interest);
+        switch(rv)
+        {
+          case Closure::RESULT_OK : return CCN_UPCALL_RESULT_OK;
+          case Closure::RESULT_REEXPRESS : return CCN_UPCALL_RESULT_REEXPRESS;
+          default : break;
+        }
       }
       return CCN_UPCALL_RESULT_OK;
     }
diff --git a/src/sync-core.cc b/src/sync-core.cc
index 9e5d0f4..1e9a947 100644
--- a/src/sync-core.cc
+++ b/src/sync-core.cc
@@ -67,8 +67,8 @@
          , m_recoverWaitGenerator(new RandomIntervalGenerator(WAIT, RANDOM_PERCENT, RandomIntervalGenerator::UP))
 {
   m_rootHash = m_log->RememberStateInStateLog();
-  m_syncClosure = new Closure(0, boost::bind(&SyncCore::handleSyncData, this, _1, _2), boost::bind(&SyncCore::handleSyncInterestTimeout, this, _1));
-  m_recoverClosure = new Closure(0, boost::bind(&SyncCore::handleRecoverData, this, _1, _2), boost::bind(&SyncCore::handleRecoverInterestTimeout, this, _1));
+  m_syncClosure = new Closure(boost::bind(&SyncCore::handleSyncData, this, _1, _2), boost::bind(&SyncCore::handleSyncInterestTimeout, this, _1));
+  m_recoverClosure = new Closure(boost::bind(&SyncCore::handleRecoverData, this, _1, _2), boost::bind(&SyncCore::handleRecoverInterestTimeout, this, _1));
   m_handle->setInterestFilter(m_syncPrefix, boost::bind(&SyncCore::handleInterest, this, _1));
   m_log->initYP(m_yp);
   m_scheduler->start();
diff --git a/test/test-ccnx-tunnel.cc b/test/test-ccnx-tunnel.cc
index 5a5abc5..6c2ab0d 100644
--- a/test/test-ccnx-tunnel.cc
+++ b/test/test-ccnx-tunnel.cc
@@ -82,14 +82,14 @@
   g_dc_o = 0;
   t1->publishData(Name(inner), (const unsigned char *)inner.c_str(), inner.size(), 5);
   usleep(100000);
-  Closure *outerClosure = new Closure(1, bind(outerCallback, _1, _2));
+  Closure *outerClosure = new Closure(bind(outerCallback, _1, _2));
   c1->sendInterest(Name("/local/hello"), outerClosure);
   usleep(100000);
   // it is indeed published as /local/hello
   BOOST_CHECK_EQUAL(g_dc_o, 1);
 
   g_dc_i = 0;
-  Closure *innerClosure = new Closure(1, bind(innerCallback, _1, _2));
+  Closure *innerClosure = new Closure(bind(innerCallback, _1, _2));
   t2->sendInterest(Name(inner), innerClosure);
   usleep(100000);
   BOOST_CHECK_EQUAL(g_dc_i, 1);
@@ -107,7 +107,7 @@
   t3.overridePrefix();
   t3.setInterestFilter(Name("/t3"), bind(interestCallback, _1));
   usleep(100000);
-  Closure *innerClosure = new Closure(1, bind(innerCallback, _1, _2));
+  Closure *innerClosure = new Closure(bind(innerCallback, _1, _2));
   t1->sendInterest(Name("/t3/hello"), innerClosure);
   usleep(100000);
   BOOST_CHECK_EQUAL(g_dc_i, 1);
diff --git a/test/test-ccnx-wrapper.cc b/test/test-ccnx-wrapper.cc
index 7c010ec..651692f 100644
--- a/test/test-ccnx-wrapper.cc
+++ b/test/test-ccnx-wrapper.cc
@@ -53,7 +53,7 @@
   usleep(100000);
   c2->setInterestFilter(prefix2, bind(publish2, _1));
 
-  Closure *closure = new Closure(1, bind(dataCallback, _1, _2), bind(timeout, _1));
+  Closure *closure = new Closure(bind(dataCallback, _1, _2), bind(timeout, _1));
 
   c1->sendInterest(Name("/c2/hi"), closure);
   usleep(100000);
@@ -69,7 +69,7 @@
 BOOST_AUTO_TEST_CASE (CcnxWrapperSelector)
 {
 
-  Closure *closure = new Closure(1, bind(dataCallback, _1, _2), bind(timeout, _1));
+  Closure *closure = new Closure(bind(dataCallback, _1, _2), bind(timeout, _1));
 
   Selectors selectors;
   selectors.interestLifetime(1);