seperate I/O