Reworked all the async logic.