diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/REnvTruffleFrameAccess.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/REnvTruffleFrameAccess.java
index 265ffd98734ac95d1ebe04eae9b0941a045ed14f..a8ad8d02804d250a5e27a0d9b2084b52caf7c42c 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/REnvTruffleFrameAccess.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/REnvTruffleFrameAccess.java
@@ -70,6 +70,18 @@ public class REnvTruffleFrameAccess extends REnvFrameAccessBindingsAdapter {
         super.put(key, value);
         FrameDescriptor fd = frame.getFrameDescriptor();
         FrameSlot slot = fd.findFrameSlot(key);
+
+        // Handle RPromise: It cannot be cast to a int/double/byte!
+        if (value instanceof RPromise) {
+            if (slot == null) {
+                slot = fd.addFrameSlot(key, FrameSlotKind.Object);
+            }
+            // Overwrites former FrameSlotKind
+            frame.setObject(slot, value);
+            return;
+        }
+
+        // Handle all other values
         FrameSlotKind slotKind = null;
         if (slot == null) {
             slotKind = RRuntime.getSlotKind(value);