i/o rewrite draft 2