anchor.diff:  
       % Notify any local observers that the ring has changed (async)
       riak_core_ring_events:ring_update(Ring),
  -    {reply,ok,State}.
  -
  -
  +    {reply,ok,State};
  +handle_call({ring_trans, Fun, Args}, _From, State) ->
  +    {ok, Ring} = get_my_ring(),
  +    case catch Fun(Ring, Args) of
  +        {new_ring, NewRing} ->
  +            mochiglobal:put(?RING_KEY, NewRing),
  +            riak_core_ring_events:ring_update(NewRing),
  +            {reply, {ok, NewRing}, State};
  +        ignore ->
  +            {reply, not_changed, State};
  +        Other ->
  +            error_logger:error_msg("ring_trans: invalid return value: ~p~n", 
  +                                   [Other]),
  +            {reply, not_changed, State}
  +    end.
   handle_cast(stop, State) ->
       {stop,normal,State};
   
  
positive.code:          read_ringfile/1,
           find_latest_ringfile/0,
           do_write_ringfile/1,
           stop/0]).
  
  -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
  
negative.code: %% @spec write_ringfile() -> ok
  write_ringfile() ->
      gen_server2:cast(?MODULE, write_ringfile).
  
  ring_trans(Fun, Args) ->
      gen_server2:call(?MODULE, {ring_trans, Fun, Args}).
  
  
  do_write_ringfile(Ring) ->
  