diff --git a/src/plugins/value/domains/traces/traces_domain.ml b/src/plugins/value/domains/traces/traces_domain.ml
index c5e1f29a9c3969c37a7e4cb3d94d9c5d2135525d..dde1607f54371381e3966af014a4e08109a7dbd5 100644
--- a/src/plugins/value/domains/traces/traces_domain.ml
+++ b/src/plugins/value/domains/traces/traces_domain.ml
@@ -1087,8 +1087,6 @@ module Internal = struct
 
 end
 
-module D = Domain_builder.Complete (Internal)
-
 let dummy_loc = Location.unknown
 
 let subst_in_full var_mapping =
@@ -1327,28 +1325,31 @@ let output_dot filename state =
   GraphDot.output_graph out (complete_graph (snd (Traces.get_current state)));
   close_out out
 
-
-let finish_computation () =
-  let return_stmt = Kernel_function.find_return (fst (Globals.entry_point ())) in
-  let return_exp = match return_stmt.Cil_types.skind with
-    | Cil_types.Return (oexp,_) -> oexp
-    | _ -> assert false in
-  let state = D.Store.get_stmt_state ~after:true return_stmt  in
-  let header fmt = Format.fprintf fmt "Trace domains:" in
-  let body = Bottom.pretty Traces.pretty in
-  Value_parameters.printf ~dkey:Internal.log_category ~header " @[%a@]" body state;
-  if Value_parameters.TracesProject.get () ||
-     not (Value_parameters.TracesDot.is_default ()) then
-    match state with
-    | `Bottom ->
-      Value_parameters.failure "The trace is Bottom can't generate code"
-    | `Value state when state ==Traces.top ->
-      Value_parameters.failure "The trace is TOP can't generate code"
-    | `Value state ->
-      if not (Value_parameters.TracesDot.is_default ())
-      then output_dot (Value_parameters.TracesDot.get ()) state;
-      if Value_parameters.TracesProject.get ()
-      then project_of_cfg return_exp state
+module D = struct
+  include Internal
+  module Store = Domain_store.Make(Internal)
+
+  let post_analysis state =
+    let return_stmt = Kernel_function.find_return (fst (Globals.entry_point ())) in
+    let return_exp = match return_stmt.Cil_types.skind with
+      | Cil_types.Return (oexp,_) -> oexp
+      | _ -> assert false in
+    let header fmt = Format.fprintf fmt "Trace domains:" in
+    let body = Bottom.pretty Traces.pretty in
+    Value_parameters.printf ~dkey:Internal.log_category ~header " @[%a@]" body state;
+    if Value_parameters.TracesProject.get () ||
+       not (Value_parameters.TracesDot.is_default ()) then
+      match state with
+      | `Bottom ->
+        Value_parameters.failure "The trace is Bottom can't generate code"
+      | `Value state when state ==Traces.top ->
+        Value_parameters.failure "The trace is TOP can't generate code"
+      | `Value state ->
+        if not (Value_parameters.TracesDot.is_default ())
+        then output_dot (Value_parameters.TracesDot.get ()) state;
+        if Value_parameters.TracesProject.get ()
+        then project_of_cfg return_exp state
+end
 
 
 (*
diff --git a/src/plugins/value/domains/traces/traces_domain.mli b/src/plugins/value/domains/traces/traces_domain.mli
index 02d986afe83d6ad5d65ee168b54e578cff20cfca..7a3ee6fce2c11ce77d23ebb8ded732154b1aa4d6 100644
--- a/src/plugins/value/domains/traces/traces_domain.mli
+++ b/src/plugins/value/domains/traces/traces_domain.mli
@@ -60,5 +60,3 @@ module D: Abstract_domain.Internal
   with type value = Cvalue.V.t
    and type location = Precise_locs.precise_location
    and type state = state
-
-val finish_computation: unit -> unit
diff --git a/src/plugins/value/register.ml b/src/plugins/value/register.ml
index b4ccc156516e3e0cfb9053233f72e2db1c9be09f..b7198f212195417767e50c26497c272c0026b8c5 100644
--- a/src/plugins/value/register.ml
+++ b/src/plugins/value/register.ml
@@ -36,11 +36,7 @@ let () = Value_parameters.ForceValues.set_output_dependencies [Db.Value.self]
 
 let main () =
   (* Value computations *)
-  if Value_parameters.ForceValues.get () then begin
-    !Db.Value.compute ();
-    if Value_parameters.TracesDomain.get () then
-      Traces_domain.finish_computation ()
-  end;
+  if Value_parameters.ForceValues.get () then !Db.Value.compute ();
   if Db.Value.is_computed () then Red_statuses.report ()
 
 let () = Db.Main.extend main
diff --git a/tests/value/traces/oracle/test1.err.oracle b/tests/value/traces/oracle/test1.err.oracle
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/tests/value/traces/oracle/test1.res.oracle b/tests/value/traces/oracle/test1.res.oracle
index 011f6645879b2f33794ba38f1a6e4aff01c49281..4f8d20b4edd5ef89a733ef48ea8940de161b45be 100644
--- a/tests/value/traces/oracle/test1.res.oracle
+++ b/tests/value/traces/oracle/test1.res.oracle
@@ -60,7 +60,9 @@ c -> 5
     42 -> Assign: g = tmp -> 45
     43 -> Assign: g = tmp -> 44
     44 -> join -> 46
-    45 -> join -> 46 ]} at 46
+    45 -> join -> 46
+    46 -> EnterScope: \result<main> -> 47
+    47 -> Assign: \result<main> = tmp -> 48 ]} at 48
 [from] Computing for function main
 [from] Done for function main
 [from] ====== DEPENDENCIES COMPUTED ======
