add retry logic to communication