implement read and copy