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_cluster_membership:activate(KeepNodes),
  
                         rebalance(KeepNodes, EjectNodes, FailedNodes,
                                   BucketConfigs, DeltaRecoveryBucketTuples)
                 end
         end, []]).
  
  
negative.code:             exit(Error)
      end,
  
      {ok, RebalanceObserver} = ns_rebalance_observer:start_link(length(BucketConfigs)),
  
      lists:foreach(fun ({I, {BucketName, BucketConfig}}) ->
                            ale:info(?USER_LOGGER, "Started rebalancing bucket ~s", [BucketName]),
                            ?rebalance_info("Rebalancing bucket ~p with config ~p",
  