anchor.diff:      error({unhandled_cast, Event}).
   %%%%%%%%%%
   handle_info(Stats = {stats, 1, _, _, _},
  -	    State = #state{panel=Panel, data=Data, active=Active}) ->
  +	    State = #state{panel=Panel, data=Data, active=Active,
  +			   time=#ti{tick=Tick, disp=Disp0}=Ti}) ->
  +    Disp = trunc(Disp0),
  +    Next = max(Tick - Disp, 0),
       if Active ->
   	    wxWindow:refresh(Panel),
  -	    Freq = 6,
  -	    erlang:send_after(trunc(1000 / Freq), self(), {refresh, 1, Freq});
  +	    erlang:send_after(1000 div ?DISP_FREQ, self(), {refresh, Next});
          true -> ignore
       end,
  -    {noreply, State#state{offset=0.0, data = add_data(Stats, Data)}};
  -
  -handle_info({refresh, Seq, Freq}, State = #state{panel=Panel, offset=Prev}) ->
  +    {noreply, State#state{time=Ti#ti{tick=Next}, data = add_data(Stats, Data, Ti)}};
  +
  +handle_info({refresh, Seq}, State = #state{panel=Panel, time=#ti{tick=Seq, disp=DispF}=Ti})
  +  when (Seq+1) < (DispF*1.5) ->
  +    Next = Seq+1,
       wxWindow:refresh(Panel),
  -    Next = Seq+1,
  -    if Seq > 1, Prev =:= 0.0 ->
  -	    %% We didn't have time to handle the refresh
  -	    {noreply, State};
  -       Next < Freq ->
  -	    erlang:send_after(trunc(1000 / Freq), self(), {refresh, Next, Freq}),
  -	    {noreply, State#state{offset=Seq/Freq}};
  -       true ->
  -	    {noreply, State#state{offset=Seq/Freq}}
  -    end;
  -
  -handle_info({active, Node}, State = #state{parent=Parent, panel=Panel, appmon=Old}) ->
  +    erlang:send_after(1000 div ?DISP_FREQ, self(), {refresh, Next}),
  +    {noreply, State#state{time=Ti#ti{tick=Next}}};
  +handle_info({refresh, _}, State) ->
  +    {noreply, State};
  +
  +handle_info({active, Node}, #state{parent=Parent, panel=Panel, appmon=Old} = State) ->
       create_menus(Parent, []),
       try
   	Node = node(Old),
   	wxWindow:refresh(Panel),
   	{noreply, State#state{active=true}}
       catch _:_ ->
  -	    catch Old ! exit,
  -	    Me = self(),
  -	    Pid = spawn_link(Node, observer_backend, fetch_stats, [Me, 1000]),
  -	    wxWindow:refresh(Panel),
  -	    {noreply, State#state{active=true, appmon=Pid, data={0, queue:new()}}}
  +	    {noreply,restart_fetcher(Node, State)}
       end;
   
   handle_info(not_active, State = #state{appmon=_Pid}) ->
  
positive.code: 
  %%%%%%%%%%
  handle_sync_event(#wx{obj=Panel, event = #wxPaint{}},_,
  		  #state{active=Active, offset=Offset, paint=Paint,
  			 windows=Windows, data=Data}) ->
      %% Sigh workaround bug on MacOSX (Id in paint event is always 0)
      %% Panel = element(Id, Windows),
  
negative.code: 
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  handle_event(#wx{id=?ID_REFRESH_INTERVAL, event=#wxCommand{type=command_menu_selected}},
  	     #state{panel=Panel, appmon=Old, time=#ti{fetch=F0} = Ti0} = State) ->
      case interval_dialog(Panel, Ti0) of
  	Ti0 -> {noreply, State};
  	#ti{fetch=F0} = Ti -> %% Same fetch interval
  	    {noreply, State#state{time=Ti}};
  	Ti -> %% Changed fetch interval
  	    {noreply, restart_fetcher(node(Old), State#state{time=Ti})}
      end;
  handle_event(#wx{event=#wxCommand{type=command_menu_selected}},
  	     State = #state{}) ->
      {noreply, State};
  