switched to using completion tokens for cancelation