diff --git a/src/plugins/value/Eva.mli b/src/plugins/value/Eva.mli
index 1c4b9b634e0cdd9ea1211a770d700d4c8186835e..33ff0496971c28ca22f56a4f9d2be0b4f147f483 100644
--- a/src/plugins/value/Eva.mli
+++ b/src/plugins/value/Eva.mli
@@ -84,7 +84,8 @@ module Results: sig
   (* Callers / callsites *)
   val callers : Cil_types.kernel_function -> Cil_types.kernel_function list
   val callsites : Cil_types.kernel_function -> Cil_types.stmt list
-  
+  val callsites_per_caller : Cil_types.kernel_function ->
+      (Cil_types.kernel_function * Cil_types.stmt list) list
 end
 
 module Value_results: sig
diff --git a/src/plugins/value/utils/results.ml b/src/plugins/value/utils/results.ml
index 40c3097ace67488459b6438a9ae62376ac54aec0..9cb35d245f0a712d43f3ef2b53e281c8fa642686 100644
--- a/src/plugins/value/utils/results.ml
+++ b/src/plugins/value/utils/results.ml
@@ -685,10 +685,23 @@ let callers kf =
   at_start_of kf |> callstacks |>
   List.filter_map f |> List.sort_uniq Kernel_function.compare
 
+let uniq_sites = List.sort_uniq Cil_datatype.Stmt.compare
+
 let callsites kf =
   let f = function
     | [] | (_,Cil_types.Kglobal) :: _ -> None
     | (_,Kstmt stmt) :: _-> Some stmt
   in
   at_start_of kf |> callstacks |>
-  List.filter_map f |> List.sort_uniq Cil_datatype.Stmt.compare
+  List.filter_map f |> uniq_sites
+
+let callsites_per_caller kf =
+  let module Map = Kernel_function.Map in
+  let f acc = function
+    | [] | (_,Cil_types.Kglobal) :: _ -> acc
+    | (kf,Kstmt stmt) :: _-> 
+      Map.update kf (fun old -> Some (stmt :: Option.value ~default:[] old)) acc
+  in
+  at_start_of kf |> callstacks |>
+  List.fold_left f Map.empty |> Map.to_seq |> List.of_seq |>
+  List.map (fun (kf,sites) -> kf, uniq_sites sites)
diff --git a/src/plugins/value/utils/results.mli b/src/plugins/value/utils/results.mli
index 051d79b605a8185b5706d82325ee0291c0c59cd2..3d13c3c74d0172125fef7e3bd2a15a5831536a50 100644
--- a/src/plugins/value/utils/results.mli
+++ b/src/plugins/value/utils/results.mli
@@ -104,5 +104,6 @@ val is_reachable : Cil_types.stmt -> bool (* reachable by the analysis, not by t
 (* Callers / callsites *)
 val callers : Cil_types.kernel_function -> Cil_types.kernel_function list
 val callsites : Cil_types.kernel_function -> Cil_types.stmt list
-
+val callsites_per_caller : Cil_types.kernel_function ->
+    (Cil_types.kernel_function * Cil_types.stmt list) list
 [@@@ api_end]