anchor.diff:  on({rm_change, OldRange, NewRange}, State) ->
       ?TRACE("the range has changed: ~w -> ~w", [OldRange, NewRange]),
       ?TRACE("state: ~w", [State]),
  -    compare_and_fix_rm_with_leases(State);
  -
  -on({read_after_rm_change, MissingRange, Result}, State) ->
  +    compare_and_fix_rm_with_leases(State, OldRange, NewRange);
  +
  +on({read_after_rm_change, _MissingRange, Result}, State) ->
       ?TRACE("read_after_rm_change ~w", [Result]),
       case Result of
           {qread_done, _ReqId, _Round, Lease} ->
  
positive.code:             % we lost our active lease; we do not participate in the ring anymore
              State;
          false ->
              MissingRange = intervals:minus(MyRange, ActiveRange),
              case intervals:is_non_empty(MissingRange) 
                   andalso
                  intervals:is_left_of(MissingRange, ActiveRange) of
                  false ->
                      State;
                  true ->
                      %% log:log("missing range:~n missing=~p~n active=~p~n my_range=~p", 
                      %%         [MissingRange, ActiveRange, MyRange]),
                      %% log:log("missing range: ~w", [MissingRange]),
                      LeaseId = l_on_cseq:id(MissingRange),
                      Pid = comm:reply_as(self(), 3, {read_after_rm_change, MissingRange, '_'}),
                      l_on_cseq:read(LeaseId, Pid),
                      State
              end
      end.
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %
  
negative.code: rm_filter(Old, New, Reason) ->
      OldRange = nodelist:node_range(Old),
      NewRange = nodelist:node_range(New),
      case Reason of
          {slide_finished, _} ->
              false;
  