anchor.diff:         ordsets:from_list([Fun || {Fun, _Arity} <- AllFuns])}
     end.
   
  -get_fun_types_from_plt(FunList, State) ->
  -  get_fun_types_from_plt(FunList, State, dict:new()).
  -
  -get_fun_types_from_plt([{FunLabel, Arity}|Left], State, Map) ->
  -  Type = lookup_fun_type(FunLabel, Arity, State),
  -  get_fun_types_from_plt(Left, State, dict:store(FunLabel, Type, Map));
  -get_fun_types_from_plt([], _State, Map) ->
  +get_fun_types_from_plt(FunList, Callgraph, Plt) ->
  +  get_fun_types_from_plt(FunList, Callgraph, Plt, dict:new()).
  +
  +get_fun_types_from_plt([{FunLabel, Arity}|Left], Callgraph, Plt, Map) ->
  +  Type = lookup_fun_type(FunLabel, Arity, Callgraph, Plt),
  +  get_fun_types_from_plt(Left, Callgraph, Plt, dict:store(FunLabel, Type, Map));
  +get_fun_types_from_plt([], _Callgraph, _Plt, Map) ->
     Map.
   
   collect_fun_info(Trees) ->
  
positive.code:   Contracts3 = orddict:from_list(Contracts2),
    NextLabel = dialyzer_codeserver:get_next_core_label(Codeserver),
    {SuccTypes, PltContracts, NotFixpoint} = 
      find_succ_types_for_scc(SCC_Info, Contracts3, NextLabel, State),
    State1 = insert_into_plt(SuccTypes, State),
    ContrPlt = dialyzer_plt:insert_contract_list(State1#st.plt, PltContracts),
    {State1#st{plt = ContrPlt}, NotFixpoint}.
  
  find_succ_types_for_scc(SCC_Info, Contracts, NextLabel,
  			#st{callgraph = Callgraph, plt = Plt} = State) ->
    %% Assume that the PLT contains the current propagated types
    AllFuns = collect_fun_info([Fun || {_MFA, {_Var, Fun}, _Rec} <- SCC_Info]),
    PropTypes = get_fun_types_from_plt(AllFuns, State),
    FunTypes = dialyzer_typesig:analyze_scc(SCC_Info, NextLabel, 
  					  Callgraph, Plt, PropTypes),
    AllFunSet = sets:from_list([X || {X, _} <- AllFuns]),
  
negative.code: collect_fun_info([], List) ->
    List.
  
  lookup_fun_type(Label, Arity, Callgraph, Plt) ->
    ID = lookup_name(Label, Callgraph),
    case dialyzer_plt:lookup(Plt, ID) of
      none -> erl_types:t_fun(Arity, erl_types:t_any());
  