adding timeouts, retries, and backoff