add abort() function