make it async

untested