new implementation using interrupts resubmitted