improved irq handling