anchor.diff:  -include("scalaris.hrl").
   
   -export([start_link/1, init/1, on/2, check_config/0]).
  +% (temporarily) storing monitoring values in the calling process:
   -export([proc_set_value/3, proc_get_value/2, proc_exists_value/2]).
  +% sending monitoring values to the monitor process
  +-export([monitor_set_value/3]).
   
   -type key() :: string().
   -type internal_key() :: {'$monitor$', Key::string()}.
  
positive.code:     % note: it may happen that the new value created a new slot which already
      % discarded all logged data from the previous (unreported) time slot
      % -> send OldValue, too
      comm:send_local(MyMonitor, {proc_report, Process, Key, OldValue, Value}).
  
  %% @doc Message handler when the rm_loop module is fully initialized.
  -spec on(message(), state()) -> state().
  on({proc_report, ProcTable, Key, OldValue, _NewValue}, Table) ->
      % note: reporting is always done when a new time slot is created
      % -> use the values from the old value
      TableIndex = {ProcTable, Key},
      MyData = case ets:lookup(Table, TableIndex) of
                   [{TableIndex, X}] -> X;
                   []      ->
  
negative.code:     OldValue = erlang:put(InternalKey, NewValue),
      check_report(Process, Key, OldValue, NewValue).
  
  %% @doc Sets the value at Key inside the monitor process of the current group.
  %%      Either specify a new value or an update function which generates the
  %%      new value from the old one.
  -spec monitor_set_value(Process::atom(), Key::key(),
                          NewValue_or_UpdateFun::term() | fun((Old::Value | undefined) -> New::Value)) -> ok.
  monitor_set_value(Process, Key, NewValue_or_UpdateFun) ->
      MyMonitor = pid_groups:get_my(monitor),
      comm:send_local(MyMonitor, {report_single, Process, Key, NewValue_or_UpdateFun}).
  
  %% @doc Checks whether a value exists at Key.
  -spec proc_exists_value(Process::atom(), Key::key()) -> boolean().
  proc_exists_value(_Process, Key) ->
  