anchor.diff:  % !first node
   % 2. Find known hosts
   % no matter which phase, if there are no contact nodes (yet), try to get some
  -process_join_state({join, known_hosts_timeout} = _Msg,
  -                   {join, JoinState, _QueuedMessages} = State) ->
  +process_join_state({join, known_hosts_timeout, JoinUUId} = _Msg,
  +                   {join, JoinState, _QueuedMessages} = State) 
  +  when element(2, JoinState) =:= JoinUUId ->
       ?TRACE1(_Msg, {join, JoinState}),
       case get_connections(JoinState) of
  -        [] -> get_known_nodes();
  +        [] -> get_known_nodes(JoinUUId);
           [_|_] -> ok
       end,
  +    State;
  +
  +% ignore unrelated known_hosts_timeout:
  +process_join_state({join, known_hosts_timeout, _JoinId} = _Msg,
  +                   {join, _JoinState, _QueuedMessages} = State) ->
  +    ?TRACE1(_Msg, {join, _JoinState}),
       State;
   
   %% userdevguide-begin dht_node_join:join_other_p2
  
positive.code:                              null -> JoinState1;
                               _    -> add_connections([Conn], JoinState1, back)
                           end,
              NewConns = [begin
                              NewConn = new_connection(Conn),
                              Msg = {lookup_aux, Id, 0,
                                     {join, get_candidate, comm:this(), Id, MyLbPsv, NewConn}},
                              ?TRACE_SEND(Node, Msg),
                              comm:send(Node, Msg),
                              msg_delay:send_local(get_lookup_timeout() div 1000, self(),
                                                   {join, lookup_timeout, NewConn}),
                              NewConn                     
                          end
                          || Id <- JoinIds],
              JoinState3 = add_connections(NewConns, JoinState2, back),
              case Phase of
                  phase4 -> JoinState3;
  
negative.code:                                           "trying next candidate", [self()]),
                              % note: can not keep Id, even if skip_psv_lb is set
                              JoinState1 = remove_candidate_front(JoinState),
                              NewJoinState = contact_best_candidate(JoinState1),
                              ?TRACE_STATE(NewJoinState),
                              {join, NewJoinState, QueuedMessages};
                          _ ->
                              ?TRACE("[ ~.0p ]~n  joined MyId:~.0p, MyIdVersion:~.0p~n  "
                                         "Succ: ~.0p~n  Pred: ~.0p~n",
  