anchor.diff:  % on timeout:
   %  - in phase 2b, remove failed connection, start over
   %  - in other phases, ignore this timeout (but remove the connection)
  -process_join_state({join, get_number_of_samples_timeout, Conn} = _Msg,
  +process_join_state({join, get_number_of_samples_timeout, Conn, JoinUUId} = _Msg,
                      {join, JoinState, QueuedMessages})
  -  when element(1, JoinState) =:= phase2b ->
  +  when element(2, JoinState) =:= JoinUUId ->
       ?TRACE1(_Msg, {join, JoinState}),
       JoinState1 = remove_connection(Conn, JoinState),
  -    case get_phase(JoinState1) of
  -        phase2b -> {join, start_over(JoinState1), QueuedMessages};
  -        _       -> {join, JoinState1, QueuedMessages}
  -    end;
  +    NewJoinState = case get_phase(JoinState1) of
  +                       phase2b -> start_over(JoinState1);
  +                       _       -> JoinState1
  +                   end,
  +    ?TRACE_STATE(NewJoinState),
  +    {join, NewJoinState, QueuedMessages};
  +
  +process_join_state({join, get_number_of_samples_timeout, _Conn, _JoinId} = _Msg,
  +                   {join, _JoinState, _QueuedMessages} = State) ->
  +    ?TRACE1(_Msg, {join, _JoinState}),
  +    State;
   
   %% userdevguide-begin dht_node_join:join_other_p2b
   % note: although this message was send in phase2, also accept message in
  
positive.code:                     % id is correct but the node is not (should never happen!)
                      log:log(error, "[ Node ~w ] got join_response but the node "
                                    "changed, trying next candidate", [self()]),
                      {join, try_next_candidate(JoinState), QueuedMessages};
                  _ ->
                      MyId = node_details:get(lb_op:get(Candidate, n1_new), new_key),
                      MyIdVersion = get_id_version(JoinState),
  
negative.code:             [_|_] -> % still some unprocessed join ids -> wait
                  JoinState2
          end,
      ?TRACE_STATE(NewJoinState),
      {join, NewJoinState, QueuedMessages};
  
  % In phase 2 or 2b, also add the candidate but do not continue.
  