Add configurable timeout and default max retries