Reworked it so it's all asynchronous