anchor.diff:  on({prbr, round_request, _DB, Cons, Proposer, Key, DataType, ProposerUID, ReadFilter, OpType}, TableName) ->
       ?TRACE("prbr:round_request: ~p in round ~p~n", [Key, ProposerUID]),
       KeyEntry = get_entry(Key, TableName),
  -    {NewKeyEntryVal, ReadVal} =
  +
  +    %% custom prbr read handler might change value (e.g. due to GCing)
  +    {NewKeyEntryVal, ReadVal, ValueHasChanged} =
           case erlang:function_exported(DataType, prbr_read_handler, 3) of
               true -> DataType:prbr_read_handler(KeyEntry, TableName, ReadFilter);
  -            _    -> {entry_val(KeyEntry), ReadFilter(entry_val(KeyEntry))}
  +            _    -> {entry_val(KeyEntry), ReadFilter(entry_val(KeyEntry)), false}
           end,
  +
       %% Assign a valid next read round number
       %% If this round_request is part a read it is not necessary
       %% to increment the read round number, since a read does not
  
positive.code:     msg_round_request_reply(Proposer, Cons, AssignedReadRound,
                              EntryWriteRound, ReadVal, OpType),
  
      NewKeyEntry = entry_set_r_read(KeyEntry, AssignedReadRound),
      NewKeyEntry2 = entry_set_val(NewKeyEntry, NewKeyEntryVal), % prbr read handler might change value (e.g. due to GCing)
      _ = set_entry(NewKeyEntry2, TableName),
  
      TableName;
  
  
negative.code: 
      _ = case pr:get_r(ReadRound) > pr:get_r(entry_r_read(KeyEntry)) of
           true ->
               %% prbr read handler might change value (e.g. due to GCing)
              {NewKeyEntryVal, ReadVal, _ValueHasChanged} =
                  case erlang:function_exported(DataType, prbr_read_handler, 3) of
                      true -> DataType:prbr_read_handler(KeyEntry, TableName, ReadFilter);
                      _    -> {entry_val(KeyEntry), ReadFilter(entry_val(KeyEntry)), false}
                  end,
              trace_mpath:log_info(self(), {'prbr:on(read)',
                                            %% key, Key,
  