added upper bound / max retries