anchor.diff:  
   set_desired_replications(Bucket, DesiredReps) ->
       NeededNodes = [Node || {Node, [_|_]} <- DesiredReps],
  -    gen_server:call(server_name(Bucket), {manage_replicators, NeededNodes}, infinity),
  +    ProducerNodes = get_producer_nodes(Bucket),
   
  -    Rs = [{Node, dcp_replicator:setup_replication(Node, Bucket, Partitions)}
  -          || {Node, [_|_] = Partitions} <- DesiredReps],
  -    Bad = [Pair || {_, R} = Pair <- Rs, R =/= ok],
  +    ToStop = ProducerNodes -- NeededNodes,
  +    Rs0 = [{Node, dcp_replicator:setup_replication(Node, Bucket, [])}
  +           || Node <- ToStop],
  +
  +    ok = manage_replicators(Bucket, NeededNodes),
  +
  +    Rs1 = [{Node, dcp_replicator:setup_replication(Node, Bucket, Partitions)}
  +           || {Node, [_|_] = Partitions} <- DesiredReps],
  +    Bad = [Pair || {_, R} = Pair <- Rs0 ++ Rs1, R =/= ok],
   
       case Bad of
           [] ->
  
positive.code:     ?rebalance_warning("Unexpected handle_info(~p, ~p)", [Msg, State]),
      {noreply, State}.
  
  handle_call({manage_replicators, NeededNodes}, _From, Bucket) ->
      dcp_sup:manage_replicators(Bucket, NeededNodes),
      {reply, ok, Bucket};
  
negative.code:             ?log_error("Failed to setup some replications:~n~p", [Bad]),
              {error, {setup_replications_failed, Bad}}
      end.
  
  get_producer_nodes(Bucket) ->
      gen_server:call(server_name(Bucket), get_producer_nodes, infinity).
  
  manage_replicators(Bucket, NeededNodes) ->
      ok = gen_server:call(server_name(Bucket),
                           {manage_replicators, NeededNodes}, infinity).
  
  code_change(_OldVsn, State, _Extra) ->
      {ok, State}.
  