significant change in I/O part, now it is much more solid as before