refactor with delegation utility