anchor.diff:  clean_triggers(Triggers,IDs) ->
     lists:filter(fun({ID,_})->not lists:member(ID,IDs) end, Triggers).
   
  -check_jailed(LD,_) when ?max_jailed < length(LD#ld.jailed) ->
  +check_jailed(LD,_) when LD#ld.max_jailed < length(LD#ld.jailed) ->
     % we take a timeout when enough pids are jailed. conservative is good.
  -  erlang:start_timer(timeout(restart), self(), restart),
  +  erlang:start_timer(LD#ld.timeout_restart, self(), restart),
     stop_monitor(),
     flush(),
     throw(taking_timeout);
   check_jailed(LD,What) ->
     case lists:member(What, LD#ld.jailed) of
       false->
  -      erlang:start_timer(timeout(release), self(), {release, What}),
  +      erlang:start_timer(LD#ld.timeout_release, self(), {release, What}),
         LD#ld{jailed=[What|LD#ld.jailed]};
       true ->
         throw(is_jailed)
  
positive.code: -include("log.hrl").
  
  -record(ld,
          {jailed=[]                       %jailed pids
           ,subscribers=[]                 %where to send our reports
           ,triggers=default_triggers()    %{atom(Tag), fun/1->no|fun/1}
           ,prfState                       %prfTarg:subscribe return val
  
negative.code: 
  rec_info(ld) -> record_info(fields,ld);
  rec_info(_)  -> [].
  
  show_these_fields() ->
    [timeout_restart,max_jailed,timeout_release,jailed,subscribers,triggers].
  
  upgrade({ld,Js,Ss,Ts,PS,UD,PD,MD}) ->
    #ld{jailed=Js
        ,subscribers=Ss
        ,triggers=Ts
        ,prfState=PS
        ,userData=UD
        ,prfData=PD
        ,monData=MD
       }.
  
  %% constants
  
  