let translate_in_marks pdg_called in_new_marks 
       ?(m2m=fun _ _ _ m -> Some m) other_rqs =
    let kf_called = Pdg.get_kf pdg_called in
    let translate pdg rqs call = 
      in_marks_to_caller pdg call (m2m (Some call) pdg) ~rqs in_new_marks
    in
    let build rqs (caller, _) =
      let pdg_caller = !Db.Pdg.get caller in
      let caller_rqs = 
        try 
        let call_stmts = !Db.Pdg.find_call_stmts ~caller kf_called in
          (* TODO : more intelligent merge ? *)
        let rqs = List.fold_left (translate pdg_caller) [] call_stmts in
          PdgMarks.SelList rqs
      with PdgTypes.Pdg.Top -> 
        let marks = List.fold_left (fun acc (_, m) -> m::acc) [] in_new_marks 
        in PdgMarks.SelTopMarks marks (* #345 *)
    in
      (pdg_caller, caller_rqs)::rqs
    in 
    let res = List.fold_left build other_rqs (!Db.Value.callers kf_called) in
      res