implement read