anchor.diff:      ReadableNodeSet = gb_sets:subtract(NodeSet, BlackSet),
       {ok, gb_sets:to_list(ReadableNodeSet), gb_sets:size(BlackSet)}.
   
  --spec do_choose_write_nodes([node_info()], non_neg_integer(), [node()], [node()]) ->
  +-spec do_choose_write_nodes([node_info()], non_neg_integer(), [node()], [node()], [node()]) ->
                                      {ok, [node()]}.
  -do_choose_write_nodes(Nodes, K, Exclude, BlackList) ->
  +do_choose_write_nodes(Nodes, K, Include, Exclude, BlackList) ->
  +    % Include is the list of nodes that must be included
  +    %
       % Node selection algorithm:
       % 1. try to choose K nodes randomly from all the nodes which have
       %    more than ?MIN_FREE_SPACE bytes free space available and which
  
positive.code: handle_call({choose_write_nodes, K, Exclude}, _,
              #state{nodes = N, write_blacklist = WBL, gc_blacklist = GBL} = S) ->
      BL = lists:umerge(WBL, GBL),
      {reply, do_choose_write_nodes(N, K, Exclude, BL), S};
  
  handle_call({new_blob, Obj, K, Exclude}, _,
              #state{nodes = N, gc_blacklist = GBL, write_blacklist = WBL} = S) ->
  
negative.code:     Primary = ([N || {N, {Free, _Total}} <- Nodes, Free > ?MIN_FREE_SPACE / 1024]
                 -- (Exclude ++ BlackList)),
      if length(Primary) >= K ->
              {ok, Include ++ disco_util:choose_random(Primary -- Include , K - length(Include))};
         true ->
              Preferred = [N || {N, _} <- lists:reverse(lists:keysort(2, Nodes))],
              Secondary = Include ++ lists:sublist(Preferred -- (Include ++ Exclude ++ BlackList),
                                                   K - length(Include)),
              {ok, Secondary}
      end.
  
  