anchor.diff:              Op(TokenPrivilege)
       end.
   
  -update({{update, Urls, Token, Opt}, ReplyTo}, OldUrls, S) ->
  -    Do = fun(_TokenType) -> do_update(Urls, Opt, ReplyTo, OldUrls, S) end,
  +update({{update, Urls, Token, Opt}, ReplyTo}, S) ->
  +    Do = fun(_TokenType) -> do_update(Urls, Opt, ReplyTo, S) end,
       authorize(write, Token, ReplyTo, S, Do).
  +
  +do_update(Urls, Opt, ReplyTo, #state{data = notfound} = State) ->
  +    do_update(Urls, Opt, ReplyTo, [], State);
  +
  +do_update(Urls, Opt, ReplyTo, #state{data = deleted} = State) ->
  +    do_update(Urls, Opt, ReplyTo, [], State);
  +
  +do_update(Urls, Opt, ReplyTo, #state{data = #tagcontent{} = D} = State) ->
  +    OldUrls = D#tagcontent.urls,
  +    do_update(Urls, Opt, ReplyTo, OldUrls, State).
   
   do_update(Urls, Opt, ReplyTo, OldUrls, State) ->
       case ddfs_tag_util:validate_urls(Urls) of
  
positive.code: handle_cast(M, #state{delayed = Buffer} = S0) when Buffer =/= false ->
      Fun =
          fun({Opt, {Waiters, Urls}}, S) ->
              OldUrls = case S#state.data of
                            #tagcontent{urls = U} -> U;
                            _ -> []
                        end,
              do_update(Urls, Opt, Waiters, OldUrls, S)
          end,
      NewState =
          lists:foldl(Fun, S0#state{delayed = false}, gb_trees:to_list(Buffer)),
  
negative.code:     gen_server:reply(ReplyTo, {S#state.data, S#state.replicas}),
      {noreply, S, S#state.timeout};
  
  handle_cast({{update, _Urls, _Token, _Opt}, _ReplyTo} = M, S) ->
      S1 = update(M, S),
      {noreply, S1, S1#state.timeout};
  
  handle_cast({{put, Field, Value, Token}, ReplyTo}, S) ->
  