use error events instead of throwing, order templates by FIFO and make the rotation optional