diff --git a/heap_lang/tactics.v b/heap_lang/tactics.v
index 336f4043f8888ba97b9a8cdffbc1e07bd3f3058b..4436ec42949735812bd09f2690c24aa10d8455ab 100644
--- a/heap_lang/tactics.v
+++ b/heap_lang/tactics.v
@@ -25,13 +25,13 @@ Ltac reshape_val e tac :=
   let rec go e :=
   match e with
   | of_val ?v => v
-  | wexpr' ?e => reshape_val e tac
+  | wexpr' ?e => go e
   | Rec ?f ?x ?e => constr:(RecV f x e)
   | Lit ?l => constr:(LitV l)
   | Pair ?e1 ?e2 =>
-    let v1 := reshape_val e1 in let v2 := reshape_val e2 in constr:(PairV v1 v2)
-  | InjL ?e => let v := reshape_val e in constr:(InjLV v)
-  | InjR ?e => let v := reshape_val e in constr:(InjRV v)
+    let v1 := go e1 in let v2 := go e2 in constr:(PairV v1 v2)
+  | InjL ?e => let v := go e in constr:(InjLV v)
+  | InjR ?e => let v := go e in constr:(InjRV v)
   end in let v := go e in first [tac v | fail 2].
 
 Ltac reshape_expr e tac :=