anchor.diff:  tracer() -> tracer(node()).
   tracer(Nodes) -> tracer(Nodes,[]).
   tracer(Nodes,Opt) ->
  -    start(),
  +    {PI,Client,Traci} = opt(Opt),
  +    %%We use initial Traci as SessionInfo for loop/2
  +    start(Traci),
       store(tracer,[Nodes,Opt]),
  -    {PI,Client,Traci} = opt(Opt),
       do_tracer(Nodes,PI,Client,Traci).
   
   do_tracer(Nodes0,PI,Client,Traci) ->
  
positive.code: 
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %%% Process implementation
  start() ->
      case whereis(?MODULE) of
  	undefined ->
  	    Parent = self(),
  	    Pid = spawn(fun() -> init(Parent) end),
  	    receive {started,Pid} -> ok end;
  	Pid when is_pid(Pid) ->
  	    ok
      end.
  
  
  init(Parent) ->
      register(?MODULE,self()),
      ets:new(?history_table,[ordered_set,named_table,public]),
      Parent ! {started,self()},
      loop(dict:new()).
  
  loop(NodeInfo) ->
      receive 
  	{init_node,Node,MetaFile,PI,Traci} ->
  	    erlang:monitor_node(Node,true),
  
negative.code:     opt(O,{PI,Client,Traci});
  opt([{handler,Handler}|O],{PI,Client,Traci}) ->
      opt(O,{PI,Client,[{handler,Handler}|Traci]});
  opt([{timer, {MSec, StopOpts}}|O],{PI,Client,Traci}) ->
      opt(O,{PI,Client,[{timer,{MSec, StopOpts}}|Traci]});
  opt([{timer, MSec}|O],{PI,Client,Traci}) ->
      opt(O,{PI,Client,[{timer,{MSec, []}}|Traci]});
  opt([],Opt) ->
      Opt.
  
  