anchor.diff:          false ->
               {error, {format, "Counters are not supported"}, State}
       end;
  -process(#rpbcounterupdatereq{bucket=B0, type=T, key=K,  w=W0, dw=DW0, pw=PW0, amount=CounterOp,
  +process(#rpbcounterupdatereq{bucket=B, key=K,  w=W0, dw=DW0, pw=PW0, amount=CounterOp,
                                returnvalue=RetVal},
           #state{client=C} = State) ->
  -    B = maybe_bucket_type(T, B0),
       case {allow_mult(B), lists:member(pncounter, riak_core_capability:get({riak_kv, crdt}, []))} of
           {true, true} ->
               O = riak_kv_crdt:new(B, K, ?LEGACY_COUNTER_TYPE),
  
positive.code:     Msg = riak_pb_codec:decode(Code, Bin),
      %% no special permissions for counters, just get/put
      case Msg of
          #rpbcountergetreq{type=T, bucket=B} ->
              Bucket = bucket_type(T, B),
              {ok, Msg, {"riak_kv.get", Bucket}};
          #rpbcounterupdatereq{type=T, bucket=B} ->
              Bucket = bucket_type(T, B),
              {ok, Msg, {"riak_kv.put", Bucket}}
      end.
  
  
negative.code:     {ok, riak_pb_codec:encode(Message)}.
  
  %% @doc process/2 callback. Handles an incoming request message.
  process(#rpbcountergetreq{bucket=B, key=K, r=R0, pr=PR0,
                            notfound_ok=NFOk, basic_quorum=BQ},
          #state{client=C} = State) ->
      case lists:member(pncounter, riak_core_capability:get({riak_kv, crdt}, [])) of
          true ->
              R = decode_quorum(R0),
              PR = decode_quorum(PR0),
              case C:get(B, K, make_option(r, R) ++
                             make_option(pr, PR) ++
                             make_option(notfound_ok, NFOk) ++
  