anchor.diff:  
   -type subscriber_filter_fun() :: fun((OldNeighbors::nodelist:neighborhood(),
                                         NewNeighbors::nodelist:neighborhood(),
  -                                      IsSlide::slide()) -> boolean()).
  +                                      SlideType::slide()) -> boolean()).
   -type subscriber_exec_fun() :: fun((Subscriber::pid() | null, Tag::any(),
                                       OldNeighbors::nodelist:neighborhood(),
                                       NewNeighbors::nodelist:neighborhood()) -> any()).
  
positive.code:     RMFun = fun() -> ?RM:new_succ(RM_State, NewSucc) end,
      update_state(State, RMFun);
  
  on({rm, notify_slide_finished, IsSlide}, State = {RM_State, _HasLeft, SubscrTable}) ->
      Neighborhood = ?RM:get_neighbors(RM_State),
      call_subscribers(Neighborhood, Neighborhood, IsSlide, SubscrTable),
      State;
  
  on({rm, pred_left, OldPred, PredsPred}, State = {RM_State, _HasLeft, _SubscrTable}) ->
  
negative.code: 
  %% @doc Inform the dht_node of a new neighborhood.
  -spec call_subscribers(OldNeighbors::nodelist:neighborhood(),
          NewNeighbors::nodelist:neighborhood(), SlideType::slide(),
          SubscrTable::tid()) -> ok.
  call_subscribers(OldNeighborhood, NewNeighborhood, SlideType, SubscrTable) ->
      call_subscribers_iter(OldNeighborhood, NewNeighborhood, SlideType, SubscrTable, ets:first(SubscrTable)).
  
  %% @doc Iterates over all susbcribers and calls their subscribed functions.
  -spec call_subscribers_iter(OldNeighbors::nodelist:neighborhood(),
          NewNeighbors::nodelist:neighborhood(), SlideType::slide(), SubscrTable::tid(),
          CurrentKey::{Pid::pid() | null, Tag::any()} | '$end_of_table') -> ok.
  call_subscribers_iter(_OldNeighborhood, _NewNeighborhood, _SlideType, _SubscrTable, '$end_of_table') ->
      ok;
  call_subscribers_iter(OldNeighborhood, NewNeighborhood, SlideType, SubscrTable, CurrentKey) ->
      % assume the key exists (it should since we are iterating over the table!)
      [SubscrTuple] = ets:lookup(SubscrTable, CurrentKey),
      call_subscribers_check(OldNeighborhood, NewNeighborhood, SlideType, SubscrTuple, SubscrTable),
      call_subscribers_iter(OldNeighborhood, NewNeighborhood, SlideType, SubscrTable,
                            ets:next(SubscrTable, CurrentKey)).
  
  %% @doc Checks whether FilterFun for the current subscription tuple is true
  %%      and executes ExecFun. Unsubscribes the tuple, if ExecFun has been
  %%      called MaxCalls times.
  -spec call_subscribers_check(OldNeighbors::nodelist:neighborhood(),
          NewNeighbors::nodelist:neighborhood(), SlideType::slide(),
          {{Pid::pid() | null, Tag::any()}, FilterFun::subscriber_filter_fun(),
           ExecFun::subscriber_exec_fun(), MaxCalls::pos_integer() | inf},
          SubscrTable::tid()) -> ok.
  call_subscribers_check(OldNeighborhood, NewNeighborhood, SlideType,
          {{Pid, Tag}, FilterFun, ExecFun, MaxCalls}, SubscrTable) ->
      case FilterFun(OldNeighborhood, NewNeighborhood, SlideType) of
          true -> ExecFun(Pid, Tag, OldNeighborhood, NewNeighborhood),
                  case MaxCalls of
                      inf -> ok;
  