let remove_called_by proj call_id call_info =
    let rec remove called_by = match called_by with
      | [] -> []
      | e :: called_by -> if (M.same_ff_call call_id e) then called_by
        else e::(remove called_by)
    in
      SlicingParameters.debug ~level:2 "[Fct_Slice.CallInfo.remove_called_by] -> remove old_called";
      let old_called = get_f_called call_info in
      match old_called with
        | None -> ()
        | Some (T.CallSlice g) ->
            g.T.ff_called_by <- remove g.T.ff_called_by
        | Some (T.CallSrc (Some old_fi)) ->
            old_fi.T.f_called_by <- remove old_fi.T.f_called_by
        | Some (T.CallSrc (None)) ->
            let called = indirectely_called_src_functions call_id in
            let update kf =
              let old_fi = M.get_kf_fi proj kf in
                old_fi.T.f_called_by <- remove old_fi.T.f_called_by
            in List.iter update called