refactor content negotiator