anchor.diff:  -spec init(State :: term()) -> ok |
   			       {error, Reason :: term()}.
   init(Opts) ->
  -    call([{Hook, call_id, undefined} || Hook <- get_new_hooks(Opts)],
  -	 ok, init, []).
  +    call(get_new_hooks(Opts, undefined), ok, init, []).
   		      
   
   %% @doc Called after all suites are done.
   -spec terminate(Hooks :: term()) ->
       ok.
   terminate(Hooks) ->
  -    call([{HookId, fun call_terminate/3} || {HookId,_,_} <- Hooks],
  +    call([{HookId, fun call_terminate/3}
  +	  || #ct_hook_config{id = HookId} <- Hooks],
   	 ct_hooks_terminate_dummy, terminate, Hooks),
       ok.
   
  
positive.code: 
  call([{Hook, call_id, NextFun} | Rest], Config, Meta, Hooks) ->
      try
  	{Config, {NewId, _, _} = NewHook} = call_id(Hook, Config, Meta),
  	{NewHooks, NewRest} = 
  	    case lists:keyfind(NewId, 1, Hooks) of
  		false when NextFun =:= undefined ->
  		    {Hooks ++ [NewHook],
  		     [{NewId, fun call_init/3} | Rest]};
  
negative.code:     ct_util:save_suite_data_async(?config_name, Hooks).
  
  get_hooks() ->
      lists:keysort(#ct_hook_config.prio,ct_util:read_suite_data(?config_name)).
  
  catch_apply(M,F,A, Default) ->
      try
  