requrires attr_readers