simplified reader/writer split