anchor.diff:  		 orelse element(1, Conf) =/= Key];
   remove(_, Else) ->
       Else.
  +
  +%% Translate scopes, i.e. init_per_group,group1 -> end_per_group,group1 etc
  +scope({pre_init_per_testcase, TC}) ->
  +    {post_end_per_testcase, TC};
  +scope({pre_init_per_group, GroupName}) ->
  +    {post_end_per_group, GroupName};
  +scope({post_init_per_group, GroupName}) ->
  +    {post_end_per_group, GroupName};
  +scope({pre_init_per_suite, SuiteName}) ->
  +    {post_end_per_suite, SuiteName};
  +scope({post_init_per_suite, SuiteName}) ->
  +    {post_end_per_suite, SuiteName};
  +scope(init) ->
  +    none.
  +
  +terminate_if_scope_ends(CBId, Function, CBs) ->
  +    case lists:keyfind(CBId, 1, CBs) of
  +        {CBId, Function, _ModState} = CB ->
  +            terminate([CB]),
  +            lists:keydelete(CBId, 1, CBs);
  +        _ ->
  +            CBs
  +    end.
   
   %% Fetch callback functions
   get_new_callbacks(Config, Fun) ->
  
positive.code: %% Generic call function
  call(Fun, Config, Meta) ->
      CBs = get_callbacks(),
      call([{CBId,Fun} || {CBId, _} <- CBs] ++ get_new_callbacks(Config, Fun),
  	     remove(?config_name,Config), Meta, CBs).
  
  call([{CB, call_init, NextFun} | Rest], Config, Meta, CBs) ->
      try
  	{Config, {NewId, {Mod,_State}} = 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) ->
  
negative.code: 			       {error, Reason :: term()}.
  init(Opts) ->
      call([{CB, call_init, undefined} || CB <- get_new_callbacks(Opts)],
  	 ct_suite_callback_init_dummy, init, []),
      ok.
  		      
  
  