anchor.diff:      State;
   process_join_msg({join, join_response, _Succ, _Pred, _MoveFullId, _CandId} = _Msg, State) ->
       State;
  -process_join_msg({join, join_response, not_responsible, _CandId} = _Msg, State) ->
  +process_join_msg({join, join_response, Reason, _CandId} = _Msg, State)
  +  when (Reason =:= not_responsible orelse Reason =:= busy) ->
       State;
   process_join_msg({join, lookup_timeout, _Conn, _Id, _JoinId} = _Msg, State) ->
       State;
  
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:     end;
  
  % in other phases remove the candidate from the list (if it still exists):
  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};
  
  