change API - abort is now a promise