anchor.diff:      FirstDelay = randoms:rand_uniform(1, get_bench_interval() + 1),
       msg_delay:send_local(FirstDelay, self(), {bench}),
       msg_delay:send_local(get_gather_interval(), self(), {propagate}),
  -    {0, rrd:create(get_gather_interval() * 1000000, 60, {timing, us})}.
  +    Now = os:timestamp(),
  +    #state{perf_rr = rrd:create(get_gather_interval() * 1000000, 60, {timing, us}, Now),
  +           perf_lh = rrd:create(get_gather_interval() * 1000000, 60, {timing, count}, Now)}.
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   % Miscellaneous
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   
  --spec timing_update_fun(Time::rrd:internal_time(), Old::rrd:timing_type(T) | undefined, New::rrd:timing_type(T))
  -        -> rrd:timing_type(T) when is_subtype(T, number()).
  +-spec timing_update_fun(Time::rrd:internal_time(), Old::rrd:timing_type(T) | undefined, New::rrd:timing_type(T) | undefined)
  +        -> rrd:timing_type(T) | undefined when is_subtype(T, number()).
   timing_update_fun(_Time, undefined, New) ->
       New;
  +timing_update_fun(_Time, Old, undefined) ->
  +    Old;
   timing_update_fun(_Time, {Sum, Sum2, Count, Min, Max, Hist},
                     {NewSum, NewSum2, NewCount, NewMin, NewMax, NewHist}) ->
       NewHist2 = lists:foldl(fun({V, C}, Acc) ->
  
positive.code:     {Sum + NewSum, Sum2 + NewSum2, Count + NewCount,
       erlang:min(Min, NewMin), erlang:max(Max, NewMax), NewHist2}.
  
  broadcast_value(OldStats, Stats, OldRound) ->
      % broadcast the latest value only if a new time slot was started
      SlotOld = rrd:get_slot_start(0, OldStats),
      SlotNew = rrd:get_slot_start(0, Stats),
      case SlotNew of
          SlotOld -> ok; %nothing to do
          _  -> % new slot -> broadcast latest value only:
              DB2 = rrd:reduce_timeslots(1, OldStats),
              Msg = {send_to_group_member, monitor_perf, {report_value, OldRound, DB2}},
              bulkowner:issue_bulk_owner(intervals:all(), Msg)
      end.
  
  %% @doc Checks whether the node is the current leader.
  
negative.code: 
  -behaviour(gen_component).
  
  -include("record_helpers.hrl").
  -include("scalaris.hrl").
  
  % monitor process functions
  -export([start_link/1, init/1, on/2, check_config/0]).
  
  -record(state,
          {round   = 0                         :: non_neg_integer(),
           perf_rr = ?required(state, perf_rr) :: rrd:rrd(),
           perf_lh = ?required(state, perf_lh) :: rrd:rrd()
          }).
  
  -type state() :: #state{}.
  -type message() ::
      {bench} |
      {propagate} |
      {get_node_details_response, node_details:node_details()} |
      {gather_stats, SourcePid::comm:mypid(), Round::pos_integer()} |
      {{get_rrds_response, [{Process::atom(), Key::string(), DB::rrd:rrd() | undefined}]}, {SourcePid::comm:mypid(), Round::pos_integer()}} |
      {gather_stats_response, Round::pos_integer(), [{Process::atom(), Key::string(), Data::rrd:timing_type(number())}]} |
      {report_value, StatsOneRound::state()}.
  
  %-define(TRACE(X,Y), ct:pal(X,Y)).
  -define(TRACE(X,Y), ok).
  -define(TRACE1(Msg, State),
          ?TRACE("[ ~.0p ]~n  Msg: ~.0p~n  State: ~.0p)~n", [self(), Msg, State])).
  
  -spec run_bench() -> ok.
  run_bench() ->
  