Everything is done in interrupt. Needs testing