Timer version with interrupts