note that IO should be done on init, not handle