diff --git a/src/plugins/value/engine/trace_partitioning.ml b/src/plugins/value/engine/trace_partitioning.ml
index 063afad6c95b55cd1b1031557827ab38562b2ee6..336e75f30ac705dc23c7a9f9fe167c939856666b 100644
--- a/src/plugins/value/engine/trace_partitioning.ml
+++ b/src/plugins/value/engine/trace_partitioning.ml
@@ -203,13 +203,13 @@ struct
     flow
 
   let fill ~(into : tank) (flow : flow) : unit =
-    let erase _key dest src =
-      if Extlib.has_some src
-      then src
-      else dest
-    in
     let new_states = Flow.to_partition flow in
-    into.tank_states <- Partition.merge erase into.tank_states new_states
+    let join _key dest src = match dest, src with
+      | Some dest, Some src -> Some (Domain.join dest src)
+      | Some v, None | None, Some v -> Some v
+      | None, None -> None
+    in
+    into.tank_states <- Partition.merge join into.tank_states new_states
 
   let transfer = Flow.transfer_states