diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RInvisibleBuiltinNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RInvisibleBuiltinNode.java
new file mode 100644
index 0000000000000000000000000000000000000000..2242f0782b328fdc7cbb6a7c41344950f0ea1a7e
--- /dev/null
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RInvisibleBuiltinNode.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2014, 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.nodes.builtin;
+
+public abstract class RInvisibleBuiltinNode extends RBuiltinNode {
+
+    @Override
+    public final boolean getVisibility() {
+        return false;
+    }
+
+}
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Assign.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Assign.java
index 98fc9df03bce5f5d337d2c69c060f418eea34be9..890113247b0d2d86e76468311ce7defbdd809bcb 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Assign.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Assign.java
@@ -33,7 +33,7 @@ import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.data.*;
 
 @RBuiltin("assign")
-public abstract class Assign extends RBuiltinNode {
+public abstract class Assign extends RInvisibleBuiltinNode {
 
     @Child private WriteVariableNode writeVariableNode;
 
@@ -55,11 +55,6 @@ public abstract class Assign extends RBuiltinNode {
                         ConstantNode.create(RRuntime.LOGICAL_FALSE), ConstantNode.create(RRuntime.LOGICAL_TRUE)};
     }
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     @Specialization(order = 1, guards = "noEnv")
     @SuppressWarnings("unused")
     public Object assign(VirtualFrame frame, String x, Object value, Object pos, RMissing envir, byte inherits, byte immediate) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Cat.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Cat.java
index dba1d8385e887e6206764ebdcaa6e740b3407bf3..5c2b8ecdec6ec6acc06541b9ee97551ec9e83098 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Cat.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Cat.java
@@ -36,7 +36,7 @@ import com.oracle.truffle.r.runtime.data.model.*;
 
 @RBuiltin(value = "cat", lastParameterKind = LastParameterKind.VAR_ARGS_SPECIALIZE)
 @SuppressWarnings("unused")
-public abstract class Cat extends RBuiltinNode {
+public abstract class Cat extends RInvisibleBuiltinNode {
     private static final Object[] PARAMETER_NAMES = new Object[]{"...", "file", "sep", "fill", "labels", "append"};
 
     @Override
@@ -50,11 +50,6 @@ public abstract class Cat extends RBuiltinNode {
                         ConstantNode.create(RRuntime.LOGICAL_FALSE)};
     }
 
-    @Override
-    public boolean getVisibility() {
-        return false;
-    }
-
     @Child private ToString toString;
 
     @CompilationFinal private String currentSep;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/ConnectionFunctions.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/ConnectionFunctions.java
index 36052a9569c5fddd15f97eb0ec09dbd72503be3e..4c7f655eb2565d1b3e3b338fdf149669774fecd3 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/ConnectionFunctions.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/ConnectionFunctions.java
@@ -59,12 +59,7 @@ public abstract class ConnectionFunctions {
     }
 
     @RBuiltin(".Internal.file")
-    public abstract static class File extends RBuiltinNode {
-        @Override
-        public final boolean getVisibility() {
-            return false;
-        }
-
+    public abstract static class File extends RInvisibleBuiltinNode {
         @Specialization
         @SuppressWarnings("unused")
         public Object file(String description, String open, byte blocking, RAbstractStringVector encoding, byte raw) {
@@ -91,12 +86,7 @@ public abstract class ConnectionFunctions {
     }
 
     @RBuiltin("close")
-    public abstract static class Close extends RBuiltinNode {
-        @Override
-        public final boolean getVisibility() {
-            return false;
-        }
-
+    public abstract static class Close extends RInvisibleBuiltinNode {
         @Specialization
         public Object close(@SuppressWarnings("unused") Object con) {
             controlVisibility();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Contributors.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Contributors.java
index 43403888766a0582a40fb8951472ba0d58e19f2d..a34882b2cc4b86c00fc7d939f96ed6a48aad3cee 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Contributors.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Contributors.java
@@ -28,15 +28,10 @@ import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.data.*;
 
 @RBuiltin("contributors")
-public abstract class Contributors extends RBuiltinNode {
+public abstract class Contributors extends RInvisibleBuiltinNode {
 
     private static final String CONTRIBUTORS = Utils.getResourceAsString(Contributors.class, "CONTRIBUTORS", true);
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     @Specialization
     public Object contributors() {
         controlVisibility();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Invisible.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Invisible.java
index 0bf8d9a19ecc4521fc7477eea76493856b7ede5f..be5ac98f8f50cab9398c6ac556c0702b361265b3 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Invisible.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Invisible.java
@@ -29,7 +29,7 @@ import com.oracle.truffle.r.nodes.builtin.*;
 import com.oracle.truffle.r.runtime.data.*;
 
 @RBuiltin("invisible")
-public abstract class Invisible extends RBuiltinNode {
+public abstract class Invisible extends RInvisibleBuiltinNode {
 
     private static final Object[] PARAMETER_NAMES = new Object[]{"x"};
 
@@ -47,11 +47,6 @@ public abstract class Invisible extends RBuiltinNode {
         return new RNode[]{ConstantNode.create(RNull.instance)};
     }
 
-    @Override
-    public boolean getVisibility() {
-        return false;
-    }
-
     @Specialization
     public Object doInvisible(Object o) {
         controlVisibility();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/License.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/License.java
index 34f607968d5b9b81b0d1a34ad022b04c227f9c75..948fe1a091a79160b91528d4ad28236ffefa0263 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/License.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/License.java
@@ -28,12 +28,7 @@ import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.data.*;
 
 @RBuiltin({"license", "licence"})
-public abstract class License extends RBuiltinNode {
-
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
+public abstract class License extends RInvisibleBuiltinNode {
 
     @Specialization
     public Object license() {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/OnExit.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/OnExit.java
index d568380ab4ce980146f1671d2f9a1588b284e306..8eeb2bdb3486e252d2e4c80dcf5402e76550eaf3 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/OnExit.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/OnExit.java
@@ -32,12 +32,7 @@ import com.oracle.truffle.r.runtime.data.*;
  * evaluated, but {@code add} is.
  */
 @RBuiltin("on.exit")
-public abstract class OnExit extends RBuiltinNode {
-
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
+public abstract class OnExit extends RInvisibleBuiltinNode {
 
     @Specialization
     public Object onExit(@SuppressWarnings("unused") Object expr, @SuppressWarnings("unused") Object add) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Print.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Print.java
index 888927da2675f5d3bb2a96ec3d1f55d61f661a36..3e54f0381013c280f631499ecf9c1e9ba8668983 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Print.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Print.java
@@ -39,15 +39,10 @@ import com.oracle.truffle.r.runtime.data.model.*;
 
 @RBuiltin("print")
 @SuppressWarnings("unused")
-public abstract class Print extends RBuiltinNode {
+public abstract class Print extends RInvisibleBuiltinNode {
 
     @Child protected PrettyPrinterNode prettyPrinter = PrettyPrinterNodeFactory.create(null, null, false);
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     private static void printHelper(String string) {
         RContext.getInstance().getConsoleHandler().println(string);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Quit.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Quit.java
index 7358ce44bd4de9389b25c7c267a0dac330479c73..67aa77576b3cfdefeb9621bdbac7aade92915223 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Quit.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Quit.java
@@ -31,7 +31,7 @@ import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.data.*;
 
 @RBuiltin({"quit", "q"})
-public abstract class Quit extends RBuiltinNode {
+public abstract class Quit extends RInvisibleBuiltinNode {
 
     private static final Object[] PARAMETER_NAMES = new Object[]{"save", "status", "runLast"};
 
@@ -52,11 +52,6 @@ public abstract class Quit extends RBuiltinNode {
         return arguments;
     }
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     @Specialization
     public Object doQuit(final String saveArg, int status, byte runLast) {
         controlVisibility();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/ReadREnviron.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/ReadREnviron.java
index 115ac64f5af1117873c0fb1edad56ed38ade84f7..65cc1477cd8fbf2f4e73250829e96133c8223ca1 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/ReadREnviron.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/ReadREnviron.java
@@ -30,12 +30,7 @@ import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.data.model.*;
 
 @RBuiltin("readRenviron")
-public abstract class ReadREnviron extends RBuiltinNode {
-
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
+public abstract class ReadREnviron extends RInvisibleBuiltinNode {
 
     @Specialization(guards = "lengthOneCVector")
     public Object doReadEnviron(RAbstractStringVector vec) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Rm.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Rm.java
index af2d70b59668009e1906d031b8e2cbf7f9eab49e..0974d0fbb56843596f07f29efece9b6b7532267d 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Rm.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Rm.java
@@ -32,7 +32,7 @@ import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.data.*;
 
 @RBuiltin(value = {"rm", "remove"}, lastParameterKind = LastParameterKind.VAR_ARGS_SPECIALIZE)
-public abstract class Rm extends RBuiltinNode {
+public abstract class Rm extends RInvisibleBuiltinNode {
 
     public static Rm create(String name) {
         RNode[] args = getParameterValues0();
@@ -57,11 +57,6 @@ public abstract class Rm extends RBuiltinNode {
         return getParameterValues0();
     }
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     @Specialization
     @SuppressWarnings("unused")
     public Object rm(VirtualFrame frame, String name, RStringVector list, Object pos, RMissing envir, byte inherits) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SetSeed.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SetSeed.java
index 1bd9709163464a7a2fb5267860fa7d84f48520df..1d7514cb6520f9b40d3576b41f3ff33a754f621f 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SetSeed.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SetSeed.java
@@ -28,12 +28,7 @@ import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.data.*;
 
 @RBuiltin("set.seed")
-public abstract class SetSeed extends RBuiltinNode {
-
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
+public abstract class SetSeed extends RInvisibleBuiltinNode {
 
     @Specialization
     public RNull setseed(int n) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Setwd.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Setwd.java
index 6fd1100323d7c4a4c94a28b657e62ff99b1264f9..9a13f24ad2554736d02e2321c19f2d96ef2357f4 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Setwd.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/Setwd.java
@@ -28,12 +28,7 @@ import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.ffi.*;
 
 @RBuiltin({".Internal.setwd"})
-public abstract class Setwd extends RBuiltinNode {
-
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
+public abstract class Setwd extends RInvisibleBuiltinNode {
 
     @Specialization
     public Object setwd(String dir) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SysSleep.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SysSleep.java
index 91c3af6fb980cb2d5bc27164b6aba573e9142bf0..8d509984844b3b8a22870e364a8ab5a0edd01288 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SysSleep.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/SysSleep.java
@@ -28,12 +28,7 @@ import com.oracle.truffle.r.runtime.*;
 import com.oracle.truffle.r.runtime.data.*;
 
 @RBuiltin(".Internal.Sys.sleep")
-public abstract class SysSleep extends RBuiltinNode {
-
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
+public abstract class SysSleep extends RInvisibleBuiltinNode {
 
     @Specialization(order = 0)
     public Object sysSleep(double seconds) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttr.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttr.java
index 053eed09a670492c55963b25ec43ce0568607ea7..a18197a34163000a38fe37f232833730f1ce9d06 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttr.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttr.java
@@ -37,7 +37,7 @@ import com.oracle.truffle.r.runtime.data.model.*;
 
 @RBuiltin("attr<-")
 @SuppressWarnings("unused")
-public abstract class UpdateAttr extends RBuiltinNode {
+public abstract class UpdateAttr extends RInvisibleBuiltinNode {
 
     @Child UpdateNames updateNames;
     @Child UpdateDimNames updateDimNames;
@@ -45,11 +45,6 @@ public abstract class UpdateAttr extends RBuiltinNode {
     @Child private CastToVectorNode castVector;
     @Child private CastListNode castList;
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     private RAbstractVector updateNames(VirtualFrame frame, RAbstractVector vector, Object o) {
         if (updateNames == null) {
             CompilerDirectives.transferToInterpreterAndInvalidate();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttributes.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttributes.java
index c5a160bd7673253072aa6b27ff3e1a282de7a067..9228d0f45d2348827aa13441ba3d8f157ad9856c 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttributes.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttributes.java
@@ -38,18 +38,13 @@ import com.oracle.truffle.r.runtime.data.model.*;
 
 @RBuiltin("attributes<-")
 @SuppressWarnings("unused")
-public abstract class UpdateAttributes extends RBuiltinNode {
+public abstract class UpdateAttributes extends RInvisibleBuiltinNode {
 
     @Child UpdateNames updateNames;
     @Child private CastIntegerNode castInteger;
     @Child private CastToVectorNode castVector;
     @Child private CastListNode castList;
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     private void updateNamesStringVector(VirtualFrame frame, RAbstractVector vector, Object o) {
         if (updateNames == null) {
             CompilerDirectives.transferToInterpreterAndInvalidate();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateClass.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateClass.java
index 60ba7e21c7ee123ad760c721891926b449c37ef0..e73305a8222537b66617d6720d489cca47f0cb13 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateClass.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateClass.java
@@ -22,7 +22,7 @@ import com.oracle.truffle.r.runtime.data.*;
 import com.oracle.truffle.r.runtime.data.model.*;
 
 @RBuiltin(value = "class<-")
-public abstract class UpdateClass extends RBuiltinNode {
+public abstract class UpdateClass extends RInvisibleBuiltinNode {
 
     private RVector resultVector;
     @Child private CastStringNode castStringNode;
@@ -35,11 +35,6 @@ public abstract class UpdateClass extends RBuiltinNode {
 
     public abstract Object execute(VirtualFrame frame, RAbstractVector vector, Object o);
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     @Specialization
     public Object setClass(VirtualFrame frame, RAbstractVector arg, RAbstractVector className) {
         controlVisibility();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java
index ce21a0d60b7aeb57d7c615c7d801e35f4d306d49..221532caac1543db29e616daa516079e84c03658 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java
@@ -33,17 +33,12 @@ import com.oracle.truffle.r.runtime.data.model.*;
 import com.oracle.truffle.r.runtime.ops.na.*;
 
 @RBuiltin("diag<-")
-public abstract class UpdateDiag extends RBuiltinNode {
+public abstract class UpdateDiag extends RInvisibleBuiltinNode {
 
     private final NACheck naCheck = NACheck.create();
 
     @Child protected CastDoubleNode castDouble;
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     public static boolean isMatrix(RAbstractVector vector) {
         return vector.hasDimensions() && vector.getDimensions().length == 2;
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDim.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDim.java
index 34bce85904824482206047f7b76a931c4228c959..f2d0069c6646415b7ad4b665b323596a2dd23552 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDim.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDim.java
@@ -35,15 +35,10 @@ import com.oracle.truffle.r.runtime.data.model.*;
 
 @RBuiltin("dim<-")
 @SuppressWarnings("unused")
-public abstract class UpdateDim extends RBuiltinNode {
+public abstract class UpdateDim extends RInvisibleBuiltinNode {
 
     @Child private CastIntegerNode castInteger;
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     private RAbstractIntVector castInteger(VirtualFrame frame, RAbstractVector vector) {
         if (castInteger == null) {
             CompilerDirectives.transferToInterpreterAndInvalidate();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java
index 7ce2f795850e37c57b5c242963fc3130ec2a800c..62b336ea56f37c3327620c63c01e161a2e75e403 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java
@@ -35,16 +35,11 @@ import com.oracle.truffle.r.runtime.data.model.*;
 
 @RBuiltin("dimnames<-")
 @SuppressWarnings("unused")
-public abstract class UpdateDimNames extends RBuiltinNode {
+public abstract class UpdateDimNames extends RInvisibleBuiltinNode {
 
     @Child CastStringNode castStringNode;
     @Child CastToVectorNode castVectorNode;
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     private Object castString(VirtualFrame frame, Object o) {
         if (castStringNode == null) {
             CompilerDirectives.transferToInterpreterAndInvalidate();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateLength.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateLength.java
index ef1ddebb47f0359fa83a1463250902a3c7e89bae..90c1c60e6c6fd3c6d56dbda55c79ef89a5130136 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateLength.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateLength.java
@@ -31,7 +31,7 @@ import com.oracle.truffle.r.runtime.data.*;
 import com.oracle.truffle.r.runtime.data.model.*;
 
 @RBuiltin("length<-")
-public abstract class UpdateLength extends RBuiltinNode {
+public abstract class UpdateLength extends RInvisibleBuiltinNode {
 
     @CreateCast("arguments")
     protected RNode[] castStatusArgument(RNode[] arguments) {
@@ -40,11 +40,6 @@ public abstract class UpdateLength extends RBuiltinNode {
         return arguments;
     }
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     @Specialization(order = 1, guards = "isLengthOne")
     public RAbstractVector updateLength(RAbstractVector vector, RAbstractIntVector lengthVector) {
         controlVisibility();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateNames.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateNames.java
index 0245b04d34e15a9331a3f9d8dbade8c0abdacdb7..7e69930467b223524580956859b40b0d9b680788 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateNames.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/UpdateNames.java
@@ -34,15 +34,10 @@ import com.oracle.truffle.r.runtime.data.*;
 import com.oracle.truffle.r.runtime.data.model.*;
 
 @RBuiltin("names<-")
-public abstract class UpdateNames extends RBuiltinNode {
+public abstract class UpdateNames extends RInvisibleBuiltinNode {
 
     @Child CastStringNode castStringNode;
 
-    @Override
-    public final boolean getVisibility() {
-        return false;
-    }
-
     private Object castString(VirtualFrame frame, Object o) {
         if (castStringNode == null) {
             CompilerDirectives.transferToInterpreterAndInvalidate();