anchor.diff:      call_subscribers(Neighborhood, Neighborhood, SlideType, SubscrTable),
       State;
   
  -on({rm, pred_left, OldPred, PredsPred}, State = {RM_State, _HasLeft, _SubscrTable}) ->
  -    RMFun = fun() -> ?RM:remove_pred(RM_State, OldPred, PredsPred) end,
  +on({rm, pred_left, OldPred, PredsPred}, State) ->
  +    RMFun = fun(RM_State) -> ?RM:remove_pred(RM_State, OldPred, PredsPred) end,
       update_state(State, RMFun);
   
  -on({rm, succ_left, OldSucc, SuccsSucc}, State = {RM_State, _HasLeft, _SubscrTable}) ->
  -    RMFun = fun() -> ?RM:remove_succ(RM_State, OldSucc, SuccsSucc) end,
  +on({rm, succ_left, OldSucc, SuccsSucc}, State) ->
  +    RMFun = fun(RM_State) -> ?RM:remove_succ(RM_State, OldSucc, SuccsSucc) end,
       update_state(State, RMFun);
   
  -on({rm, update_id, NewId}, State = {RM_State, _HasLeft, _SubscrTable}) ->
  -    Neighborhood = ?RM:get_neighbors(RM_State),
  +on({rm, update_id, NewId}, State) ->
  +    Neighborhood = ?RM:get_neighbors(element(1, State)),
       OldMe = nodelist:node(Neighborhood),
  -    case node:id(OldMe) =/= NewId of
  -        true ->
  +    case node:id(OldMe) of
  +        NewId -> State;
  +        _ ->
               NewMe = node:update_id(OldMe, NewId),
               % note: nodelist can't update the base node if the new id is not
               % between pred id and succ id
               try begin
  -                    RMFun = fun() -> ?RM:update_node(RM_State, NewMe) end,
  +                    RMFun = fun(RM_State) -> ?RM:update_node(RM_State, NewMe) end,
                       update_state(State, RMFun)
                   end
               catch
  
positive.code:                              nodelist:succ(Neighborhood),
                               Reason]),
                      State
              end;
          _ -> State
      end;
  
  on({rm, leave}, {RM_State, _HasLeft, SubscrTable}) ->
  
negative.code: 
  %% @doc Calls RMFun (which may update the Neighborhood), then calls all
  %%      subscribers and updates the failure detector if necessary.
  -spec update_state(OldState::state_t(), RMFun::fun((?RM:state()) -> ?RM:state()))
          -> NewState::state_t().
  update_state(OldState, RMFun) ->
      update_state(OldState, RMFun, null).
  
  -spec update_state(OldState::state_t(), RMFun::fun((?RM:state()) -> ?RM:state()),
                     CrashedPid::comm:mypid() | null) -> NewState::state_t().
  update_state({OldRM_State, HasLeft, SubscrTable} = _OldState, RMFun, CrashedPid) ->
      OldNeighborhood = ?RM:get_neighbors(OldRM_State),
      NewRM_State = RMFun(OldRM_State),
      NewNeighborhood = ?RM:get_neighbors(NewRM_State),
      call_subscribers(OldNeighborhood, NewNeighborhood, none, SubscrTable),
      update_failuredetector(OldNeighborhood, NewNeighborhood, CrashedPid),
  