anchor.diff:  %%%%%%%%%%
   terminate(_Event, #state{appmon=Pid}) ->
       catch Pid ! exit,
  +    cprof:pause(),
       ok.
   code_change(_, _, State) ->
       State.
   
  -add_data(Stats, {N, Q}) when N > 60 ->
  +restart_fetcher(Node, #state{appmon=Old, panel=Panel, time=#ti{fetch=Freq}=Ti}=State) ->
  +    catch Old ! exit,
  +    Me = self(),
  +    Pid = spawn_link(Node, observer_backend, fetch_stats, [Me, 10000 div Freq]),
  +    wxWindow:refresh(Panel),
  +    cprof:start(?MODULE, '_'),
  +    State#state{active=true, appmon=Pid, data=reset_data(), time=Ti#ti{tick=0}}.
  +
  +reset_data() ->
  +    {0, queue:new()}.
  +
  +add_data(Stats, {N, Q}, #ti{fetch=Fetch, secs=Secs}) when N > Secs*Fetch div 10 ->
       {N, queue:drop(queue:in(Stats, Q))};
  -add_data(Stats, {N, Q}) ->
  +add_data(Stats, {N, Q}, _) ->
       {N+1, queue:in(Stats, Q)}.
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   
   create_menus(Parent, _) ->
  -    MenuEntries =
  -	[{"File",
  -	  [
  -	  ]}
  -	],
  -    observer_wx:create_menus(Parent, MenuEntries).
  +    View = {"View", [#create_menu{id = ?ID_REFRESH_INTERVAL, text = "Graph Settings"}]},
  +    observer_wx:create_menus(Parent, [{"File", []}, View]).
  +
  +interval_dialog(Parent0, #ti{fetch=Fetch0, secs=Secs0}=Ti) ->
  +    Parent = observer_lib:get_wx_parent(Parent0),
  +    Dialog = wxDialog:new(Parent, ?wxID_ANY, "Load Chart Settings",
  +			  [{style, ?wxDEFAULT_DIALOG_STYLE bor
  +				?wxRESIZE_BORDER}]),
  +    {Sl1,FetchSl} = slider(Dialog, "Fetch (ms)", 10000 div Fetch0, 100, 10000),
  +    {Sl2, SecsSl} = slider(Dialog, "Length (min)", Secs0 div 60, 1, 10),
  +    TopSizer = wxBoxSizer:new(?wxVERTICAL),
  +    Flags = [{flag, ?wxEXPAND bor ?wxTOP bor ?wxLEFT bor ?wxRIGHT},
  +	     {border, 5}, {proportion, 1}],
  +    wxSizer:add(TopSizer, Sl1, Flags),
  +    wxSizer:add(TopSizer, Sl2, Flags),
  +    wxSizer:add(TopSizer, wxDialog:createButtonSizer(Dialog, ?wxOK bor ?wxCANCEL), Flags),
  +    wxWindow:setSizerAndFit(Dialog, TopSizer),
  +    wxSizer:setSizeHints(TopSizer, Dialog),
  +    Res = case wxDialog:showModal(Dialog) of
  +	      ?wxID_OK ->
  +		  Fetch = 10000 div wxSlider:getValue(FetchSl),
  +		  Secs = wxSlider:getValue(SecsSl) * 60,
  +		  Ti#ti{fetch=Fetch, secs=Secs, disp=10*?DISP_FREQ/Fetch};
  +	      ?wxID_CANCEL ->
  +		  Ti
  +	  end,
  +    wxDialog:destroy(Dialog),
  +    Res.
  +
  +slider(Parent, Str, Value, Min, Max) ->
  +    Sz = wxBoxSizer:new(?wxHORIZONTAL),
  +    Center = [{flag, ?wxALIGN_CENTER_VERTICAL}],
  +    wxSizer:add(Sz, wxStaticText:new(Parent, ?wxID_ANY, Str), [{proportion, 1}|Center]),
  +    Opt = [{style, ?wxSL_HORIZONTAL bor ?wxSL_LABELS}],
  +    Slider = wxSlider:new(Parent, ?wxID_ANY, Value, Min, Max, Opt),
  +    wxSizer:add(Sz, Slider, [{proportion, 2}|Center]),
  +    case Min > 1 of
  +	false ->
  +	    {Sz, Slider};
  +	true ->
  +	    CB = fun(#wx{event=Ev},_) -> step(Ev, Slider, Min) end,
  +	    wxSlider:connect(Slider, scroll_thumbtrack, [{callback, CB}]),
  +	    wxSlider:connect(Slider, scroll_changed, [{callback, CB}]),
  +	    {Sz, Slider}
  +    end.
  +
  +step(_Ev = #wxScroll{commandInt=Value}, Slider, Min) ->
  +    Val = Min * round(Value / Min),
  +    wxSlider:setValue(Slider, Val),
  +    ok.
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   collect_data(runq, {N, Q}) ->
  
positive.code: -define(BW, 5).
  -define(BH, 5).
  
  draw_borders(Type, Info, DC, {W,H}, {Max, Unit, MaxUnit},
  	     #paint{pen=Pen, pen2=Pen2, font=Font, small=Small}) ->
      Str1 = observer_lib:to_str(MaxUnit),
      Str2 = observer_lib:to_str(MaxUnit div 2),
  
negative.code:     error({unhandled_cast, Event}).
  %%%%%%%%%%
  handle_info(Stats = {stats, 1, _, _, _},
  	    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),
  	    erlang:send_after(1000 div ?DISP_FREQ, self(), {refresh, Next});
         true -> ignore
      end,
      {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),
      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 _:_ ->
  	    {noreply,restart_fetcher(Node, State)}
      end;
  
  handle_info(not_active, State = #state{appmon=_Pid}) ->
  