may be move isCancelled out of if(i*m..) to be able to cancel within the 1% update