add support for async, clean up .all api, clean up implementation