@@ -119,7 +121,11 @@ int main(int c)
         i ++;
         /*@ assert ¬(i < 3);  */
         g = tmp;
-        __traces_domain_return = tmp;
+        {
+          int _result_main_;
+          _result_main_ = tmp;
+          __traces_domain_return = tmp;
+        }
       }
     }
     else {
@@ -138,7 +144,11 @@ int main(int c)
         i ++;
         /*@ assert ¬(i < 3);  */
         g = tmp;
-        __traces_domain_return = tmp;
+        {
+          int _result_main_;
+          _result_main_ = tmp;
+          __traces_domain_return = tmp;
+        }
       }
     }
   }
diff --git a/tests/value/traces/oracle/test2.err.oracle b/tests/value/traces/oracle/test2.err.oracle
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/tests/value/traces/oracle/test2.res.oracle b/tests/value/traces/oracle/test2.res.oracle
index 963ee92ec44b1f6a9de50e1a4d8d4929ce75452e..f86140502f69964568d9a673a99ab4b1f1d76402 100644
--- a/tests/value/traces/oracle/test2.res.oracle
+++ b/tests/value/traces/oracle/test2.res.oracle
@@ -79,7 +79,9 @@ c -> 1
     75 -> finalize_call: loop -> 76
     76 -> Assign: tmp = \result<loop> -> 77
     77 -> LeaveScope: \result<loop> -> 78
-    78 -> join -> 79 ]} at 79
+    78 -> join -> 79
+    79 -> EnterScope: \result<main> -> 80
+    80 -> Assign: \result<main> = tmp -> 81 ]} at 81
 [from] Computing for function loop
 [from] Done for function loop
 [from] Computing for function main
@@ -137,7 +139,11 @@ int main(int c)
             int _result_loop_;
             _result_loop_ = j;
             tmp = _result_loop_;
-            __traces_domain_return = tmp;
+            {
+              int _result_main_;
+              _result_main_ = tmp;
+              __traces_domain_return = tmp;
+            }
           }
         }
       }
@@ -164,7 +170,11 @@ int main(int c)
             int _result_loop_;
             _result_loop_ = j;
             tmp = _result_loop_;
-            __traces_domain_return = tmp;
+            {
+              int _result_main_;
+              _result_main_ = tmp;
+              __traces_domain_return = tmp;
+            }
           }
         }
       }
diff --git a/tests/value/traces/oracle/test3.err.oracle b/tests/value/traces/oracle/test3.err.oracle
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/tests/value/traces/oracle/test3.res.oracle b/tests/value/traces/oracle/test3.res.oracle
index f773988a12d52fc2da93b1de8d6c5128169f9529..d99315838e92aad39c6e71fdddf12bbbf71b6085 100644
--- a/tests/value/traces/oracle/test3.res.oracle
+++ b/tests/value/traces/oracle/test3.res.oracle
@@ -22,7 +22,9 @@ c -> 2
     5 -> Assign: tmp = 4 -> 6
     6 -> Assume: tmp true -> 7
     7 -> Assign: g = tmp -> 8
-    8 -> Assign: __retres = g + 1 -> 9 ]} at 9
+    8 -> Assign: __retres = g + 1 -> 9
+    9 -> EnterScope: \result<main> -> 10
+    10 -> Assign: \result<main> = __retres -> 11 ]} at 11
 [from] Computing for function main
 [from] Done for function main
 [from] ====== DEPENDENCIES COMPUTED ======
@@ -58,7 +60,11 @@ int main(int c)
       /*@ assert tmp ≢ 0;  */
       g = tmp;
       __retres = g + 1;
-      __traces_domain_return = __retres;
+      {
+        int _result_main_;
+        _result_main_ = __retres;
+        __traces_domain_return = __retres;
+      }
     }
   }
   return __traces_domain_return;
diff --git a/tests/value/traces/oracle/test4.err.oracle b/tests/value/traces/oracle/test4.err.oracle
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/tests/value/traces/oracle/test4.res.oracle b/tests/value/traces/oracle/test4.res.oracle
index 58d76d1237695a1dc97a49ef367b042c67f254ce..62f44d1b1031d4d20500bb91b2d631300bead971 100644
--- a/tests/value/traces/oracle/test4.res.oracle
+++ b/tests/value/traces/oracle/test4.res.oracle
@@ -260,7 +260,9 @@ c -> 1
     228 -> Assume: i < 100 false -> 229
     229 -> leave_loop -> 230
     230 -> LeaveScope: i -> 231
-    231 -> LeaveScope: i -> 232 ]} at 232
+    231 -> LeaveScope: i -> 232
+    232 -> EnterScope: \result<main> -> 233
+    233 -> Assign: \result<main> = tmp -> 234 ]} at 234
 [from] Computing for function main
 [from] Done for function main
 [from] ====== DEPENDENCIES COMPUTED ======
diff --git a/tests/value/traces/oracle/test5.err.oracle b/tests/value/traces/oracle/test5.err.oracle
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/tests/value/traces/oracle/test5.res.oracle b/tests/value/traces/oracle/test5.res.oracle
index 44b41790709aaacdddb7a1205dace5c258bcf91a..3e62ee426800f13b6834b0e94ff0c75ae1b13e18 100644
--- a/tests/value/traces/oracle/test5.res.oracle
+++ b/tests/value/traces/oracle/test5.res.oracle
@@ -563,7 +563,9 @@ c -> 1
     368 -> join -> 369
     369 -> join -> 370
     370 -> join -> 371
-    371 -> join -> 372 ]} at 372
+    371 -> join -> 372
+    372 -> EnterScope: \result<main> -> 373
+    373 -> Assign: \result<main> = tmp -> 374 ]} at 374
 [from] Computing for function main
 [from] Computing for function my_switch <-main
 [from] Done for function my_switch