read-through and write-through implementation