anchor.diff:      end;
   
   % in other phases remove the candidate from the list (if it still exists):
  -process_join_state({join, join_response, not_responsible, CandId} = _Msg,
  -                   {join, JoinState, QueuedMessages}) ->
  +process_join_state({join, join_response, Reason, CandId} = _Msg,
  +                   {join, JoinState, QueuedMessages})
  +  when (Reason =:= not_responsible orelse Reason =:= busy) ->
       ?TRACE_JOIN1(_Msg, JoinState),
       {join, remove_candidate(CandId, JoinState), QueuedMessages};
   
  
positive.code:         _ ->
              ?TRACE("[ ~.0p ]~n  ignoring join_request from ~.0p due to a running slide~n",
                     [self(), NewPred]),
              State
      end;
  %% userdevguide-end dht_node_join:join_request1
  
negative.code:     State;
  
  %% userdevguide-begin dht_node_join:join_other_p4
  process_join_state({join, join_response, Reason, CandId} = _Msg,
                     {join, JoinState, QueuedMessages} = State)
    when element(1, JoinState) =:= phase4 andalso
             (Reason =:= not_responsible orelse Reason =:= busy) ->
      ?TRACE_JOIN1(_Msg, JoinState),
      % the node we contacted is not responsible for the selected key anymore
      % -> try the next candidate, if the message is related to the current candidate
  