even better retry logic