anchor.diff:  
   get_callbacks() ->
       ct_util:read_suite_data(?config_name).
  +
  +catch_apply(M,F,A, Default) ->
  +    try
  +	apply(M,F,A)
  +    catch error:undef ->
  +	    case erlang:get_stacktrace() of
  +		[{M,F,A}|_] ->
  +		    Default;
  +		_Else ->
  +		    error(undef,[M,F,A])
  +	    end
  +    end.
  
positive.code: 	     remove(?config_name,Config), Meta, CBs).
  
  call([{CB, call_init, NextFun} | Rest], Config, Meta, CBs) ->
      {Config, {NewId, _} = NewCB} = call_init(CB, Config, Meta),
      {NewCBs, NewRest} = case proplists:get_value(NewId, CBs, NextFun) of
  			    undefined -> {CBs ++ [NewCB],Rest};
  			    ExistingCB when is_tuple(ExistingCB) -> {CBs, Rest};
  			    _ -> {CBs ++ [NewCB],[{NewId, NextFun} | Rest]}
  			end,
      call(NewRest, Config, Meta, NewCBs);
  call([{CBId, Fun} | Rest], Config, Meta, CBs) ->
      {NewConf, NewCBInfo} =  Fun(proplists:get_value(CBId, CBs), Config, Meta),
      NewCalls = get_new_callbacks(NewConf, Fun),
      call(NewCalls  ++ Rest, remove(?config_name, NewConf), Meta,
  	 lists:keyreplace(CBId, 1, CBs, {CBId, NewCBInfo}));
  call([], Config, _Meta, CBs) ->
      ct_util:save_suite_data_async(?config_name, CBs),
      Config.
  
negative.code: call_init({Mod, State}, Config, _) ->
      {Id, NewState} = Mod:init(State),
      {Config, {Id, {Mod, NewState}}}.
  	
  call_terminate({Mod, State}, _, _) ->
      Mod:terminate(State),
      {[],{Mod,State}}.
  
  call_generic({Mod, State}, Config, {Function, undefined}) ->
      {NewConf, NewState} = catch_apply(Mod,Function,[Config, State],
  				      {Config, State}),
      {NewConf, {Mod, NewState}};
  call_generic({Mod, State}, Config, {Function, Tag}) ->
      {NewConf, NewState} = catch_apply(Mod,Function,[Tag, Config, State],
  				     {Config,State}),
      {NewConf, {Mod, NewState}}.
  
  %% Generic call function
  