new implementation using interrupts
new head