more async api (wip)