added exponential backoff