anchor.diff:  %% api
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   start() -> 
  -  case gen_serv:start(?MODULE) of
  -    {ok,Pid} ->  Pid;
  -    {error,{already_started,Pid}} -> Pid
  +  Init = fun(D) -> fun() -> init(D) end end,       % mmm.... haskell....
  +  {Pid,Ref} = erlang:spawn_monitor(Init(self())), 
  +  receive
  +    {Pid,ok} -> erlang:demonitor(Ref,[flush]),Pid;
  +    {'DOWN',Ref,_,Pid,OldPid} -> OldPid
     end.
   
   stop() -> 
  -  gen_serv:stop().
  +  send_to_wd(stop).
   
   add_proc_subscriber(Pid) when is_pid(Pid) ->
     case is_process_alive(Pid) of
  -    true -> send_to_wd({add_subscriber,{{pid,Pid},mk_send(Pid)}});
  +    true -> send_to_wd({add_subscriber,mk_send(Pid)});
       false-> {error,no_such_pid}
     end;
   add_proc_subscriber(Reg) when is_atom(Reg) ->
  -  send_to_wd({add_subscriber,{{Reg,node()},mk_send(Reg)}});
  +  send_to_wd({add_subscriber,mk_send(Reg)});
   add_proc_subscriber({Reg,Node}) when is_atom(Reg),is_atom(Node) ->
  -  send_to_wd({add_subscriber,{{Reg,Node},mk_send({Reg,Node})}}).
  +  send_to_wd({add_subscriber,mk_send({Reg,Node})}).
   
   %% E.g:  watchdog:add_send_subscriber(tcp,"localhost",56669,"I'm a Cookie").
   %% it's possible to add the same subscriber twice. this is a bug.
   add_send_subscriber(Proto,Host,Port,PassPhrase) ->
     case inet:gethostbyname(Host) of
       {ok,{hostent,Host,[],inet,4,_}} -> 
  -      Key = {Proto,{Host,Port}},
  -      send_to_wd({add_subscriber,{Key,mk_send(Proto,Host,Port,PassPhrase)}});
  +      send_to_wd({add_subscriber,mk_send(Proto,Host,Port,PassPhrase)});
       {ok,{hostent,G,[W],inet,4,_}} -> {error,{badhost,W,G}};
       {ok,R}                        -> {error,R};
       {error,R}                     -> {error,R}
     end.
   
   add_log_subscriber() ->
  -  try ?MODULE ! {add_subscriber,{log,mk_log(group_leader())}}, ok
  +  try ?MODULE ! {add_subscriber,mk_log(group_leader())}, ok
     catch _:R -> {error,R}
     end.
   
  
positive.code:   end.
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  init([]) ->
    LD = #ld{prfState=prfTarg:subscribe(node(),self(),[prfSys,prfPrc])},
    start_monitor(LD#ld.triggers),
    LD.
  
  % admin
  handle_info(list_triggers,LD) ->
    print_term(group_leader(),LD#ld.triggers),
    LD;
  handle_info({del_trigger,ID},LD) ->
    LD#ld{triggers=del_trigger(LD#ld.triggers,ID)};
  handle_info({add_trigger,{ID,Fun}},LD) ->
    LD#ld{triggers=add_trigger(LD#ld.triggers,ID,Fun)};
  handle_info(list_subscribers,LD) ->
    print_term(group_leader(),LD#ld.subscribers),
    LD;
  handle_info(clear_subscribers,LD) ->
    LD#ld{subscribers=[]};
  handle_info({add_subscriber,{Key,Sub}},LD) ->
    case lists:keysearch
    LD#ld{subscribers=[Sub|LD#ld.subscribers]};
  
  % events
  handle_info(trigger,LD) -> % fake trigger for debugging
    send_report(LD,test),
    LD;
  handle_info({user,Data},LD) -> % data from user
    NLD = LD#ld{userData=Data},
    try do_user(check_jailed(NLD,userData))
    catch _ -> NLD
    end;
  handle_info({{data,_},Data},LD) -> % data from prfTarg
    NLD = LD#ld{prfData=Data},
    try do_triggers(check_jailed(NLD,prfData))
    catch _ -> NLD
    end;
  handle_info({monitor,Pid,Tag,Data},LD) -> % data from system_monitor
    NLD = LD#ld{monData=[{tag,Tag},{pid,Pid},{data,Data}]},
    try do_mon(check_jailed(NLD,Pid))
    catch _ -> NLD
    end;
  
  % timeouts
  handle_info({timeout, _, restart},LD) -> % restarting after timeout
    start_monitor(LD#ld.triggers),
    LD#ld{jailed=[]};
  handle_info({timeout, _, {release, Pid}},LD) -> % release a pid from jail
    LD#ld{jailed = LD#ld.jailed--[Pid]};
  
  % "this shouldn't happen"(TM)
  handle_info(X,LD) ->
    ?log({unexpected_msg,X}),
    LD.
  
  start_monitor(Triggers) ->
    erlang:system_monitor(self(), sysmons(Triggers)).
  
negative.code: 	 ,monData			 %last system_monitor data
  	}).
  
  %% constants
  
  default_triggers() -> 
  