anchor.diff:                               [ServiceGroup]),
       ClientsMonitor =
           sup:worker_desc(clients_monitor, monitor, start_link, ["clients_group"]),
  -    DHTNodeJoinAt = case util:app_get_env(join_at, random) of
  -                         random -> [];
  -                         Id     -> [{{dht_node, id}, Id}, {skip_psv_lb}]
  -                     end,
  -    DhtNodeId = randoms:getRandomString(),
  -    DHTNodeOptions = DHTNodeJoinAt ++ [{first} | Options], % this is the first dht_node in this VM
  -    DHTNodeGroup = pid_groups:new("dht_node_"),
  -    DHTNode = sup:supervisor_desc(DhtNodeId, sup_dht_node, start_link,
  -                                       [{DHTNodeGroup, [{my_sup_dht_node_id, DhtNodeId}
  -                                         | DHTNodeOptions]}]),
  +    %% Moves several lignes to get_dht_node_specs for recovery mechanims
  +    DHTNodes = get_dht_node_descs(Options),
       FailureDetector = sup:worker_desc(fd, fd, start_link, [ServiceGroup]),
       Ganglia = case config:read(ganglia_enable) of
                     true -> sup:worker_desc(ganglia_server, ganglia, start_link, [ServiceGroup]);
  
positive.code: supspec(_) ->
      {ok, {{one_for_one, 10, 1}, []}}.
  
  -spec childs(list(tuple())) -> [any()].
  childs(Options) ->
      {service_group, ServiceGroup} = lists:keyfind(service_group, 1, Options),
  
negative.code:     DHTNodeServer =
          case DHTNodeModule of
              false -> []; %% no dht node requested
              _ -> DHTNodes
          end,
      lists:flatten([BasicServers, MgmtServers, Servers, DHTNodeServer, Ganglia, MonitorPerf]).
  
  