reworked async model