diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java
new file mode 100644
index 0000000000000000000000000000000000000000..5eafbc04ce58622d9989777137668b3345bc8047
--- /dev/null
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.truffle.r.engine.interop;
+
+import com.oracle.truffle.api.interop.CanResolve;
+import com.oracle.truffle.api.interop.MessageResolution;
+import com.oracle.truffle.api.interop.Resolve;
+import com.oracle.truffle.api.interop.TruffleObject;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.r.engine.TruffleRLanguage;
+import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames;
+
+@MessageResolution(receiverType = RArgsValuesAndNames.class, language = TruffleRLanguage.class)
+public class RArgsValuesAndNamesMR {
+    @Resolve(message = "IS_BOXED")
+    public abstract static class RArgsValuesAndNamesIsBoxedNode extends Node {
+        protected Object access(@SuppressWarnings("unused") RArgsValuesAndNames receiver) {
+            return false;
+        }
+    }
+
+    @Resolve(message = "HAS_SIZE")
+    public abstract static class RArgsValuesAndNamesHasSizeNode extends Node {
+        protected Object access(@SuppressWarnings("unused") RArgsValuesAndNames receiver) {
+            return true;
+        }
+    }
+
+    @Resolve(message = "IS_NULL")
+    public abstract static class RArgsValuesAndNamesIsNullNode extends Node {
+        protected Object access(@SuppressWarnings("unused") RArgsValuesAndNames receiver) {
+            return false;
+        }
+    }
+
+    @CanResolve
+    public abstract static class RArgsValuesAndNamesCheck extends Node {
+
+        protected static boolean test(TruffleObject receiver) {
+            return receiver instanceof RArgsValuesAndNames;
+        }
+    }
+}
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java
index 887d3a7741b8a3065872d7f9f2c8d2144f3d6b7b..0c7f6bcb205de1c27684541e1c9dac7b022d9148 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java
@@ -33,6 +33,7 @@ import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.conn.RConnection;
 import com.oracle.truffle.r.runtime.context.RContext;
 import com.oracle.truffle.r.runtime.context.RForeignAccessFactory;
+import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames;
 import com.oracle.truffle.r.runtime.data.RDouble;
 import com.oracle.truffle.r.runtime.data.RExternalPtr;
 import com.oracle.truffle.r.runtime.data.RFunction;
@@ -41,6 +42,7 @@ import com.oracle.truffle.r.runtime.data.RList;
 import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.data.RPairList;
 import com.oracle.truffle.r.runtime.data.RS4Object;
+import com.oracle.truffle.r.runtime.data.RPromise;
 import com.oracle.truffle.r.runtime.data.RSymbol;
 import com.oracle.truffle.r.runtime.data.RTruffleObject;
 import com.oracle.truffle.r.runtime.data.RUnboundValue;
@@ -110,6 +112,10 @@ public final class RForeignAccessFactoryImpl implements RForeignAccessFactory {
             return CaptureNamesImplMRForeign.ACCESS;
         } else if (obj instanceof RS4Object) {
             return RS4ObjectMRForeign.ACCESS;
+        } else if (obj instanceof RPromise) {
+            return RPromiseMRForeign.ACCESS;
+        } else if (obj instanceof RArgsValuesAndNames) {
+            return RArgsValuesAndNamesMRForeign.ACCESS;
         } else {
             if (obj instanceof RAbstractVector) {
                 return ForeignAccess.create(RAbstractVector.class, new RAbstractVectorAccessFactory());
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java
new file mode 100644
index 0000000000000000000000000000000000000000..257848ba0269263f98cacc9a04064c19f48d519a
--- /dev/null
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2016, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.truffle.r.engine.interop;
+
+import com.oracle.truffle.api.interop.CanResolve;
+import com.oracle.truffle.api.interop.MessageResolution;
+import com.oracle.truffle.api.interop.Resolve;
+import com.oracle.truffle.api.interop.TruffleObject;
+import com.oracle.truffle.api.nodes.Node;
+import com.oracle.truffle.r.engine.TruffleRLanguage;
+import com.oracle.truffle.r.runtime.data.RPromise;
+
+@MessageResolution(receiverType = RPromise.class, language = TruffleRLanguage.class)
+public class RPromiseMR {
+    @Resolve(message = "IS_BOXED")
+    public abstract static class RPromiseIsBoxedNode extends Node {
+        protected Object access(@SuppressWarnings("unused") RPromise receiver) {
+            return true;
+        }
+    }
+
+    @Resolve(message = "HAS_SIZE")
+    public abstract static class RPromiseHasSizeNode extends Node {
+        protected Object access(@SuppressWarnings("unused") RPromise receiver) {
+            return false;
+        }
+    }
+
+    @Resolve(message = "IS_NULL")
+    public abstract static class RPromiseIsNullNode extends Node {
+        protected Object access(@SuppressWarnings("unused") RPromise receiver) {
+            return false;
+        }
+    }
+
+    @Resolve(message = "UNBOX")
+    public abstract static class RPromiseUnboxNode extends Node {
+        protected Object access(RPromise receiver) {
+            return receiver.getValue();
+        }
+    }
+
+    @CanResolve
+    public abstract static class RPromiseCheck extends Node {
+
+        protected static boolean test(TruffleObject receiver) {
+            return receiver instanceof RPromise;
+        }
+    }
+}