separate read & write