diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArgumentNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArgumentNode.java
index d14ca391d6f5f2769f9e33b7aec0ee35340bb286..c61c9a292e7f8cfb6e1cfbc8b5d795c4cb6fc0a4 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArgumentNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArgumentNode.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -129,6 +129,10 @@ public final class AccessArgumentNode extends RNode {
     }
 
     private Object doArgument(VirtualFrame frame, Object arg) {
+        if (arg == null) {
+            CompilerDirectives.transferToInterpreter();
+            throw RInternalError.shouldNotReachHere("null argument in slot " + index + " of " + getRootNode());
+        }
         if (hasDefaultArg) {
             if (isMissingProfile.profile(arg == RMissing.instance) || isEmptyProfile.profile(arg == REmpty.instance)) {
                 return doArgumentInternal(frame);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseHelperNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseHelperNode.java
index 75bf2c983180f790109bdb9394a26579642198bb..5dfa52418410ca0d58b3cfb489bd1219dfa09f80 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseHelperNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseHelperNode.java
@@ -27,7 +27,6 @@ import com.oracle.truffle.api.CompilerAsserts;
 import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.api.frame.Frame;
 import com.oracle.truffle.api.frame.FrameSlot;
 import com.oracle.truffle.api.frame.FrameSlotKind;
 import com.oracle.truffle.api.frame.FrameSlotTypeException;
@@ -194,9 +193,7 @@ public class PromiseHelperNode extends RBaseNode {
             if (isInOriginFrame(frame, promise)) {
                 return promiseClosureCache.execute(frame, promise.getClosure());
             } else {
-                Frame promiseFrame = promiseFrameProfile.profile(promise.getFrame());
-                assert promiseFrame != null;
-                return promiseClosureCache.execute(wrapPromiseFrame(frame, promiseFrame), promise.getClosure());
+                return promiseClosureCache.execute(wrapPromiseFrame(frame, promiseFrameProfile.profile(promise.getFrame())), promise.getClosure());
             }
         } finally {
             promise.resetUnderEvaluation();
@@ -266,20 +263,16 @@ public class PromiseHelperNode extends RBaseNode {
             if (promise.isInOriginFrame(frame)) {
                 return promise.getClosure().eval(frame.materialize());
             } else {
-                Frame promiseFrame = promise.getFrame();
-                assert promiseFrame != null;
-
-                promiseFrame = wrapPromiseFrame(frame, promiseFrame);
-                return promise.getClosure().eval(promiseFrame.materialize());
+                return promise.getClosure().eval(wrapPromiseFrame(frame, promise.getFrame()));
             }
         } finally {
             promise.resetUnderEvaluation();
         }
     }
 
-    private static VirtualEvalFrame wrapPromiseFrame(VirtualFrame frame, Frame promiseFrame) {
-        return VirtualEvalFrame.create(promiseFrame.materialize(), RArguments.getFunction(promiseFrame),
-                        RCaller.createForPromise(RArguments.getCall(promiseFrame), frame));
+    private static VirtualEvalFrame wrapPromiseFrame(VirtualFrame frame, MaterializedFrame promiseFrame) {
+        assert promiseFrame != null;
+        return VirtualEvalFrame.create(promiseFrame, RArguments.getFunction(promiseFrame), RCaller.createForPromise(RArguments.getCall(promiseFrame), frame));
     }
 
     private static Object generateValueEagerSlowPath(VirtualFrame frame, int state, EagerPromiseBase promise) {