clean up
implement read