now much less asynchronous. maybe this is not good