anchor.diff:                       phase4 -> integrate_candidate(Candidate, JoinState1, back);
                        _      -> integrate_candidate(Candidate, JoinState1, front)
                    end,
  +    ?TRACE_STATE(JoinState2),
       {join, JoinState2, QueuedMessages};
   %% userdevguide-end dht_node_join:join_other_p3
   
   % 4. joining my neighbor
  -process_join_state({join, join_request_timeout, Timeouts, CandId} = _Msg,
  +process_join_state({join, join_request_timeout, Timeouts, CandId, JoinUUId} = _Msg,
                      {join, JoinState, QueuedMessages} = State)
  -  when element(1, JoinState) =:= phase4 ->
  +  when element(1, JoinState) =:= phase4 andalso
  +           element(2, JoinState) =:= JoinUUId ->
       ?TRACE1(_Msg, {join, JoinState}),
       case get_candidates(JoinState) of
           [] -> State; % no candidates -> late timeout, ignore
  
positive.code: 
  -spec add_connections([connection()], JoinState, front | back) -> JoinState when is_subtype(JoinState, phase_2_4()).
  add_connections([], JoinState, _Pos) -> JoinState;
  add_connections([CNHead], {Phase, Options, CurIdVersion, [CNHead | _] = Connections, JoinIds, Candidates}, _Pos) ->
      {Phase, Options, CurIdVersion, Connections, JoinIds, Candidates};
  add_connections(Nodes = [_|_], {Phase, Options, CurIdVersion, Connections, JoinIds, Candidates}, back) ->
      {Phase, Options, CurIdVersion, lists:append(Connections, Nodes), JoinIds, Candidates};
  add_connections(Nodes = [_|_], {Phase, Options, CurIdVersion, Connections, JoinIds, Candidates}, front) ->
      {Phase, Options, CurIdVersion, lists:append(Nodes, Connections), JoinIds, Candidates}.
  
  -spec remove_connection(connection(), JoinState) -> JoinState when is_subtype(JoinState, phase_2_4()).
  remove_connection(Conn, {Phase, Options, CurIdVersion, Connections, JoinIds, Candidates}) ->
      {Phase, Options, CurIdVersion, [C || C <- Connections, C =/= Conn],
       JoinIds, Candidates}.
  
  %% @doc Checks whether config parameters of the rm_tman process exist and are
  
negative.code:          end || Host <- KnownHosts],
      % timeout just in case
      msg_delay:send_local(get_known_hosts_timeout() div 1000, self(),
                           {join, known_hosts_timeout, JoinUUId}).
  
  -spec phase2_next_step(JoinState::phase2(), Connections::[connection()])
          -> phase2() | phase2b() | phase3().
  