Backporting Abandonment from Async

Thanks Keverw for the original