       ++_recvLost;
       if (_recvLost > 10)
         rfResetEstimate();
-      else if (_recvLost % 2 == 1 && _recvWindow < MAX_RECV_WIN)
-        _recvWindow *= 2;
-
-      rf12_sleep(RF12_SLEEP);
+      else
+      {
+        if (_recvLost % 2 == 1 && _recvWindow < MAX_RECV_WIN)
+          _recvWindow *= 2;
+        if (_recvState == RECVSTATE_LOCKED)
+          rfSetRecvState(RECVSTATE_CONVERGING);
+      }
+
       return false;
     }
   } while (!rf12_doWork());

    recvTime = millis();
    if (recvTime - wakeTime > (_recvWindow * 2))
    {
#if defined(LMREMOTE_SERIAL) && defined(_DEBUG)
      Serial.print(" f "); Serial.print(_recvLost);
      //Serial.print(" s "); Serial.print(sleepDur);

static void checkTemps(void)
{
  _tempReadLast = millis();
  if (_enabledProbePins == 0)
    return;

  const unsigned char OVERSAMPLE_COUNT[] = {1, 4, 16, 64};  // 4^n
  boolean modified = false;
