rewrite to be async
update readme