anchor.diff:            BucketConfigs, DeltaRecoveryBuckets) ->
       do_pre_rebalance_config_sync(KeepNodes),
   
  -    %% now wait when all bucket shutdowns are done on nodes we're
  +    ok = activate_services(KeepNodes),
  +    StartTS = os:timestamp(),
  +
  +    %% Eject failed nodes first so they don't cause trouble
  +    FailedNodes = FailedNodesAll -- [node()],
  +    eject_nodes(FailedNodes),
  +
  +    rebalance_kv(KeepNodes, EjectNodesAll, BucketConfigs, DeltaRecoveryBuckets),
  +
  +    ns_config:sync_announcements(),
  +    ns_config_rep:push(),
  +    ok = ns_config_rep:synchronize_remote(KeepNodes),
  +
  +    %% don't eject ourselves at all here; this will be handled by ns_orchestrator
  +    EjectNodes = EjectNodesAll -- [node()],
  +
  +    maybe_delay_eject_nodes(StartTS, EjectNodesAll),
  +    eject_nodes(EjectNodes).
  +
  +rebalance_kv(KeepNodes, EjectNodes, BucketConfigs, DeltaRecoveryBuckets) ->
  +    %% wait when all bucket shutdowns are done on nodes we're
       %% adding (or maybe adding)
       do_wait_buckets_shutdown(KeepNodes),
   
  -    %% don't eject ourselves at all here; this will be handled by ns_orchestrator
  -    EjectNodes = EjectNodesAll -- [node()],
  -    FailedNodes = FailedNodesAll -- [node()],
  -
  -    KeepKVNodes = ns_cluster_membership:service_nodes(KeepNodes, kv),
  -    LiveKVNodes = ns_cluster_membership:service_nodes(KeepNodes ++ EjectNodesAll, kv),
       NumBuckets = length(BucketConfigs),
       ?rebalance_debug("BucketConfigs = ~p", [sanitize(BucketConfigs)]),
  +
  +    KeepKVNodes = ns_cluster_membership:service_nodes(KeepNodes, kv),
  +    LiveKVNodes = ns_cluster_membership:service_nodes(KeepNodes ++ EjectNodes, kv),
   
       case maybe_cleanup_old_buckets(KeepNodes) of
           ok ->
  
positive.code:                                       ns_bucket:get_bucket(BucketName),
                                    master_activity_events:note_bucket_rebalance_started(BucketName),
                                    {NewMap, MapOptions} =
                                        rebalance(BucketName, NewConf,
                                                  KeepKVNodes, BucketCompletion,
                                                  NumBuckets, DeltaRecoveryBuckets),
                                    ns_bucket:set_map_opts(BucketName, MapOptions),
                                    ns_bucket:update_bucket_props(BucketName,
                                                                  [{deltaRecoveryMap, undefined}]),
  
negative.code: 
      unlink(RebalanceObserver),
      exit(RebalanceObserver, shutdown),
      misc:wait_for_process(RebalanceObserver, infinity).
  
  %% @doc Rebalance the cluster. Operates on a single bucket. Will
  %% either return ok or exit with reason 'stopped' or whatever reason
  %% was given by whatever failed.
  do_rebalance_bucket(Bucket, Config, KeepNodes, BucketCompletion,
                      NumBuckets, DeltaRecoveryBuckets) ->
      Map = proplists:get_value(map, Config),
      {FastForwardMap, MapOptions} =
          case lists:keyfind(Bucket, 1, DeltaRecoveryBuckets) of
  