added I/O multiplexing