diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java
index 6a678961218941ac8173138135ff3def58671eba..23298349dbef5ced6e5b809b595f2f424cd3b9f1 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java
@@ -160,8 +160,14 @@ public class RASTUtils {
             RLanguage l = (RLanguage) value;
             return (RNode) NodeUtil.cloneNode((Node) l.getRep());
         } else if (value instanceof RPromise) {
-            // TODO: flatten nested promises?
-            return NodeUtil.cloneNode(((RNode) ((RPromise) value).getRep()).unwrap());
+            RPromise promise = (RPromise) value;
+            RNode promiseRep = ((RNode) ((RPromise) value).getRep()).unwrap();
+            if (promiseRep instanceof VarArgNode) {
+                VarArgNode varArgNode = (VarArgNode) promiseRep;
+                RPromise varArgPromise = varArgNode.executeNonEvaluated((VirtualFrame) promise.getFrame());
+                return createNodeForValue(varArgPromise);
+            }
+            return NodeUtil.cloneNode(promiseRep);
         } else {
             return ConstantNode.create(value);
         }