Split up the async and non-async code paths