read implementation complete