anchor.diff:  get_neighbors({Neighbors, _RandViewSize, _Cache, _Churn}) ->
       Neighbors.
   
  +-spec get_randview_size(state()) -> pos_integer().
  +get_randview_size({_Neighbors, RandViewSize, _Cache, _Churn}) ->
  +    RandViewSize.
  +
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % Startup
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
positive.code:     % try to find a replacement in the cache:
      NewNeighborhood = trigger_update(Neighborhood, [], Cache),
      {{graceful_leave, OldNode},
       {NewNeighborhood, RandViewSize, Cache, Churn}};
  fd_notify(State, crash, DeadPid, _Reason) ->
      % crash, i.e. non-graceful leave -> add as zombie candidate
      {Neighborhood, RandViewSize, Cache, Churn} =
  
negative.code: 
  % got cyclon cache (as part of a repeating call)
  handle_custom_message({rm, {cy_cache, NewCache}}, State) ->
      {ChangeReason, NewState} = add_cyclon_cache(NewCache, State),
      NewRandViewSize = get_randview_size(NewState),
      % trigger new cyclon cache request
      gossip_cyclon:get_subset_rand(NewRandViewSize, comm:reply_as(self(), 2, {rm, '_'}),
                                    config:read(tman_cyclon_interval)),
      {ChangeReason, NewState};
  
  % got shuffle request
  handle_custom_message({rm, buffer, OtherNeighbors, RequestPredsMinCount, RequestSuccsMinCount},
  