diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallSpecialNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallSpecialNode.java
index 62719f6b37827d96d0be5aee52fd553dd368bb8c..7e3839715dd941a2432b52db3d6a95aeec6d207e 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallSpecialNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallSpecialNode.java
@@ -26,6 +26,7 @@ import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.profiles.ConditionProfile;
+import com.oracle.truffle.api.profiles.ValueProfile;
 import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.r.nodes.access.variables.LocalReadVariableNode;
 import com.oracle.truffle.r.runtime.ArgumentsSignature;
@@ -48,6 +49,7 @@ final class PeekLocalVariableNode extends RNode {
     @Child private LocalReadVariableNode read;
 
     private final ConditionProfile isPromiseProfile = ConditionProfile.createBinaryProfile();
+    private final ValueProfile valueProfile = ValueProfile.createClassProfile();
 
     PeekLocalVariableNode(String name) {
         this.read = LocalReadVariableNode.create(name, false);
@@ -64,9 +66,9 @@ final class PeekLocalVariableNode extends RNode {
             if (!promise.isEvaluated()) {
                 throw RSpecialFactory.throwFullCallNeeded();
             }
-            return promise.getValue();
+            return valueProfile.profile(promise.getValue());
         }
-        return value;
+        return valueProfile.profile(value);
     }
 }