method remove_key_value key value =
    let old_values_for_key = self#lookup key in
    let new_values_for_key =
      List.filter
        (fun a_value -> not (value = a_value))
        old_values_for_key in
    let new_bindings_for_key =
      List.rev (* We reverse as we want to keep the previous element 'priority' *)
        (List.map
           (fun a_value -> key, a_value)
           new_values_for_key) in
    self#remove ~all:true key;
    List.iter
      (fun (new_key, new_value) ->
        self#add new_key new_value)
      new_bindings_for_key