WIP: splitting _read_or_write()