returning to original api, swapping callback order to beat race condition for join