let add_selection project set =
  let add_selection prev selection =
    let kf = !Slicing.Select.get_function selection in
    let r = match prev with
        None -> !Slicing.Request.apply_all_internal project ; Some (kf)
      | Some prev_kf -> if prev_kf == kf then prev else None
    and make_request slice =
      !Slicing.Request.add_slice_selection_internal project slice selection
    and slices =
      let slices = !Slicing.Slice.get_all project kf
      in if slices = [] then [!Slicing.Slice.create project kf] else slices
    in List.iter make_request slices ;
      r
  in ignore (Slicing.Select.fold_selects_internal add_selection None set)