implementation with ReadWrite