anchor.diff:  -spec init(State :: term()) -> ok |
   			       {error, Reason :: term()}.
   init(Opts) ->
  -    call(get_new_callbacks(Opts), fun call_init/2, ok).
  +    call([{CB, call_init, undefined} || CB <- get_new_callbacks(Opts)],
  +	 ct_suite_callback_init_dummy, []),
  +    ok.
   		      
   
   %% @doc Called after all suites are done.
  
positive.code: call_init(Mod, Config) when is_atom(Mod) ->
      call_init({Mod, undefined}, Config);
  call_init({Mod, State}, Config) ->
      {{Mod, running, Mod:init(State)}, Config};
  call_init({Mod, running, State}, Config) ->
      {{Mod, running, State}, Config}.
  
  %% Generic call function
  call(Fun, Config) ->
      call(get_callbacks(), Fun, Config).
  
  call(CBs, Fun, Config) ->
      call(CBs, Fun, Config, []).
      
  call([CB | Rest], Fun, Config, NewCBs) ->
      {NewCB, NewConf} = Fun(CB,Config),
      call(Rest, Fun, NewConf, [NewCB | NewCBs]);
  call([], _Fun, Config, NewCBs) ->
      ct_util:save_suite_data_async(?config_name, NewCBs),
      Config.
  
  
  remove(Key,List) ->
      [Conf || Conf <- List,
  	     element(1,Conf) =/= Key].
  
negative.code:     {auto_skip, Reason :: term()} |
      {error, Reason :: term()}.
  init_tc(Mod, init_per_suite, Config) ->
      call(fun call_pre_init_suite/2, Config);
  init_tc(_, _, Config) ->
      Config.
  
  %% @doc Called as each test case is completed. This includes all configuration
  %% tests.
  -spec end_tc(Mod :: atom(),
  	     Func :: atom(),
  	     CallConfig :: proplist(),
  	     Result :: term()) ->
      NewConfig :: proplist() |
      {skip, Reason :: term()} |
      {auto_skip, Reason :: term()} |
      {error, Reason :: term()} |
      ok.
  end_tc(Mod, init_per_suite, _, Result) ->
      
      NewConfig = call(fun call_post_init_suite/2, Result),
      
      NewConfig;
  end_tc(_, _, _, Result) ->
      Result.
  
  
  %% Iternal Functions
  get_new_callbacks(Config, Fun) ->
      lists:foldl(fun(NewCB, Acc) ->
  			[{NewCB, call_init, Fun} | Acc]
  		end, [], get_new_callbacks(Config)).
  
  get_new_callbacks(Config) when is_list(Config) ->
      lists:flatmap(fun({?config_name, CallbackConfigs}) ->
  			  CallbackConfigs;
  		     (_) ->
  			  []
  		  end, Config);
  get_new_callbacks(_Config) ->
      [].
  
  get_callbacks() ->
      ct_util:read_suite_data(?config_name).
  