anchor.diff:              false -> ?DBG_ASSERT(intervals:in(node:id(NewMe), nodelist:succ_range(Neighborhood))),
                        intervals:new('(', OldId, NewId, ')')
           end,
  -    NewNeighborhood2 =
  -        nodelist:filter(NewNeighborhood1,
  -                        fun(N) -> not intervals:in(node:id(N), I) end,
  -                        fun(N) -> contact_new_nodes([N]) end),
  +    NewNeighborhood2 = remove_neighbors_in_interval(NewNeighborhood1, I, null),
       
       % only send pred and succ the new node
       Message = {rm, {update_node, NewMe}},
  
positive.code:     % -> try to re-add them with updated information though
      NewNeighborhood1 = element(1, State2),
      I = intervals:new('(', node:id(PredsPred), nodelist:nodeid(NewNeighborhood1), ')'),
      NewNeighborhood2 =
          nodelist:filter(
            NewNeighborhood1,
            % note: be resilient in case we have a more up-to-date PredsPred node info!
            fun(N) -> (not intervals:in(node:id(N), I)) orelse node:same_process(N, PredsPred) end,
            fun(N) -> contact_new_nodes([N]) end),
      State3 = setelement(1, State2, NewNeighborhood2),
      {{graceful_leave, pred, OldPred}, State3}.
  
  
negative.code:         end,
      % now remove all potentially out-dated nodes and try to re-add them with
      % updated information
      NewNeighborhood2 = remove_neighbors_in_interval(NewNeighborhood1, I, null),
      {{unknown}, {NewNeighborhood2, RandViewSize, Cache, Churn}};
  
  handle_custom_message(_, _State) -> unknown_event.
  