Rework to be async