let change_call proj ff_marks call_id to_call =
    SlicingParameters.debug ~level:2 "[Fct_Slice.CallInfo.change_call]";
    let call_info = get_info_call call_id in
    let something_to_do = is_call_to_change call_info to_call in
    if something_to_do then
      begin
        SlicingParameters.debug ~level:2 "  -> remove old_called";
        let _ = remove_called_by proj call_id call_info in
        SlicingParameters.debug ~level:2 "  -> add new_called";
        let _ = match to_call with
        | None -> () (* nothing to do *)
        | Some f ->
            begin match f with
            | (T.CallSrc None->
                let called = indirectely_called_src_functions call_id in
                let update kf =
                  let fi = M.get_kf_fi proj kf in
                    fi.T.f_called_by <- call_id :: fi.T.f_called_by
                in List.iter update called
            | (T.CallSlice g) ->
                g.T.ff_called_by <- call_id :: g.T.ff_called_by
            | (T.CallSrc (Some fi)) ->
                fi.T.f_called_by <- call_id :: fi.T.f_called_by
            end
        in
        let _ff, call = call_id in
        let new_call_info = to_call in
        PdgIndex.FctIndex.add_info_call ff_marks call new_call_info true
      end