Feature/refactor delegate protocols