added io and a whole lot more