anchor.diff:      end;
   call([{CBId, Fun} | Rest], Config, Meta, CBs) ->
       try
  -	{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}))
  +        {_,Scope,ModState} = lists:keyfind(CBId, 1, CBs),
  +        {NewConf, NewCBInfo} =  Fun(ModState, Config, Meta),
  +        NewCalls = get_new_callbacks(NewConf, Fun),
  +        NewCBs = lists:keyreplace(CBId, 1, CBs, {CBId, Scope, NewCBInfo}),
  +        call(NewCalls  ++ Rest, remove(?config_name, NewConf), Meta,
  +             terminate_if_scope_ends(CBId, Meta, NewCBs))
       catch throw:{error_in_scb_call,Reason} ->
  -	    call(Rest, {fail, Reason}, Meta, CBs)
  +            call(Rest, {fail, Reason}, Meta,
  +                 terminate_if_scope_ends(CBId, Meta, CBs))
       end;
   call([], Config, _Meta, CBs) ->
  -    ct_util:save_suite_data_async(?config_name, CBs),
  +    save_suite_data_async(CBs),
       Config.
   
   remove(Key,List) when is_list(List) ->
  
positive.code: get_new_callbacks(_Config) ->
      [].
  
  get_callbacks() ->
      ct_util:read_suite_data(?config_name).
  
  
negative.code: 			       {error, Reason :: term()}.
  init(Opts) ->
      call([{CB, call_init, undefined} || CB <- get_new_callbacks(Opts)],
  	 ct_suite_callback_init_dummy, init, []),
      ok.
  		      
  
  