decoupled some i/o