anchor.diff:  run_hooks([], _Args, first) ->
   	{error, not_handled};
   
  -run_hooks([HookRec | Tail], Args, Mode) ->
  +run_hooks([HookRec | Tail], Args, Acc) ->
   	#hook{mod = Mod, func = Func, info = Info} = HookRec,
  -	try erlang:apply(Mode, Func, [Info | Args]) of
  -		{ok, Val} when Mode == first ->
  +	try erlang:apply(Mod, Func, [Info | Args]) of
  +		{ok, Val} when Acc == first ->
   			{ok, Val};
   		{ok, Val} ->
  -			run_hooks(Tail, Args, [Val | Mode]);
  +			run_hooks(Tail, Args, [Val | Acc]);
   		Else ->
   			?debug("hook returned bad value:  ~p.  Hook:  ~p", [Else, HookRec]),
  -			run_hooks(Tail, Args, Mode)
  +			run_hooks(Tail, Args, Acc)
   	catch
   		What:Why ->
   			?notice("Hook errored:  ~p:~p.  Hook:  ~p", [What, Why, HookRec]),
  -			run_hooks(Tail, Args, Mode)
  -	end.
  +			run_hooks(Tail, Args, Acc)
  +	end;
  +
  +run_hooks([], _Args, Acc) ->
  +	{ok, Acc}.
  
positive.code: %% handle_info
  %% -------------------------------------------------------------------
  
  handle_info({'DOWN', _Monref, process, Pid, Reason}, State) ->
  	ets:delete(?MODULE, Pid),
  	{noreply, State};
  
  
negative.code: 		first -> first;
  		all -> []
  	end,
  	run_hooks(Hooks, Args, Acc).
  
  async_trigger_hooks(Hook, Args) ->
  	async_trigger_hooks(Hook, Args, first).
  