diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/fastpaths/IsElementFastPath.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/fastpaths/IsElementFastPath.java
index 01be68a9120f2a3f3736aa1a3299477f2a2115f6..6a5a881ad2e592db19a7de720e4e0fdcc4c16a4a 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/fastpaths/IsElementFastPath.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/fastpaths/IsElementFastPath.java
@@ -29,6 +29,7 @@ import com.oracle.truffle.api.profiles.BranchProfile;
 import com.oracle.truffle.api.profiles.ConditionProfile;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.VisibilityController;
+import com.oracle.truffle.r.runtime.context.RContext;
 import com.oracle.truffle.r.runtime.data.RIntSequence;
 import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
@@ -42,7 +43,7 @@ public abstract class IsElementFastPath extends RFastPathNode implements Visibil
     protected Byte iselementOne(RAbstractStringVector el, RAbstractStringVector set, //
                     @Cached("create()") BranchProfile trueProfile, //
                     @Cached("create()") BranchProfile falseProfile) {
-        controlVisibility();
+        RContext.getInstance().setVisible(true);
         String element = el.getDataAt(0);
         int length = set.getLength();
         for (int i = 0; i < length; i++) {
@@ -57,7 +58,7 @@ public abstract class IsElementFastPath extends RFastPathNode implements Visibil
 
     @Specialization
     protected Byte iselementOne(double el, double set) {
-        controlVisibility();
+        RContext.getInstance().setVisible(true);
         return RRuntime.asLogical(el == set);
     }
 
@@ -65,7 +66,7 @@ public abstract class IsElementFastPath extends RFastPathNode implements Visibil
     protected Byte iselementOne(RAbstractDoubleVector el, RAbstractDoubleVector set, //
                     @Cached("create()") BranchProfile trueProfile, //
                     @Cached("create()") BranchProfile falseProfile) {
-        controlVisibility();
+        RContext.getInstance().setVisible(true);
         double element = el.getDataAt(0);
         int length = set.getLength();
         for (int i = 0; i < length; i++) {
@@ -81,7 +82,7 @@ public abstract class IsElementFastPath extends RFastPathNode implements Visibil
     @Specialization(guards = "el.getLength() == 1")
     protected Byte isElementOneSequence(RAbstractDoubleVector el, RIntSequence set, //
                     @Cached("createBinaryProfile()") ConditionProfile profile) {
-        controlVisibility();
+        RContext.getInstance().setVisible(true);
         double element = el.getDataAt(0);
         return RRuntime.asLogical(profile.profile(element >= set.getStart() && element <= set.getEnd()));
     }
@@ -91,7 +92,7 @@ public abstract class IsElementFastPath extends RFastPathNode implements Visibil
                     @Cached("create()") NACheck na, //
                     @Cached("create()") BranchProfile trueProfile, //
                     @Cached("create()") BranchProfile falseProfile) {
-        controlVisibility();
+        RContext.getInstance().setVisible(true);
         double element = el.getDataAt(0);
         int length = set.getLength();
         na.enable(set);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ConstantNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ConstantNode.java
index ae23ed865a3cd740638ecaa3feda691e0bcc2cd3..88862767187928c60568ee0f94894ddb55823c2d 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ConstantNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ConstantNode.java
@@ -28,6 +28,7 @@ import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.RSerialize;
 import com.oracle.truffle.r.runtime.VisibilityController;
+import com.oracle.truffle.r.runtime.context.RContext;
 import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames;
 import com.oracle.truffle.r.runtime.data.RMissing;
 import com.oracle.truffle.r.runtime.data.RPromise;
@@ -62,7 +63,7 @@ public abstract class ConstantNode extends RSourceSectionNode implements RSyntax
 
     @Override
     public final Object execute(VirtualFrame frame) {
-        controlVisibility();
+        RContext.getInstance().setVisible(true);
         return getValue();
     }
 
@@ -119,7 +120,7 @@ public abstract class ConstantNode extends RSourceSectionNode implements RSyntax
 
         @Override
         public double executeDouble(VirtualFrame frame) {
-            controlVisibility();
+            RContext.getInstance().setVisible(true);
             return doubleValue;
         }
     }
@@ -142,7 +143,7 @@ public abstract class ConstantNode extends RSourceSectionNode implements RSyntax
 
         @Override
         public byte executeByte(VirtualFrame frame) {
-            controlVisibility();
+            RContext.getInstance().setVisible(true);
             return logicalValue;
         }
     }
@@ -165,7 +166,7 @@ public abstract class ConstantNode extends RSourceSectionNode implements RSyntax
 
         @Override
         public int executeInteger(VirtualFrame frame) {
-            controlVisibility();
+            RContext.getInstance().setVisible(true);
             return intValue;
         }
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ReadVariadicComponentNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ReadVariadicComponentNode.java
index 3c16440037b5a4fbd62c82f9d36bdddc612c1049..6df33e30b46bbcb214e9e41a868946ad55e00423 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ReadVariadicComponentNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ReadVariadicComponentNode.java
@@ -33,6 +33,7 @@ import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.VisibilityController;
+import com.oracle.truffle.r.runtime.context.RContext;
 import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames;
 import com.oracle.truffle.r.runtime.data.RMissing;
 import com.oracle.truffle.r.runtime.data.RPromise;
@@ -62,7 +63,7 @@ public class ReadVariadicComponentNode extends RSourceSectionNode implements RSy
 
     @Override
     public Object execute(VirtualFrame frame) {
-        controlVisibility();
+        RContext.getInstance().setVisible(true);
 
         Object args = lookup.execute(frame);
         if (args == null) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/RemoveAndAnswerNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/RemoveAndAnswerNode.java
index 67055dcc472e92cd13f779510e2aa6a993994aec..3d7a39838b550f50ff798218406dd5039c3e9b6e 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/RemoveAndAnswerNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/RemoveAndAnswerNode.java
@@ -32,6 +32,7 @@ import com.oracle.truffle.r.nodes.access.RemoveAndAnswerNodeFactory.RemoveAndAns
 import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.VisibilityController;
+import com.oracle.truffle.r.runtime.context.RContext;
 import com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor;
 import com.oracle.truffle.r.runtime.nodes.RNode;
 
@@ -85,11 +86,6 @@ public abstract class RemoveAndAnswerNode extends RNode {
             this.slot = slot;
         }
 
-        @Override
-        public boolean getVisibility() {
-            return false;
-        }
-
         protected boolean isObject(VirtualFrame frame) {
             return frame.isObject(slot);
         }
@@ -108,7 +104,7 @@ public abstract class RemoveAndAnswerNode extends RNode {
 
         @Specialization(guards = "isObject(frame)")
         protected Object doObject(VirtualFrame frame) {
-            controlVisibility();
+            RContext.getInstance().setVisible(false);
             Object result;
             try {
                 result = frame.getObject(slot);
@@ -123,7 +119,7 @@ public abstract class RemoveAndAnswerNode extends RNode {
 
         @Specialization(guards = "isInt(frame)")
         protected int doInt(VirtualFrame frame) {
-            controlVisibility();
+            RContext.getInstance().setVisible(false);
             int result;
             try {
                 result = frame.getInt(slot);
@@ -138,7 +134,7 @@ public abstract class RemoveAndAnswerNode extends RNode {
 
         @Specialization(guards = "isDouble(frame)")
         protected double doDouble(VirtualFrame frame) {
-            controlVisibility();
+            RContext.getInstance().setVisible(false);
             double result;
             try {
                 result = frame.getDouble(slot);
@@ -153,7 +149,7 @@ public abstract class RemoveAndAnswerNode extends RNode {
 
         @Specialization(guards = "isByte(frame)")
         protected byte doByte(VirtualFrame frame) {
-            controlVisibility();
+            RContext.getInstance().setVisible(false);
             byte result;
             try {
                 result = frame.getByte(slot);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java
index 1bf4c9fcea7536b40a4f6823587a97eaded66f77..283c3c5eaa8a2a03f8e7160cf1aca08d445359fd 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java
@@ -59,6 +59,7 @@ import com.oracle.truffle.r.runtime.RSerialize;
 import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.StableValue;
 import com.oracle.truffle.r.runtime.VisibilityController;
+import com.oracle.truffle.r.runtime.context.RContext;
 import com.oracle.truffle.r.runtime.data.RArgsValuesAndNames;
 import com.oracle.truffle.r.runtime.data.RFunction;
 import com.oracle.truffle.r.runtime.data.RMissing;
@@ -197,7 +198,7 @@ public final class ReadVariableNode extends RSourceSectionNode implements RSynta
 
     private Object executeInternal(VirtualFrame frame, Frame variableFrame) {
         if (kind != ReadKind.Silent) {
-            controlVisibility();
+            RContext.getInstance().setVisible(true);
         }
 
         Object result;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/BlockNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/BlockNode.java
index a153a33b363133a7b4a7b240049c00b35132e476..881151eff48e0ee0624c0ee5b7cd0b8fa8bb6ae1 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/BlockNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/BlockNode.java
@@ -30,6 +30,7 @@ import com.oracle.truffle.r.nodes.RASTUtils;
 import com.oracle.truffle.r.runtime.ArgumentsSignature;
 import com.oracle.truffle.r.runtime.RSerialize;
 import com.oracle.truffle.r.runtime.VisibilityController;
+import com.oracle.truffle.r.runtime.context.RContext;
 import com.oracle.truffle.r.runtime.data.RNull;
 import com.oracle.truffle.r.runtime.env.REnvironment;
 import com.oracle.truffle.r.runtime.gnur.SEXPTYPE;
@@ -61,7 +62,7 @@ public final class BlockNode extends RSourceSectionNode implements RSyntaxNode,
     @Override
     @ExplodeLoop
     public Object execute(VirtualFrame frame) {
-        controlVisibility();
+        RContext.getInstance().setVisible(true);
         Object lastResult = RNull.instance;
         for (int i = 0; i < sequence.length; i++) {
             lastResult = sequence[i].execute(frame);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/UseMethodInternalNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/UseMethodInternalNode.java
index 4eeeb55e4fcaa10a1756273493decc890a0b9322..33503be2f0d16e7e3adc83bb901b9b8e9a67cac5 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/UseMethodInternalNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/UseMethodInternalNode.java
@@ -18,6 +18,7 @@ import com.oracle.truffle.r.runtime.FastROptions;
 import com.oracle.truffle.r.runtime.RArguments.S3Args;
 import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.VisibilityController;
+import com.oracle.truffle.r.runtime.context.RContext;
 import com.oracle.truffle.r.runtime.data.RStringVector;
 import com.oracle.truffle.r.runtime.nodes.RNode;
 
@@ -39,7 +40,7 @@ public final class UseMethodInternalNode extends RNode implements VisibilityCont
     }
 
     public Object execute(VirtualFrame frame, RStringVector type, Object[] arguments) {
-        controlVisibility();
+        RContext.getInstance().setVisible(true);
         Result lookupResult = lookup.execute(frame, generic, type, null, frame.materialize(), null);
         if (wrap) {
             assert arguments != null;