From ff8b39e4fba834b7d64c713b84f893fb5f9c3680 Mon Sep 17 00:00:00 2001
From: Adam Welc <adam.welc@oracle.com>
Date: Sun, 17 Aug 2014 18:07:22 -0700
Subject: [PATCH] Removed unused annotation "order" attribute.

---
 .../truffle/r/nodes/builtin/base/All.java     |   6 +-
 .../truffle/r/nodes/builtin/base/Any.java     |   6 +-
 .../r/nodes/builtin/base/AnyDuplicated.java   |  14 +-
 .../truffle/r/nodes/builtin/base/Apply.java   |   6 +-
 .../truffle/r/nodes/builtin/base/Array.java   |  28 +-
 .../r/nodes/builtin/base/AsDouble.java        |   2 +-
 .../r/nodes/builtin/base/AsInteger.java       |   2 +-
 .../r/nodes/builtin/base/AsLogical.java       |   6 +-
 .../r/nodes/builtin/base/AsVector.java        |  26 +-
 .../truffle/r/nodes/builtin/base/Assign.java  |  16 +-
 .../r/nodes/builtin/base/AttachFunctions.java |  16 +-
 .../truffle/r/nodes/builtin/base/Attr.java    |  10 +-
 .../r/nodes/builtin/base/ColMeans.java        |  14 +-
 .../truffle/r/nodes/builtin/base/ColSums.java |  14 +-
 .../truffle/r/nodes/builtin/base/Combine.java |  30 +-
 .../builtin/base/ConnectionFunctions.java     |   4 +-
 .../r/nodes/builtin/base/Crossprod.java       |   4 +-
 .../r/nodes/builtin/base/DelayedAssign.java   |   8 +-
 .../truffle/r/nodes/builtin/base/Diag.java    |  18 +-
 .../r/nodes/builtin/base/DotLibpaths.java     |   6 +-
 .../r/nodes/builtin/base/EncodeString.java    |  26 +-
 .../r/nodes/builtin/base/EnvFunctions.java    |  20 +-
 .../truffle/r/nodes/builtin/base/Exists.java  |  10 +-
 .../r/nodes/builtin/base/FileFunctions.java   |  18 +-
 .../nodes/builtin/base/ForeignFunctions.java  |   8 +-
 .../truffle/r/nodes/builtin/base/Format.java  |   8 +-
 .../truffle/r/nodes/builtin/base/Get.java     |   6 +-
 .../r/nodes/builtin/base/GetClass.java        |   4 +-
 .../r/nodes/builtin/base/GrepFunctions.java   |  12 +-
 .../r/nodes/builtin/base/Identical.java       |  14 +-
 .../truffle/r/nodes/builtin/base/Ifelse.java  |  14 +-
 .../r/nodes/builtin/base/IsFinite.java        |   2 +-
 .../r/nodes/builtin/base/IsListFunctions.java |   8 +-
 .../truffle/r/nodes/builtin/base/IsTRUE.java  |   6 +-
 .../r/nodes/builtin/base/IsVector.java        |  14 +-
 .../truffle/r/nodes/builtin/base/Ls.java      |  14 +-
 .../truffle/r/nodes/builtin/base/MatMult.java | 142 ++--
 .../truffle/r/nodes/builtin/base/Match.java   |  24 +-
 .../truffle/r/nodes/builtin/base/Matrix.java  |  16 +-
 .../r/nodes/builtin/base/NGetText.java        |  18 +-
 .../r/nodes/builtin/base/NextMethod.java      |   6 +-
 .../r/nodes/builtin/base/NormalizePath.java   |   2 +-
 .../truffle/r/nodes/builtin/base/Order.java   |  16 +-
 .../truffle/r/nodes/builtin/base/Parse.java   |   6 +-
 .../r/nodes/builtin/base/PathExpand.java      |   2 +-
 .../nodes/builtin/base/PrettyPrinterNode.java |  70 +-
 .../r/nodes/builtin/base/RNGFunctions.java    |  12 +-
 .../truffle/r/nodes/builtin/base/Repeat.java  |  76 +--
 .../r/nodes/builtin/base/RepeatInternal.java  |   4 +-
 .../truffle/r/nodes/builtin/base/Rhome.java   |   4 +-
 .../truffle/r/nodes/builtin/base/Rm.java      |   8 +-
 .../truffle/r/nodes/builtin/base/Round.java   |  18 +-
 .../r/nodes/builtin/base/RowMeans.java        |  14 +-
 .../truffle/r/nodes/builtin/base/RowSums.java |  14 +-
 .../truffle/r/nodes/builtin/base/Sample.java  |  22 +-
 .../truffle/r/nodes/builtin/base/Seq.java     |  80 +--
 .../truffle/r/nodes/builtin/base/Sprintf.java |  30 +-
 .../truffle/r/nodes/builtin/base/Substr.java  |   6 +-
 .../truffle/r/nodes/builtin/base/Switch.java  |   8 +-
 .../r/nodes/builtin/base/SysFunctions.java    |  16 +-
 .../r/nodes/builtin/base/TempFile.java        |   4 +-
 .../r/nodes/builtin/base/Transpose.java       |   8 +-
 .../nodes/builtin/base/TrigExpFunctions.java  |  12 +-
 .../truffle/r/nodes/builtin/base/Unlist.java  |   4 +-
 .../r/nodes/builtin/base/UpdateAttr.java      |  10 +-
 .../r/nodes/builtin/base/UpdateDiag.java      |  10 +-
 .../r/nodes/builtin/base/UpdateDim.java       |   4 +-
 .../r/nodes/builtin/base/UpdateDimNames.java  |   6 +-
 .../r/nodes/builtin/base/UpdateLength.java    |   4 +-
 .../nodes/builtin/base/UpdateStorageMode.java |   8 +-
 .../r/nodes/builtin/base/UpdateSubstr.java    |  10 +-
 .../r/nodes/access/AccessArrayNode.java       | 192 +++---
 .../r/nodes/access/AccessFieldNode.java       |   8 +-
 .../r/nodes/access/ArrayPositionCast.java     | 220 +++----
 .../r/nodes/access/CoerceBinaryNode.java      | 136 ++--
 .../r/nodes/access/UpdateArrayHelperNode.java | 614 +++++++++---------
 .../r/nodes/access/UpdateFieldNode.java       |   6 +-
 .../r/nodes/access/VectorPositionCast.java    |  16 +-
 .../r/nodes/binary/BinaryArithmeticNode.java  | 150 ++---
 .../r/nodes/binary/BinaryBooleanNode.java     | 396 +++++------
 .../BinaryBooleanNonVectorizedNode.java       |  64 +-
 .../truffle/r/nodes/binary/CastTypeNode.java  |  18 +-
 .../r/nodes/binary/CbindBinaryNode.java       |   6 +-
 .../truffle/r/nodes/binary/ColonNode.java     |  16 +-
 .../binary/CombineBinaryComplexNode.java      |  16 +-
 .../nodes/binary/CombineBinaryDoubleNode.java |  14 +-
 .../binary/CombineBinaryIntegerNode.java      |  10 +-
 .../r/nodes/binary/CombineBinaryListNode.java |   4 +-
 .../binary/CombineBinaryLogicalNode.java      |  16 +-
 .../r/nodes/binary/CombineBinaryRawNode.java  |  16 +-
 .../nodes/binary/CombineBinaryStringNode.java |  16 +-
 .../r/nodes/binary/RbindBinaryNode.java       |   6 +-
 .../nodes/function/UseMethodDispatchNode.java |   2 +-
 .../r/nodes/unary/CastComplexNode.java        |  36 +-
 .../truffle/r/nodes/unary/CastDoubleNode.java |  42 +-
 .../r/nodes/unary/CastIntegerNode.java        |  40 +-
 .../truffle/r/nodes/unary/CastListNode.java   |   8 +-
 .../r/nodes/unary/CastLogicalNode.java        |  24 +-
 .../truffle/r/nodes/unary/CastRawNode.java    |  24 +-
 .../truffle/r/nodes/unary/CastStringNode.java |  44 +-
 .../r/nodes/unary/CastToContainerNode.java    |   8 +-
 .../r/nodes/unary/CastToVectorNode.java       |   8 +-
 .../truffle/r/nodes/unary/InheritsNode.java   |   6 +-
 .../truffle/r/nodes/unary/PrecedenceNode.java |   4 +-
 .../truffle/r/nodes/unary/ToStringNode.java   |  10 +-
 .../truffle/r/nodes/unary/TypeofNode.java     |   6 +-
 .../r/nodes/unary/UnaryArithmeticNode.java    |  36 +-
 .../unary/UnaryArithmeticReduceNode.java      |  26 +-
 .../truffle/r/nodes/unary/UnaryNotNode.java   |  28 +-
 109 files changed, 1703 insertions(+), 1703 deletions(-)

diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/All.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/All.java
index b76d338e2b..78bc6b2753 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/All.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/All.java
@@ -63,21 +63,21 @@ public abstract class All extends RBuiltinNode {
         return value;
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public byte all(int value) {
         controlVisibility();
         check.enable(value);
         return check.convertIntToLogical(value);
     }
 
-    @Specialization(order = 12)
+    @Specialization
     public byte all(double value) {
         controlVisibility();
         check.enable(value);
         return check.convertDoubleToLogical(value);
     }
 
-    @Specialization(order = 14)
+    @Specialization
     public byte all(RComplex value) {
         controlVisibility();
         check.enable(value);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Any.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Any.java
index 87dd1c12d3..d94ffd591f 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Any.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Any.java
@@ -65,21 +65,21 @@ public abstract class Any extends RBuiltinNode {
         return value;
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public byte any(int value) {
         controlVisibility();
         check.enable(value);
         return check.convertIntToLogical(value);
     }
 
-    @Specialization(order = 12)
+    @Specialization
     public byte any(double value) {
         controlVisibility();
         check.enable(value);
         return check.convertDoubleToLogical(value);
     }
 
-    @Specialization(order = 14)
+    @Specialization
     public byte any(RComplex value) {
         controlVisibility();
         check.enable(value);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AnyDuplicated.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AnyDuplicated.java
index 817f8ed4ef..64d2f8137e 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AnyDuplicated.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AnyDuplicated.java
@@ -45,19 +45,19 @@ public abstract class AnyDuplicated extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(guards = {"!isIncomparable", "!isFromLast", "!empty"}, order = 0)
+    @Specialization(guards = {"!isIncomparable", "!isFromLast", "!empty"})
     public int anyDuplicatedFalseIncomparablesFromStart(RAbstractVector x, byte incomparables, byte fromLast) {
         return getIndexFromStart(x);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(guards = {"!isIncomparable", "isFromLast", "!empty"}, order = 1)
+    @Specialization(guards = {"!isIncomparable", "isFromLast", "!empty"})
     public int anyDuplicatedFalseIncomparablesFromLast(RAbstractVector x, byte incomparables, byte fromLast) {
         return getIndexFromLast(x);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(guards = {"isIncomparable", "!isFromLast", "!empty"}, order = 2)
+    @Specialization(guards = {"isIncomparable", "!isFromLast", "!empty"})
     public int anyDuplicatedTrueIncomparablesFromStart(VirtualFrame frame, RAbstractVector x, byte incomparables, byte fromLast) {
         initTypeof();
         initCastTypeNode();
@@ -66,7 +66,7 @@ public abstract class AnyDuplicated extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(guards = {"isIncomparable", "isFromLast", "!empty"}, order = 3)
+    @Specialization(guards = {"isIncomparable", "isFromLast", "!empty"})
     public int anyDuplicatedTrueIncomparablesFromLast(VirtualFrame frame, RAbstractVector x, byte incomparables, byte fromLast) {
         initTypeof();
         initCastTypeNode();
@@ -74,7 +74,7 @@ public abstract class AnyDuplicated extends RBuiltinNode {
         return getIndexFromLast(x, (RAbstractVector) (castTypeNode.execute(frame, incomparables, xType)));
     }
 
-    @Specialization(guards = {"!isFromLast", "!empty"}, order = 4)
+    @Specialization(guards = {"!isFromLast", "!empty"})
     public int anyDuplicatedFromStart(VirtualFrame frame, RAbstractVector x, RAbstractVector incomparables, @SuppressWarnings("unused") byte fromLast) {
         initTypeof();
         initCastTypeNode();
@@ -82,7 +82,7 @@ public abstract class AnyDuplicated extends RBuiltinNode {
         return getIndexFromStart(x, (RAbstractVector) (castTypeNode.execute(frame, incomparables, xType)));
     }
 
-    @Specialization(guards = {"isFromLast", "!empty"}, order = 5)
+    @Specialization(guards = {"isFromLast", "!empty"})
     public int anyDuplicatedFromLast(VirtualFrame frame, RAbstractVector x, RAbstractVector incomparables, @SuppressWarnings("unused") byte fromLast) {
         initTypeof();
         initCastTypeNode();
@@ -91,7 +91,7 @@ public abstract class AnyDuplicated extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(guards = "empty", order = 10)
+    @Specialization(guards = "empty")
     public int anyDuplicatedEmpty(VirtualFrame frame, RAbstractVector x, RAbstractVector incomparables, byte fromLast) {
         return 0;
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Apply.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Apply.java
index 2dae7233a6..680cacac8d 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Apply.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Apply.java
@@ -46,7 +46,7 @@ public abstract class Apply extends RBuiltinNode {
         return new RNode[]{ConstantNode.create(RMissing.instance), ConstantNode.create(RMissing.instance), ConstantNode.create(RMissing.instance), ConstantNode.create(RMissing.instance)};
     }
 
-    @Specialization(order = 1, guards = "rowMargin")
+    @Specialization(guards = "rowMargin")
     @SuppressWarnings("unused")
     public Object applyRows(VirtualFrame frame, RDoubleVector x, double margin, RFunction fun, Object args) {
         controlVisibility();
@@ -65,7 +65,7 @@ public abstract class Apply extends RBuiltinNode {
         return RDataFactory.createObjectVector(result, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 2, guards = "colMargin")
+    @Specialization(guards = "colMargin")
     @SuppressWarnings("unused")
     public Object applyCols(VirtualFrame frame, RDoubleVector x, double margin, RFunction fun, Object args) {
         controlVisibility();
@@ -84,7 +84,7 @@ public abstract class Apply extends RBuiltinNode {
         return RDataFactory.createObjectVector(result, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 3, guards = "rowMarginInt")
+    @Specialization(guards = "rowMarginInt")
     @SuppressWarnings("unused")
     public Object applyRows(VirtualFrame frame, RLogicalVector x, int margin, RFunction fun, Object args) {
         controlVisibility();
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Array.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Array.java
index 6573440cf9..26a33c9042 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Array.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Array.java
@@ -88,13 +88,13 @@ public abstract class Array extends RBuiltinNode {
         return RDataFactory.createIntVector(data, vec.isComplete(), dimData);
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public RIntVector doArrayNoDimNames(VirtualFrame frame, RAbstractIntVector vec, RAbstractIntVector dim, @SuppressWarnings("unused") RNull dimnames) {
         controlVisibility();
         return doArrayInt(frame, vec, dim);
     }
 
-    @Specialization(order = 11)
+    @Specialization
     public RIntVector doArray(VirtualFrame frame, RAbstractIntVector vec, RAbstractIntVector dim, RList dimnames) {
         controlVisibility();
         RIntVector ret = doArrayInt(frame, vec, dim);
@@ -112,13 +112,13 @@ public abstract class Array extends RBuiltinNode {
         return RDataFactory.createDoubleVector(data, vec.isComplete(), dimData);
     }
 
-    @Specialization(order = 20)
+    @Specialization
     public RDoubleVector doArrayNoDimNames(VirtualFrame frame, RAbstractDoubleVector vec, RAbstractIntVector dim, @SuppressWarnings("unused") RNull dimnames) {
         controlVisibility();
         return doArrayDouble(frame, vec, dim);
     }
 
-    @Specialization(order = 21)
+    @Specialization
     public RDoubleVector doArray(VirtualFrame frame, RAbstractDoubleVector vec, RAbstractIntVector dim, RList dimnames) {
         controlVisibility();
         RDoubleVector ret = doArrayDouble(frame, vec, dim);
@@ -136,13 +136,13 @@ public abstract class Array extends RBuiltinNode {
         return RDataFactory.createLogicalVector(data, vec.isComplete(), dimData);
     }
 
-    @Specialization(order = 30)
+    @Specialization
     public RLogicalVector doArrayNoDimNames(VirtualFrame frame, RAbstractLogicalVector vec, RAbstractIntVector dim, @SuppressWarnings("unused") RNull dimnames) {
         controlVisibility();
         return doArrayLogical(frame, vec, dim);
     }
 
-    @Specialization(order = 31)
+    @Specialization
     public RLogicalVector doArray(VirtualFrame frame, RAbstractLogicalVector vec, RAbstractIntVector dim, RList dimnames) {
         controlVisibility();
         RLogicalVector ret = doArrayLogical(frame, vec, dim);
@@ -160,13 +160,13 @@ public abstract class Array extends RBuiltinNode {
         return RDataFactory.createStringVector(data, vec.isComplete(), dimData);
     }
 
-    @Specialization(order = 40)
+    @Specialization
     public RStringVector doArrayNoDimNames(VirtualFrame frame, RAbstractStringVector vec, RAbstractIntVector dim, @SuppressWarnings("unused") RNull dimnames) {
         controlVisibility();
         return doArrayString(frame, vec, dim);
     }
 
-    @Specialization(order = 41)
+    @Specialization
     public RStringVector doArray(VirtualFrame frame, RAbstractStringVector vec, RAbstractIntVector dim, RList dimnames) {
         controlVisibility();
         RStringVector ret = doArrayString(frame, vec, dim);
@@ -187,13 +187,13 @@ public abstract class Array extends RBuiltinNode {
         return RDataFactory.createComplexVector(data, vec.isComplete(), dimData);
     }
 
-    @Specialization(order = 50)
+    @Specialization
     public RComplexVector doArrayNoDimNames(VirtualFrame frame, RAbstractComplexVector vec, RAbstractIntVector dim, @SuppressWarnings("unused") RNull dimnames) {
         controlVisibility();
         return doArrayComplex(frame, vec, dim);
     }
 
-    @Specialization(order = 51)
+    @Specialization
     public RComplexVector doArray(VirtualFrame frame, RAbstractComplexVector vec, RAbstractIntVector dim, RList dimnames) {
         controlVisibility();
         RComplexVector ret = doArrayComplex(frame, vec, dim);
@@ -211,13 +211,13 @@ public abstract class Array extends RBuiltinNode {
         return RDataFactory.createRawVector(data, dimData);
     }
 
-    @Specialization(order = 60)
+    @Specialization
     public RRawVector doArrayNoDimNames(VirtualFrame frame, RAbstractRawVector vec, RAbstractIntVector dim, @SuppressWarnings("unused") RNull dimnames) {
         controlVisibility();
         return doArrayRaw(frame, vec, dim);
     }
 
-    @Specialization(order = 61)
+    @Specialization
     public RRawVector doArray(VirtualFrame frame, RAbstractRawVector vec, RAbstractIntVector dim, RList dimnames) {
         controlVisibility();
         RRawVector ret = doArrayRaw(frame, vec, dim);
@@ -235,13 +235,13 @@ public abstract class Array extends RBuiltinNode {
         return RDataFactory.createList(data, dimData);
     }
 
-    @Specialization(order = 70)
+    @Specialization
     public RList doArrayNoDimeNames(VirtualFrame frame, RList vec, RAbstractIntVector dim, @SuppressWarnings("unused") RNull dimnames) {
         controlVisibility();
         return doArrayList(frame, vec, dim);
     }
 
-    @Specialization(order = 71)
+    @Specialization
     public RList doArray(VirtualFrame frame, RList vec, RAbstractIntVector dim, RList dimnames) {
         controlVisibility();
         RList ret = doArrayList(frame, vec, dim);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsDouble.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsDouble.java
index e4b61d3558..cd8e7c875c 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsDouble.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsDouble.java
@@ -78,7 +78,7 @@ public abstract class AsDouble extends RBuiltinNode {
         return value;
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public double asDoubleInt(VirtualFrame frame, int value) {
         controlVisibility();
         return castDouble(frame, value);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsInteger.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsInteger.java
index f606877998..68b4a347f8 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsInteger.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsInteger.java
@@ -113,7 +113,7 @@ public abstract class AsInteger extends RBuiltinNode {
         return RRuntime.INT_NA;
     }
 
-    @Specialization(order = 71)
+    @Specialization
     public RIntVector asInteger(RIntVector vector) {
         controlVisibility();
         return RDataFactory.createIntVector(vector.getDataCopy(), vector.isComplete());
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsLogical.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsLogical.java
index bafbe38579..292cfd255b 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsLogical.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsLogical.java
@@ -64,19 +64,19 @@ public abstract class AsLogical extends RBuiltinNode {
         return value;
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public byte asLogical(VirtualFrame frame, int value) {
         controlVisibility();
         return castLogical(frame, value);
     }
 
-    @Specialization(order = 12)
+    @Specialization
     public byte asLogical(VirtualFrame frame, double value) {
         controlVisibility();
         return castLogical(frame, value);
     }
 
-    @Specialization(order = 14)
+    @Specialization
     public byte asLogical(VirtualFrame frame, RComplex value) {
         controlVisibility();
         return castLogical(frame, value);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsVector.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsVector.java
index 5bf3a4d9d3..90c0322a0a 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsVector.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AsVector.java
@@ -117,61 +117,61 @@ public abstract class AsVector extends RBuiltinNode {
         return new RNode[]{ConstantNode.create(RMissing.instance), ConstantNode.create(RRuntime.TYPE_ANY)};
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public Object asVector(RNull x, @SuppressWarnings("unused") RMissing mode) {
         controlVisibility();
         return x;
     }
 
-    @Specialization(order = 100, guards = "castToInt")
+    @Specialization(guards = "castToInt")
     public RAbstractVector asVectorInt(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
         controlVisibility();
         return castInteger(frame, x);
     }
 
-    @Specialization(order = 200, guards = "castToDouble")
+    @Specialization(guards = "castToDouble")
     public RAbstractVector asVectorDouble(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
         controlVisibility();
         return castDouble(frame, x);
     }
 
-    @Specialization(order = 300, guards = "castToComplex")
+    @Specialization(guards = "castToComplex")
     public RAbstractVector asVectorComplex(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
         controlVisibility();
         return castComplex(frame, x);
     }
 
-    @Specialization(order = 400, guards = "castToLogical")
+    @Specialization(guards = "castToLogical")
     public RAbstractVector asVectorLogical(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
         controlVisibility();
         return castLogical(frame, x);
     }
 
-    @Specialization(order = 500, guards = "castToString")
+    @Specialization(guards = "castToString")
     public RAbstractVector asVectorString(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
         controlVisibility();
         return castString(frame, x);
     }
 
-    @Specialization(order = 600, guards = "castToRaw")
+    @Specialization(guards = "castToRaw")
     public RAbstractVector asVectorRaw(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
         controlVisibility();
         return castRaw(frame, x);
     }
 
-    @Specialization(order = 700, guards = "castToList")
+    @Specialization(guards = "castToList")
     public RAbstractVector asVectorList(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
         controlVisibility();
         return castList(frame, x);
     }
 
-    @Specialization(order = 800, guards = "castToSymbol")
+    @Specialization(guards = "castToSymbol")
     public RSymbol asVectorSymbol(VirtualFrame frame, RAbstractVector x, @SuppressWarnings("unused") String mode) {
         controlVisibility();
         return castSymbol(frame, x);
     }
 
-    @Specialization(order = 900, guards = "isSymbol")
+    @Specialization(guards = "isSymbol")
     public RSymbol asVectorSymbol(RSymbol x, @SuppressWarnings("unused") String mode) {
         controlVisibility();
         return RDataFactory.createSymbol(x.getName());
@@ -181,7 +181,7 @@ public abstract class AsVector extends RBuiltinNode {
         return mode.equals("symbol");
     }
 
-    @Specialization(order = 1000)
+    @Specialization
     public RAbstractVector asVector(RList x, @SuppressWarnings("unused") String mode) {
         controlVisibility();
         RList result = x.copyWithNewDimensions(null);
@@ -189,14 +189,14 @@ public abstract class AsVector extends RBuiltinNode {
         return result;
     }
 
-    @Specialization(order = 1001, guards = "modeIsAnyOrMatches")
+    @Specialization(guards = "modeIsAnyOrMatches")
     public RAbstractVector asVector(RAbstractVector x, @SuppressWarnings("unused") String mode) {
         controlVisibility();
         return x.copyWithNewDimensions(null);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1002, guards = "invalidMode")
+    @Specialization(guards = "invalidMode")
     public RAbstractVector asVectorWrongMode(VirtualFrame frame, RAbstractVector x, String mode) {
         controlVisibility();
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, "mode");
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Assign.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Assign.java
index 3025cc0d6c..d7b6ffa2b6 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Assign.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Assign.java
@@ -67,7 +67,7 @@ public abstract class Assign extends RInvisibleBuiltinNode {
         }
     }
 
-    @Specialization(order = 1, guards = {"noEnv", "!doesInheritS"})
+    @Specialization(guards = {"noEnv", "!doesInheritS"})
     @SuppressWarnings("unused")
     public Object assignNoInherit(VirtualFrame frame, String x, Object value, Object pos, RMissing envir, byte inherits, byte immediate) {
         controlVisibility();
@@ -77,7 +77,7 @@ public abstract class Assign extends RInvisibleBuiltinNode {
     }
 
     @ExplodeLoop
-    @Specialization(order = 2, guards = {"noEnv", "doesInheritS"})
+    @Specialization(guards = {"noEnv", "doesInheritS"})
     @SuppressWarnings("unused")
     public Object assignInherit(VirtualFrame virtualFrame, String variableName, Object variableValue, Object pos, RMissing environment, byte inherits, byte immediate) {
         controlVisibility();
@@ -120,7 +120,7 @@ public abstract class Assign extends RInvisibleBuiltinNode {
         return frameSlot != null || REnvironment.isGlobalEnvFrame(materializedFrame);
     }
 
-    @Specialization(order = 10, guards = "!doesInherit")
+    @Specialization(guards = "!doesInherit")
     @SuppressWarnings("unused")
     public Object assignNoInherit(VirtualFrame frame, String x, Object value, REnvironment pos, RMissing envir, byte inherits, byte immediate) {
         controlVisibility();
@@ -135,13 +135,13 @@ public abstract class Assign extends RInvisibleBuiltinNode {
         return value;
     }
 
-    @Specialization(order = 11, guards = "!doesInheritX")
+    @Specialization(guards = "!doesInheritX")
     @SuppressWarnings("unused")
     public Object assignNoInherit(VirtualFrame frame, String x, Object value, int pos, REnvironment envir, byte inherits, byte immediate) {
         return assignNoInherit(frame, x, value, envir, RMissing.instance, inherits, immediate);
     }
 
-    @Specialization(order = 12, guards = "doesInherit")
+    @Specialization(guards = "doesInherit")
     @SuppressWarnings("unused")
     public Object assignInherit(VirtualFrame frame, String x, Object value, REnvironment pos, RMissing envir, byte inherits, byte immediate) {
         controlVisibility();
@@ -164,19 +164,19 @@ public abstract class Assign extends RInvisibleBuiltinNode {
         return value;
     }
 
-    @Specialization(order = 20, guards = "!doesInherit")
+    @Specialization(guards = "!doesInherit")
     public Object assignNoInherit(VirtualFrame frame, RStringVector x, Object value, REnvironment pos, RMissing envir, byte inherits, byte immediate) {
         controlVisibility();
         return assignNoInherit(frame, x.getDataAt(0), value, pos, envir, inherits, immediate);
     }
 
-    @Specialization(order = 21, guards = "doesInherit")
+    @Specialization(guards = "doesInherit")
     public Object assignInherit(VirtualFrame frame, RStringVector x, Object value, REnvironment pos, RMissing envir, byte inherits, byte immediate) {
         controlVisibility();
         return assignInherit(frame, x.getDataAt(0), value, pos, envir, inherits, immediate);
     }
 
-    @Specialization(order = 22, guards = "doesInheritX")
+    @Specialization(guards = "doesInheritX")
     public Object assignInherit(VirtualFrame frame, RStringVector x, Object value, @SuppressWarnings("unused") int pos, REnvironment envir, byte inherits, byte immediate) {
         controlVisibility();
         return assignInherit(frame, x.getDataAt(0), value, envir, RMissing.instance, inherits, immediate);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AttachFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AttachFunctions.java
index e4e3203b07..88c79bb278 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AttachFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AttachFunctions.java
@@ -49,7 +49,7 @@ public class AttachFunctions {
             return new RNode[]{ConstantNode.create(RMissing.instance), ConstantNode.create(2), null, ConstantNode.create(RRuntime.LOGICAL_FALSE), ConstantNode.create(RRuntime.LOGICAL_FALSE)};
         }
 
-        @Specialization(order = 0)
+        @Specialization
         public REnvironment doAttach(@SuppressWarnings("unused") RNull what, int pos, String name) {
             controlVisibility();
             REnvironment env = new REnvironment.NewEnv(name);
@@ -57,24 +57,24 @@ public class AttachFunctions {
             return env;
         }
 
-        @Specialization(order = 1)
+        @Specialization
         public REnvironment doAttach(RNull what, double pos, RAbstractStringVector name) {
             return doAttach(what, (int) pos, name.getDataAt(0));
         }
 
-        @Specialization(order = 2)
+        @Specialization
         public REnvironment doAttach(REnvironment what, String name, @SuppressWarnings("unused") String unused) {
             controlVisibility();
             return doAttachEnv(what, 2, name);
         }
 
-        @Specialization(order = 3)
+        @Specialization
         public REnvironment doAttach(REnvironment what, int pos, String name) {
             controlVisibility();
             return doAttachEnv(what, pos, name);
         }
 
-        @Specialization(order = 4)
+        @Specialization
         public REnvironment doAttach(REnvironment what, double pos, String name) {
             controlVisibility();
             return doAttachEnv(what, (int) pos, name);
@@ -94,19 +94,19 @@ public class AttachFunctions {
 
         }
 
-        @Specialization(order = 10)
+        @Specialization
         public REnvironment doAttach(RList what, String name, @SuppressWarnings("unused") String unused) {
             controlVisibility();
             return doAttachList(what, 2, name);
         }
 
-        @Specialization(order = 11)
+        @Specialization
         public REnvironment doAttach(RList what, int pos, String name) {
             controlVisibility();
             return doAttachList(what, pos, name);
         }
 
-        @Specialization(order = 12)
+        @Specialization
         public REnvironment doAttach(RList what, double pos, String name) {
             controlVisibility();
             return doAttachList(what, (int) pos, name);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Attr.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Attr.java
index ecb8d5383d..7ffc55d243 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Attr.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Attr.java
@@ -50,7 +50,7 @@ public abstract class Attr extends RBuiltinNode {
         return val;
     }
 
-    @Specialization(order = 1, guards = "!isRowNamesAttr")
+    @Specialization(guards = "!isRowNamesAttr")
     public Object attr(RAbstractContainer container, String name) {
         controlVisibility();
         RAttributes attributes = container.getAttributes();
@@ -75,7 +75,7 @@ public abstract class Attr extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 2, guards = "isRowNamesAttr")
+    @Specialization(guards = "isRowNamesAttr")
     public Object attrRowNames(RAbstractContainer container, @SuppressWarnings("unused") String name) {
         controlVisibility();
         RAttributes attributes = container.getAttributes();
@@ -86,18 +86,18 @@ public abstract class Attr extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 10, guards = {"!emptyName", "isRowNamesAttr"})
+    @Specialization(guards = {"!emptyName", "isRowNamesAttr"})
     public Object attrRowNames(RAbstractContainer container, RStringVector name) {
         return attrRowNames(container, name.getDataAt(0));
     }
 
-    @Specialization(order = 11, guards = {"!emptyName", "!isRowNamesAttr"})
+    @Specialization(guards = {"!emptyName", "!isRowNamesAttr"})
     public Object attr(RAbstractContainer container, RStringVector name) {
         return attr(container, name.getDataAt(0));
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 12, guards = "emptyName")
+    @Specialization(guards = "emptyName")
     public Object attrEmtpyName(VirtualFrame frame, RAbstractContainer container, RStringVector name) {
         controlVisibility();
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.EXACTLY_ONE_WHICH);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColMeans.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColMeans.java
index 01348b299c..c9a8b29317 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColMeans.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColMeans.java
@@ -42,7 +42,7 @@ public abstract class ColMeans extends RBuiltinNode {
         return arguments;
     }
 
-    @Specialization(guards = "!isNaRm", order = 0)
+    @Specialization(guards = "!isNaRm")
     public RDoubleVector colMeansNaRmFalse(RDoubleVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[colNum];
@@ -68,7 +68,7 @@ public abstract class ColMeans extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA() && isComplete);
     }
 
-    @Specialization(guards = "isNaRm", order = 1)
+    @Specialization(guards = "isNaRm")
     public RDoubleVector colMeansNaRmTrue(RDoubleVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[colNum];
@@ -94,7 +94,7 @@ public abstract class ColMeans extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, isComplete);
     }
 
-    @Specialization(guards = "!isNaRm", order = 2)
+    @Specialization(guards = "!isNaRm")
     public RDoubleVector colMeansNaRmFalse(RLogicalVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[colNum];
@@ -114,7 +114,7 @@ public abstract class ColMeans extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA());
     }
 
-    @Specialization(guards = "isNaRm", order = 3)
+    @Specialization(guards = "isNaRm")
     public RDoubleVector colMeansNaRmTrue(RLogicalVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[colNum];
@@ -140,7 +140,7 @@ public abstract class ColMeans extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, isComplete);
     }
 
-    @Specialization(guards = "!isNaRm", order = 4)
+    @Specialization(guards = "!isNaRm")
     public RDoubleVector colMeansNaRmFalse(RIntVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[colNum];
@@ -160,7 +160,7 @@ public abstract class ColMeans extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA());
     }
 
-    @Specialization(guards = "isNaRm", order = 5)
+    @Specialization(guards = "isNaRm")
     public RDoubleVector colMeansNaRmTrue(RIntVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[colNum];
@@ -187,7 +187,7 @@ public abstract class ColMeans extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 6)
+    @Specialization
     public RDoubleVector colMeans(VirtualFrame frame, RAbstractStringVector x, int rowNum, int colNum, byte naRm) {
         controlVisibility();
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.X_NUMERIC);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColSums.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColSums.java
index e9975e3b1b..141759cdee 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColSums.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColSums.java
@@ -54,7 +54,7 @@ public abstract class ColSums extends RBuiltinNode {
         return arguments;
     }
 
-    @Specialization(guards = "!isNaRm", order = 0)
+    @Specialization(guards = "!isNaRm")
     public RDoubleVector colSumsNaRmFalse(RDoubleVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[colNum];
@@ -80,7 +80,7 @@ public abstract class ColSums extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA() && isComplete);
     }
 
-    @Specialization(guards = "isNaRm", order = 1)
+    @Specialization(guards = "isNaRm")
     public RDoubleVector colSumsNaRmTrue(RDoubleVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[colNum];
@@ -98,7 +98,7 @@ public abstract class ColSums extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(guards = "!isNaRm", order = 2)
+    @Specialization(guards = "!isNaRm")
     public RDoubleVector colSumsNaRmFalse(RLogicalVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[colNum];
@@ -118,7 +118,7 @@ public abstract class ColSums extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA());
     }
 
-    @Specialization(guards = "isNaRm", order = 3)
+    @Specialization(guards = "isNaRm")
     public RDoubleVector colSumsNaRmTrue(RLogicalVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[colNum];
@@ -136,7 +136,7 @@ public abstract class ColSums extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(guards = "!isNaRm", order = 4)
+    @Specialization(guards = "!isNaRm")
     public RDoubleVector colSumsNaRmFalse(RIntVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[colNum];
@@ -156,7 +156,7 @@ public abstract class ColSums extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA());
     }
 
-    @Specialization(guards = "isNaRm", order = 5)
+    @Specialization(guards = "isNaRm")
     public RDoubleVector colSumsNaRmTrue(RIntVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[colNum];
@@ -175,7 +175,7 @@ public abstract class ColSums extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 6)
+    @Specialization
     public RDoubleVector colSums(VirtualFrame frame, RAbstractStringVector x, int rowNum, int colNum, byte naRm) {
         controlVisibility();
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.X_NUMERIC);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Combine.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Combine.java
index 938e132f73..ec83706536 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Combine.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Combine.java
@@ -394,14 +394,14 @@ public abstract class Combine extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 1, guards = "isNullPrecedence")
+    @Specialization(guards = "isNullPrecedence")
     @ExplodeLoop
     public RNull allNull(VirtualFrame frame, Object[] array) {
         controlVisibility();
         return RNull.instance;
     }
 
-    @Specialization(order = 2, guards = {"isLogicalPrecedence", "noArgNames"})
+    @Specialization(guards = {"isLogicalPrecedence", "noArgNames"})
     @ExplodeLoop
     public Object allLogical(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -413,7 +413,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 3, guards = {"isLogicalPrecedence", "hasArgNames"})
+    @Specialization(guards = {"isLogicalPrecedence", "hasArgNames"})
     @ExplodeLoop
     public Object allLogicalArgs(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -427,7 +427,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 4, guards = {"isIntegerPrecedence", "noArgNames"})
+    @Specialization(guards = {"isIntegerPrecedence", "noArgNames"})
     @ExplodeLoop
     public Object allInt(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -439,7 +439,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 5, guards = {"isIntegerPrecedence", "hasArgNames"})
+    @Specialization(guards = {"isIntegerPrecedence", "hasArgNames"})
     @ExplodeLoop
     public Object allIntArgs(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -453,7 +453,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 6, guards = {"isDoublePrecedence", "noArgNames"})
+    @Specialization(guards = {"isDoublePrecedence", "noArgNames"})
     @ExplodeLoop
     public Object allDouble(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -465,7 +465,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 7, guards = {"isDoublePrecedence", "hasArgNames"})
+    @Specialization(guards = {"isDoublePrecedence", "hasArgNames"})
     @ExplodeLoop
     public Object allDoubleArgs(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -479,7 +479,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 8, guards = {"isComplexPrecedence", "noArgNames"})
+    @Specialization(guards = {"isComplexPrecedence", "noArgNames"})
     @ExplodeLoop
     public Object allComplex(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -491,7 +491,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 9, guards = {"isComplexPrecedence", "hasArgNames"})
+    @Specialization(guards = {"isComplexPrecedence", "hasArgNames"})
     @ExplodeLoop
     public Object allComplexArgs(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -505,7 +505,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 10, guards = {"isStringPrecedence", "noArgNames"})
+    @Specialization(guards = {"isStringPrecedence", "noArgNames"})
     @ExplodeLoop
     public Object allString(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -517,7 +517,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 11, guards = {"isStringPrecedence", "hasArgNames"})
+    @Specialization(guards = {"isStringPrecedence", "hasArgNames"})
     @ExplodeLoop
     public Object allStringArgs(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -531,7 +531,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 12, guards = {"isRawPrecedence", "noArgNames"})
+    @Specialization(guards = {"isRawPrecedence", "noArgNames"})
     @ExplodeLoop
     public Object allRaw(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -543,7 +543,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 13, guards = {"isRawPrecedence", "hasArgNames"})
+    @Specialization(guards = {"isRawPrecedence", "hasArgNames"})
     @ExplodeLoop
     public Object allRawArgs(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -557,7 +557,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 14, guards = {"isListPrecedence", "noArgNames"})
+    @Specialization(guards = {"isListPrecedence", "noArgNames"})
     @ExplodeLoop
     public Object list(VirtualFrame frame, Object[] array) {
         controlVisibility();
@@ -569,7 +569,7 @@ public abstract class Combine extends RBuiltinNode {
         return current;
     }
 
-    @Specialization(order = 15, guards = {"isListPrecedence", "hasArgNames"})
+    @Specialization(guards = {"isListPrecedence", "hasArgNames"})
     public Object listArgs(VirtualFrame frame, Object[] array) {
         controlVisibility();
         RAbstractVector currentVector = castVector(frame, array[0]);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ConnectionFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ConnectionFunctions.java
index 06fb105621..fb35ae7431 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ConnectionFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ConnectionFunctions.java
@@ -148,7 +148,7 @@ public abstract class ConnectionFunctions {
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 100)
+        @Specialization
         public Object file(VirtualFrame frame, Object description, Object open, Object blocking, Object encoding, Object raw) {
             controlVisibility();
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_UNNAMED_ARGUMENTS);
@@ -200,7 +200,7 @@ public abstract class ConnectionFunctions {
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 100)
+        @Specialization
         public Object readLines(VirtualFrame frame, Object con, Object n, Object ok, Object warn, Object encoding) {
             controlVisibility();
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_UNNAMED_ARGUMENTS);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Crossprod.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Crossprod.java
index 0b00018ac8..c957544688 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Crossprod.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Crossprod.java
@@ -65,13 +65,13 @@ public abstract class Crossprod extends RBuiltinNode {
         return matMult(frame, transpose(frame, a), b);
     }
 
-    @Specialization(order = 1, guards = "!matdouble")
+    @Specialization(guards = "!matdouble")
     public Object crossprod(VirtualFrame frame, RAbstractVector b, @SuppressWarnings("unused") RNull a) {
         controlVisibility();
         return matMult(frame, transpose(frame, b), b);
     }
 
-    @Specialization(order = 2, guards = "matdouble")
+    @Specialization(guards = "matdouble")
     public Object crossprodDoubleMatrix(RAbstractDoubleVector a, @SuppressWarnings("unused") RNull b) {
         controlVisibility();
         final int aCols = a.getDimensions()[1];
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DelayedAssign.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DelayedAssign.java
index 1c25c0c436..1eb0333964 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DelayedAssign.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DelayedAssign.java
@@ -41,23 +41,23 @@ public abstract class DelayedAssign extends RInvisibleBuiltinNode {
         return new RNode[]{ConstantNode.create(RMissing.instance), ConstantNode.create(RMissing.instance), ConstantNode.create(RMissing.instance), ConstantNode.create(RMissing.instance)};
     }
 
-    @Specialization(order = 0)
+    @Specialization
     public Object doDelayedAssign(VirtualFrame frame, RAbstractStringVector nameVec, RPromise value, @SuppressWarnings("unused") RMissing evalEnv, @SuppressWarnings("unused") RMissing assignEnv) {
         REnvironment curEnv = curEnv(frame);
         return doDelayedAssign(frame, nameVec, value, curEnv, curEnv);
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public Object doDelayedAssign(VirtualFrame frame, RAbstractStringVector nameVec, RPromise value, @SuppressWarnings("unused") RMissing evalEnv, REnvironment assignEnv) {
         return doDelayedAssign(frame, nameVec, value, curEnv(frame), assignEnv);
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public Object doDelayedAssign(VirtualFrame frame, RAbstractStringVector nameVec, RPromise value, REnvironment evalEnv, @SuppressWarnings("unused") RMissing assignEnv) {
         return doDelayedAssign(frame, nameVec, value, evalEnv, curEnv(frame));
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public Object doDelayedAssign(VirtualFrame frame, RAbstractStringVector nameVec, RPromise value, REnvironment evalEnv, REnvironment assignEnv) {
         controlVisibility();
         String name = nameVec.getDataAt(0);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Diag.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Diag.java
index b333ec5eec..b17bbcfafd 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Diag.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Diag.java
@@ -50,13 +50,13 @@ public abstract class Diag extends RBuiltinNode {
         return new RNode[]{children[0], CastIntegerNodeFactory.create(children[1], false, false, false), CastIntegerNodeFactory.create(children[2], false, false, false)};
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public RNull dim(RNull vector, int rows, int cols) {
         controlVisibility();
         return RNull.instance;
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public RIntVector dim(int val, int rows, int cols) {
         controlVisibility();
         int[] data = new int[rows * cols];
@@ -66,12 +66,12 @@ public abstract class Diag extends RBuiltinNode {
         return RDataFactory.createIntVector(data, RDataFactory.COMPLETE_VECTOR, new int[]{rows, cols});
     }
 
-    @Specialization(order = 11)
+    @Specialization
     public RIntVector dim(int val, int rows, RMissing cols) {
         return dim(val, rows, rows);
     }
 
-    @Specialization(order = 20)
+    @Specialization
     public RDoubleVector dim(double val, int rows, int cols) {
         controlVisibility();
         double[] data = new double[rows * cols];
@@ -81,12 +81,12 @@ public abstract class Diag extends RBuiltinNode {
         return RDataFactory.createDoubleVector(data, RDataFactory.COMPLETE_VECTOR, new int[]{rows, cols});
     }
 
-    @Specialization(order = 21)
+    @Specialization
     public RDoubleVector dim(double val, int rows, RMissing cols) {
         return dim(val, rows, rows);
     }
 
-    @Specialization(order = 30)
+    @Specialization
     public RLogicalVector dim(byte val, int rows, int cols) {
         controlVisibility();
         byte[] data = new byte[rows * cols];
@@ -96,12 +96,12 @@ public abstract class Diag extends RBuiltinNode {
         return RDataFactory.createLogicalVector(data, RDataFactory.COMPLETE_VECTOR, new int[]{rows, cols});
     }
 
-    @Specialization(order = 31)
+    @Specialization
     public RLogicalVector dim(byte val, int rows, RMissing cols) {
         return dim(val, rows, rows);
     }
 
-    @Specialization(order = 100, guards = "isMatrix")
+    @Specialization(guards = "isMatrix")
     public RIntVector dimWithDimensions(RIntVector vector, Object rows, Object cols) {
         controlVisibility();
         int size = Math.min(vector.getDimensions()[0], vector.getDimensions()[1]);
@@ -118,7 +118,7 @@ public abstract class Diag extends RBuiltinNode {
         return RDataFactory.createIntVector(result, check.neverSeenNA());
     }
 
-    @Specialization(order = 110, guards = "isMatrix")
+    @Specialization(guards = "isMatrix")
     public RDoubleVector dimWithDimensions(RDoubleVector vector, Object rows, Object cols) {
         controlVisibility();
         int size = Math.min(vector.getDimensions()[0], vector.getDimensions()[1]);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DotLibpaths.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DotLibpaths.java
index 3be5e8b082..50ad1b3ab2 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DotLibpaths.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DotLibpaths.java
@@ -54,13 +54,13 @@ import com.oracle.truffle.r.runtime.data.model.*;
  */
 @RBuiltin(name = ".libPaths", kind = SUBSTITUTE, parameterNames = {"new"})
 public abstract class DotLibpaths extends RBuiltinNode {
-    @Specialization(order = 0)
+    @Specialization
     public Object libPathsVec(@SuppressWarnings("unused") RMissing missing) {
         controlVisibility();
         return RDataFactory.createStringVector(LibPaths.dotLibPaths(), RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public Object libPathsVec(RAbstractStringVector pathVec) {
         controlVisibility();
         ArrayList<String> resultsList = new ArrayList<>(pathVec.getLength());
@@ -94,7 +94,7 @@ public abstract class DotLibpaths extends RBuiltinNode {
         return array;
     }
 
-    @Specialization(order = 100)
+    @Specialization
     public Object libPathsGeneric(VirtualFrame frame, @SuppressWarnings("unused") Object x) {
         controlVisibility();
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, "path");
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EncodeString.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EncodeString.java
index 45fa6c76e5..36481557f7 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EncodeString.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EncodeString.java
@@ -86,7 +86,7 @@ public abstract class EncodeString extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 0, guards = {"isValidWidth", "leftJustify", "isEncodeNA"})
+    @Specialization(guards = {"isValidWidth", "leftJustify", "isEncodeNA"})
     public RStringVector encodeStringLeftJustifyEncodeNA(RAbstractStringVector x, int width, RAbstractStringVector quote, RAbstractIntVector justify, byte encodeNA) {
         final String quoteEl = quote.getDataAt(0);
         final int maxElWidth = computeWidth(x, width, quoteEl);
@@ -107,7 +107,7 @@ public abstract class EncodeString extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1, guards = {"isValidWidth", "leftJustify", "!isEncodeNA"})
+    @Specialization(guards = {"isValidWidth", "leftJustify", "!isEncodeNA"})
     public RStringVector encodeStringLeftJustify(RAbstractStringVector x, int width, RAbstractStringVector quote, RAbstractIntVector justify, byte encodeNA) {
         final String quoteEl = quote.getDataAt(0);
         final int maxElWidth = computeWidth(x, width, quoteEl);
@@ -125,7 +125,7 @@ public abstract class EncodeString extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 2, guards = {"isValidWidth", "rightJustify", "isEncodeNA"})
+    @Specialization(guards = {"isValidWidth", "rightJustify", "isEncodeNA"})
     public RStringVector encodeStringRightJustifyEncodeNA(RAbstractStringVector x, int width, RAbstractStringVector quote, RAbstractIntVector justify, byte encodeNA) {
         final String quoteEl = quote.getDataAt(0);
         final int maxElWidth = computeWidth(x, width, quoteEl);
@@ -146,7 +146,7 @@ public abstract class EncodeString extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 3, guards = {"isValidWidth", "rightJustify", "!isEncodeNA"})
+    @Specialization(guards = {"isValidWidth", "rightJustify", "!isEncodeNA"})
     public RStringVector encodeStringRightJustify(RAbstractStringVector x, int width, RAbstractStringVector quote, RAbstractIntVector justify, byte encodeNA) {
         final String quoteEl = quote.getDataAt(0);
         final int maxElWidth = computeWidth(x, width, quoteEl);
@@ -164,7 +164,7 @@ public abstract class EncodeString extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 4, guards = {"isValidWidth", "centerJustify", "isEncodeNA"})
+    @Specialization(guards = {"isValidWidth", "centerJustify", "isEncodeNA"})
     public RStringVector encodeStringCenterJustifyEncodeNA(RAbstractStringVector x, int width, RAbstractStringVector quote, RAbstractIntVector justify, byte encodeNA) {
         final String quoteEl = quote.getDataAt(0);
         final int maxElWidth = computeWidth(x, width, quoteEl);
@@ -192,7 +192,7 @@ public abstract class EncodeString extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 5, guards = {"isValidWidth", "centerJustify", "!isEncodeNA"})
+    @Specialization(guards = {"isValidWidth", "centerJustify", "!isEncodeNA"})
     public RStringVector encodeStringCenterJustify(RAbstractStringVector x, int width, RAbstractStringVector quote, RAbstractIntVector justify, byte encodeNA) {
         final String quoteEl = quote.getDataAt(0);
         final int maxElWidth = computeWidth(x, width, quoteEl);
@@ -256,7 +256,7 @@ public abstract class EncodeString extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 11, guards = {"isValidWidth", "noJustify", "isEncodeNA"})
+    @Specialization(guards = {"isValidWidth", "noJustify", "isEncodeNA"})
     public RStringVector encodeStringNoJustifyEncodeNA(RAbstractStringVector x, int width, RAbstractStringVector quote, RAbstractIntVector justify, byte encodeNA) {
         final String quoteEl = quote.getDataAt(0);
         final String[] result = new String[x.getLength()];
@@ -273,7 +273,7 @@ public abstract class EncodeString extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 12, guards = {"isValidWidth", "noJustify", "!isEncodeNA"})
+    @Specialization(guards = {"isValidWidth", "noJustify", "!isEncodeNA"})
     public RStringVector encodeStringNoJustify(RAbstractStringVector x, int width, RAbstractStringVector quote, RAbstractIntVector justify, byte encodeNA) {
         final String quoteEl = quote.getDataAt(0);
         final String[] result = new String[x.getLength()];
@@ -290,31 +290,31 @@ public abstract class EncodeString extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 6, guards = "!isString")
+    @Specialization(guards = "!isString")
     public RStringVector encodeStringInvalidFirstArgument(VirtualFrame frame, Object x, int width, RAbstractStringVector quote, RAbstractIntVector justify, byte encodeNA) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.CHAR_VEC_ARGUMENT);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 7, guards = "!isValidWidth")
+    @Specialization(guards = "!isValidWidth")
     public RStringVector encodeStringInvalidWidth(VirtualFrame frame, RAbstractStringVector x, int width, RAbstractStringVector quote, RAbstractIntVector justify, byte encodeNA) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_VALUE, "width");
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 8, guards = "!isValidQuote")
+    @Specialization(guards = "!isValidQuote")
     public RStringVector encodeStringInvalidQuote(VirtualFrame frame, RAbstractStringVector x, int width, Object quote, RAbstractIntVector justify, byte encodeNA) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_VALUE, "quote");
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 9, guards = "!isValidJustify")
+    @Specialization(guards = "!isValidJustify")
     public RStringVector encodeStringInvalidJustify(VirtualFrame frame, RAbstractStringVector x, int width, RAbstractStringVector quote, RAbstractIntVector justify, byte encodeNA) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_VALUE, "justify");
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 10, guards = "!isValidEncodeNA")
+    @Specialization(guards = "!isValidEncodeNA")
     public RStringVector encodeStringInvalidEncodeNA(VirtualFrame frame, RAbstractStringVector x, int width, RAbstractStringVector quote, RAbstractIntVector justify, byte encodeNA) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_VALUE, "na.encode");
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EnvFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EnvFunctions.java
index 03afe91674..2942589b47 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EnvFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EnvFunctions.java
@@ -174,7 +174,7 @@ public class EnvFunctions {
             return new RNode[]{ConstantNode.create(RNull.instance)};
         }
 
-        @Specialization(order = 0)
+        @Specialization
         public Object environment(@SuppressWarnings("unused") RNull x) {
             controlVisibility();
             Frame callerFrame = Utils.getCallerFrame(FrameAccess.MATERIALIZE);
@@ -186,7 +186,7 @@ public class EnvFunctions {
          * cannot both have a specialization for {@link RFunction} and one for {@link Object}, but
          * an object that is not an {@link RFunction} is legal and must return {@code NULL}.
          */
-        @Specialization(order = 1)
+        @Specialization
         public Object environment(Object funcArg) {
             controlVisibility();
             if (funcArg instanceof RFunction) {
@@ -217,7 +217,7 @@ public class EnvFunctions {
             return env.getName();
         }
 
-        @Specialization(order = 100)
+        @Specialization
         public String environmentName(@SuppressWarnings("unused") Object env) {
             controlVisibility();
             // Not an error according to GnuR
@@ -273,7 +273,7 @@ public class EnvFunctions {
             return new RNode[]{ConstantNode.create(RMissing.instance), ConstantNode.create(RRuntime.LOGICAL_FALSE)};
         }
 
-        @Specialization(order = 0)
+        @Specialization
         public Object lockEnvironment(REnvironment env, byte bindings) {
             controlVisibility();
             env.lock(bindings == RRuntime.LOGICAL_TRUE);
@@ -284,7 +284,7 @@ public class EnvFunctions {
 
     @RBuiltin(name = "environmentIsLocked", kind = INTERNAL, parameterNames = {"env"})
     public abstract static class EnvironmentIsLocked extends RBuiltinNode {
-        @Specialization(order = 0)
+        @Specialization
         public Object lockEnvironment(REnvironment env) {
             controlVisibility();
             return RDataFactory.createLogicalVectorFromScalar(env.isLocked());
@@ -294,7 +294,7 @@ public class EnvFunctions {
 
     @RBuiltin(name = "lockBinding", kind = INTERNAL, parameterNames = {"sym", "env"})
     public abstract static class LockBinding extends RInvisibleBuiltinNode {
-        @Specialization(order = 0)
+        @Specialization
         public Object lockBinding(String sym, REnvironment env) {
             controlVisibility();
             env.lockBinding(sym);
@@ -305,7 +305,7 @@ public class EnvFunctions {
 
     @RBuiltin(name = "unlockBinding", kind = INTERNAL, parameterNames = {"sym", "env"})
     public abstract static class UnlockBinding extends RInvisibleBuiltinNode {
-        @Specialization(order = 0)
+        @Specialization
         public Object unlockBinding(String sym, REnvironment env) {
             controlVisibility();
             env.unlockBinding(sym);
@@ -316,7 +316,7 @@ public class EnvFunctions {
 
     @RBuiltin(name = "bindingIsLocked", kind = INTERNAL, parameterNames = {"sym", "env"})
     public abstract static class BindingIsLocked extends RBuiltinNode {
-        @Specialization(order = 0)
+        @Specialization
         public Object bindingIsLocked(String sym, REnvironment env) {
             controlVisibility();
             return RDataFactory.createLogicalVectorFromScalar(env.bindingIsLocked(sym));
@@ -327,7 +327,7 @@ public class EnvFunctions {
     @RBuiltin(name = "makeActiveBinding", kind = INTERNAL, parameterNames = {"sym", "fun", "env"})
     public abstract static class MakeActiveBinding extends RInvisibleBuiltinNode {
         @SuppressWarnings("unused")
-        @Specialization(order = 0)
+        @Specialization
         public Object makeActiveBinding(Object sym, Object fun, Object env) {
             // TODO implement
             controlVisibility();
@@ -338,7 +338,7 @@ public class EnvFunctions {
     @RBuiltin(name = "bindingIsActive", kind = INTERNAL, parameterNames = {"sym", "env"})
     public abstract static class BindingIsActive extends RInvisibleBuiltinNode {
         @SuppressWarnings("unused")
-        @Specialization(order = 0)
+        @Specialization
         public Object bindingIsActive(Object sym, Object fun, Object env) {
             // TODO implement
             controlVisibility();
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Exists.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Exists.java
index b934fb00d7..24d8f6d5a7 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Exists.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Exists.java
@@ -48,7 +48,7 @@ public abstract class Exists extends RBuiltinNode {
                         ConstantNode.create(RRuntime.TYPE_ANY), ConstantNode.create(RRuntime.LOGICAL_TRUE)};
     }
 
-    @Specialization(order = 10, guards = "noEnv")
+    @Specialization(guards = "noEnv")
     @SuppressWarnings("unused")
     public byte existsString(VirtualFrame frm, String name, int where, RMissing envir, Object frame, String mode, byte inherits) {
         controlVisibility();
@@ -64,7 +64,7 @@ public abstract class Exists extends RBuiltinNode {
         return RRuntime.LOGICAL_TRUE;
     }
 
-    @Specialization(order = 11)
+    @Specialization
     @SuppressWarnings("unused")
     public byte existsStringEnv(String name, REnvironment where, RMissing envir, Object frame, String mode, byte inherits) {
         controlVisibility();
@@ -79,19 +79,19 @@ public abstract class Exists extends RBuiltinNode {
         return RRuntime.LOGICAL_FALSE;
     }
 
-    @Specialization(order = 12)
+    @Specialization
     public byte existsStringEnv(RStringVector name, REnvironment where, RMissing envir, Object frame, String mode, byte inherits) {
         controlVisibility();
         return existsStringEnv(name.getDataAt(0), where, envir, frame, mode, inherits);
     }
 
-    @Specialization(order = 13)
+    @Specialization
     public byte existsStringEnv(String name, @SuppressWarnings("unused") int where, REnvironment envir, Object frame, String mode, byte inherits) {
         controlVisibility();
         return existsStringEnv(name, envir, RMissing.instance, frame, mode, inherits);
     }
 
-    @Specialization(order = 14)
+    @Specialization
     public byte existsStringEnv(RStringVector name, int where, REnvironment envir, Object frame, String mode, byte inherits) {
         controlVisibility();
         return existsStringEnv(name.getDataAt(0), where, envir, frame, mode, inherits);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FileFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FileFunctions.java
index ed83767b2b..3df487de6b 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FileFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/FileFunctions.java
@@ -73,7 +73,7 @@ public class FileFunctions {
             return RDataFactory.createLogicalVector(status, RDataFactory.COMPLETE_VECTOR);
         }
 
-        @Specialization(order = 100)
+        @Specialization
         public Object doFileCreate(VirtualFrame frame, @SuppressWarnings("unused") Object x, @SuppressWarnings("unused") Object y) {
             controlVisibility();
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, "file");
@@ -164,7 +164,7 @@ public class FileFunctions {
             return doFileLink(frame, vecFrom, vecTo, false);
         }
 
-        @Specialization(order = 100)
+        @Specialization
         public Object doFileLink(VirtualFrame frame, @SuppressWarnings("unused") Object from, @SuppressWarnings("unused") Object to) {
             controlVisibility();
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, "file");
@@ -179,7 +179,7 @@ public class FileFunctions {
             return doFileLink(frame, vecFrom, vecTo, true);
         }
 
-        @Specialization(order = 100)
+        @Specialization
         public Object doFileSymLink(VirtualFrame frame, @SuppressWarnings("unused") Object from, @SuppressWarnings("unused") Object to) {
             controlVisibility();
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, "file");
@@ -209,7 +209,7 @@ public class FileFunctions {
             return RDataFactory.createLogicalVector(status, RDataFactory.COMPLETE_VECTOR);
         }
 
-        @Specialization(order = 100)
+        @Specialization
         public Object doFileRemove(VirtualFrame frame, @SuppressWarnings("unused") Object x) {
             controlVisibility();
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, "file");
@@ -244,7 +244,7 @@ public class FileFunctions {
             return RDataFactory.createLogicalVector(status, RDataFactory.COMPLETE_VECTOR);
         }
 
-        @Specialization(order = 100)
+        @Specialization
         public Object doFileRename(VirtualFrame frame, @SuppressWarnings("unused") Object from, @SuppressWarnings("unused") Object to) {
             controlVisibility();
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, "file");
@@ -272,7 +272,7 @@ public class FileFunctions {
 
         }
 
-        @Specialization(order = 100)
+        @Specialization
         public Object doFileExists(VirtualFrame frame, @SuppressWarnings("unused") Object vec) {
             controlVisibility();
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, "file");
@@ -342,17 +342,17 @@ public class FileFunctions {
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 0, guards = "lengthZero")
+        @Specialization(guards = "lengthZero")
         public RStringVector doFilePathZero(RAbstractStringVector vec, String fsep) {
             return RDataFactory.createEmptyStringVector();
         }
 
-        @Specialization(order = 1, guards = "!lengthZero")
+        @Specialization(guards = "!lengthZero")
         public RStringVector doFilePath(RAbstractStringVector vec, String fsep) {
             return doFilePath(new Object[]{vec}, fsep);
         }
 
-        @Specialization(order = 2, guards = "simpleArgs")
+        @Specialization(guards = "simpleArgs")
         public RStringVector doFilePath(Object[] args, String fsep) {
             StringBuffer sb = new StringBuffer();
             for (int i = 0; i < args.length; i++) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ForeignFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ForeignFunctions.java
index 276b297221..41645c3723 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ForeignFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ForeignFunctions.java
@@ -85,7 +85,7 @@ public class ForeignFunctions {
         private static final RStringVector DQRDC2_NAMES = RDataFactory.createStringVector(new String[]{"qr", E, E, E, E, "rank", "qraux", "pivot", E}, RDataFactory.COMPLETE_VECTOR);
 
         @SuppressWarnings("unused")
-        @Specialization(order = 0, guards = "dqrdc2")
+        @Specialization(guards = "dqrdc2")
         public RList fortranDqrdc2(VirtualFrame frame, String f, Object[] args, byte naok, byte dup, RMissing rPackage, RMissing encoding) {
             controlVisibility();
             try {
@@ -126,7 +126,7 @@ public class ForeignFunctions {
         private static final RStringVector DQRCF_NAMES = RDataFactory.createStringVector(new String[]{E, E, E, E, E, E, "coef", "info"}, RDataFactory.COMPLETE_VECTOR);
 
         @SuppressWarnings("unused")
-        @Specialization(order = 1, guards = "dqrcf")
+        @Specialization(guards = "dqrcf")
         public RList fortranDqrcf(VirtualFrame frame, String f, Object[] args, byte naok, byte dup, RMissing rPackage, RMissing encoding) {
             controlVisibility();
             try {
@@ -317,7 +317,7 @@ public class ForeignFunctions {
 
         // TODO: handle more argument types (this is sufficient to run the b25 benchmarks)
         @SuppressWarnings("unused")
-        @Specialization(order = 1, guards = "fft")
+        @Specialization(guards = "fft")
         public RComplexVector callFFT(VirtualFrame frame, RList f, Object[] args) {
             controlVisibility();
             RComplexVector zVec = (RComplexVector) castComplex(frame, castVector(frame, args[0]));
@@ -397,7 +397,7 @@ public class ForeignFunctions {
 
         // Translated from GnuR: library/methods/src/methods_list_dispatch.c
         @SuppressWarnings("unused")
-        @Specialization(order = 2, guards = "methodsPackageMetaName")
+        @Specialization(guards = "methodsPackageMetaName")
         public String callMethodsPackageMetaName(VirtualFrame frame, RList f, Object[] args) {
             controlVisibility();
             // TODO proper error checks
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Format.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Format.java
index cd1ec99213..ef721a42fe 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Format.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Format.java
@@ -86,7 +86,7 @@ public abstract class Format extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1, guards = "wrongArgsObject")
+    @Specialization(guards = "wrongArgsObject")
     String formatWrongArgs(Object value, RLogicalVector trimVec, RIntVector digitsVec, RIntVector nsmallVec, RIntVector widthVec, RIntVector justifyVec, RLogicalVector naEncodeVec,
                     RLogicalVector sciVec) {
         return null;
@@ -107,7 +107,7 @@ public abstract class Format extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 10, guards = "!wrongArgs")
+    @Specialization(guards = "!wrongArgs")
     RStringVector format(VirtualFrame frame, RAbstractLogicalVector value, RLogicalVector trimVec, RIntVector digitsVec, RIntVector nsmallVec, RIntVector widthVec, RIntVector justifyVec,
                     RLogicalVector naEncodeVec, RAbstractVector sciVec) {
         if (value.getLength() == 0) {
@@ -163,7 +163,7 @@ public abstract class Format extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 20, guards = "!wrongArgs")
+    @Specialization(guards = "!wrongArgs")
     RStringVector format(VirtualFrame frame, RAbstractIntVector value, RLogicalVector trimVec, RIntVector digitsVec, RIntVector nsmallVec, RIntVector widthVec, RIntVector justifyVec,
                     RLogicalVector naEncodeVec, RAbstractVector sciVec) {
         if (value.getLength() == 0) {
@@ -218,7 +218,7 @@ public abstract class Format extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 30, guards = "!wrongArgs")
+    @Specialization(guards = "!wrongArgs")
     RStringVector format(VirtualFrame frame, RAbstractDoubleVector value, RLogicalVector trimVec, RIntVector digitsVec, RIntVector nsmallVec, RIntVector widthVec, RIntVector justifyVec,
                     RLogicalVector naEncodeVec, RAbstractVector sciVec) {
         byte trim = trimVec.getLength() > 0 ? trimVec.getDataAt(0) : RRuntime.LOGICAL_NA;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Get.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Get.java
index 9e3308e01c..af4023eb0d 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Get.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Get.java
@@ -57,7 +57,7 @@ public abstract class Get extends RBuiltinNode {
 
     public abstract Object execute(VirtualFrame frame, String name, int pos, RMissing envir, String mode, byte inherits);
 
-    @Specialization(order = 0)
+    @Specialization
     @SuppressWarnings("unused")
     public Object get(VirtualFrame frame, String x, int pos, RMissing envir, String mode, byte inherits) {
         controlVisibility();
@@ -87,7 +87,7 @@ public abstract class Get extends RBuiltinNode {
         return lookup;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     @SuppressWarnings("unused")
     public Object get(VirtualFrame frame, RAbstractStringVector x, REnvironment pos, RMissing envir, String mode, byte inherits) {
         controlVisibility();
@@ -109,7 +109,7 @@ public abstract class Get extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 2)
+    @Specialization
     @SuppressWarnings("unused")
     public Object get(VirtualFrame frame, RAbstractStringVector x, int pos, REnvironment envir, String mode, byte inherits) {
         return get(frame, x, envir, RMissing.instance, mode, inherits);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetClass.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetClass.java
index 7df335c043..a34b17337f 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetClass.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetClass.java
@@ -22,13 +22,13 @@ import com.oracle.truffle.r.runtime.data.model.*;
 @RBuiltin(name = "class", kind = PRIMITIVE, parameterNames = {"x"})
 public abstract class GetClass extends RBuiltinNode {
 
-    @Specialization(guards = "isObject", order = 0)
+    @Specialization(guards = "isObject")
     public Object getClassForObject(RAbstractContainer arg) {
         controlVisibility();
         return arg.getClassHierarchy();
     }
 
-    @Specialization(guards = "!isObject", order = 1)
+    @Specialization(guards = "!isObject")
     public Object getClass(RAbstractContainer arg) {
         controlVisibility();
         final String klass = arg.getClassHierarchy().getDataAt(0);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java
index 00d6d922e7..2c4962bbb5 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java
@@ -171,7 +171,7 @@ public class GrepFunctions {
                             ConstantNode.create(RRuntime.LOGICAL_FALSE), ConstantNode.create(RRuntime.LOGICAL_FALSE), ConstantNode.create(RRuntime.LOGICAL_FALSE)};
         }
 
-        @Specialization(order = 1)
+        @Specialization
         public String sub(String patternArg, String replacement, String x, byte ignoreCase, byte perl, byte fixed, byte useBytes) {
             controlVisibility();
             checkExtraArgs(ignoreCase, perl, fixed, useBytes, RRuntime.LOGICAL_FALSE);
@@ -179,7 +179,7 @@ public class GrepFunctions {
             return replaceMatch(pattern, replacement, x);
         }
 
-        @Specialization(order = 10)
+        @Specialization
         public RStringVector sub(String patternArg, String replacement, RStringVector vector, byte ignoreCase, byte perl, byte fixed, byte useBytes) {
             controlVisibility();
             checkExtraArgs(ignoreCase, perl, fixed, useBytes, RRuntime.LOGICAL_FALSE);
@@ -187,7 +187,7 @@ public class GrepFunctions {
             return doSub(pattern, replacement, vector);
         }
 
-        @Specialization(order = 12)
+        @Specialization
         public RStringVector sub(RStringVector patternArg, String replacement, RStringVector vector, byte ignoreCase, byte perl, byte fixed, byte useBytes) {
             controlVisibility();
             checkExtraArgs(ignoreCase, perl, fixed, useBytes, RRuntime.LOGICAL_FALSE);
@@ -196,7 +196,7 @@ public class GrepFunctions {
             return doSub(pattern, replacement, vector);
         }
 
-        @Specialization(order = 13)
+        @Specialization
         public RStringVector sub(String patternArg, RStringVector replacement, RStringVector vector, byte ignoreCase, byte perl, byte fixed, byte useBytes) {
             controlVisibility();
             checkExtraArgs(ignoreCase, perl, fixed, useBytes, RRuntime.LOGICAL_FALSE);
@@ -231,7 +231,7 @@ public class GrepFunctions {
                             ConstantNode.create(RRuntime.LOGICAL_FALSE), ConstantNode.create(RRuntime.LOGICAL_FALSE), ConstantNode.create(RRuntime.LOGICAL_FALSE)};
         }
 
-        @Specialization(order = 1)
+        @Specialization
         @Override
         public String sub(String patternArg, String replacement, String x, byte ignoreCase, byte perl, byte fixed, byte useBytes) {
             controlVisibility();
@@ -240,7 +240,7 @@ public class GrepFunctions {
             return replaceMatch(pattern, replacement, x);
         }
 
-        @Specialization(order = 2)
+        @Specialization
         public String sub(RAbstractStringVector patternArg, RAbstractStringVector replacement, RAbstractStringVector x, byte ignoreCase, byte perl, byte fixed, byte useBytes) {
             controlVisibility();
             checkExtraArgs(ignoreCase, perl, fixed, useBytes, RRuntime.LOGICAL_FALSE);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Identical.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Identical.java
index d01d8b29fc..739f07be57 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Identical.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Identical.java
@@ -44,7 +44,7 @@ public abstract class Identical extends RBuiltinNode {
                         ConstantNode.create(RRuntime.LOGICAL_TRUE), ConstantNode.create(RRuntime.LOGICAL_TRUE), ConstantNode.create(RRuntime.LOGICAL_FALSE)};
     }
 
-    @Specialization(order = 0)
+    @Specialization
     public byte doInternalIdentical(byte x, byte y,
                     // @formatter:off
                     @SuppressWarnings("unused") byte numEq, @SuppressWarnings("unused") byte singleNA, @SuppressWarnings("unused") byte attribAsSet,
@@ -54,7 +54,7 @@ public abstract class Identical extends RBuiltinNode {
         return x == y ? RRuntime.LOGICAL_TRUE : RRuntime.LOGICAL_FALSE;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public byte doInternalIdential(String x, String y,
                     // @formatter:off
                     @SuppressWarnings("unused") byte numEq, @SuppressWarnings("unused") byte singleNA, @SuppressWarnings("unused") byte attribAsSet,
@@ -64,7 +64,7 @@ public abstract class Identical extends RBuiltinNode {
         return x.equals(y) ? RRuntime.LOGICAL_TRUE : RRuntime.LOGICAL_FALSE;
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public byte doInternalIdentical(double x, double y,
                     // @formatter:off
                     byte numEq, @SuppressWarnings("unused") byte singleNA, @SuppressWarnings("unused") byte attribAsSet,
@@ -75,7 +75,7 @@ public abstract class Identical extends RBuiltinNode {
         return truth ? RRuntime.LOGICAL_TRUE : RRuntime.LOGICAL_FALSE;
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public byte doInternalIdentical(REnvironment x, REnvironment y,
                     // @formatter:off
                     @SuppressWarnings("unused") byte numEq, @SuppressWarnings("unused") byte singleNA, @SuppressWarnings("unused") byte attribAsSet,
@@ -86,7 +86,7 @@ public abstract class Identical extends RBuiltinNode {
         return x == y ? RRuntime.LOGICAL_TRUE : RRuntime.LOGICAL_FALSE;
     }
 
-    @Specialization(order = 10, guards = "!vectorsLists")
+    @Specialization(guards = "!vectorsLists")
     public byte doInternalIdentialGeneric(RAbstractVector x, RAbstractVector y,
                     // @formatter:off
                     @SuppressWarnings("unused") byte numEq, @SuppressWarnings("unused") byte singleNA, @SuppressWarnings("unused") byte attribAsSet,
@@ -104,7 +104,7 @@ public abstract class Identical extends RBuiltinNode {
         return RRuntime.LOGICAL_TRUE;
     }
 
-    @Specialization(order = 100)
+    @Specialization
     public byte doInternalIdentialGeneric(@SuppressWarnings("unused") RList x, @SuppressWarnings("unused") RList y,
                     // @formatter:off
                     @SuppressWarnings("unused") byte numEq, @SuppressWarnings("unused") byte singleNA, @SuppressWarnings("unused") byte attribAsSet,
@@ -114,7 +114,7 @@ public abstract class Identical extends RBuiltinNode {
         throw RError.nyi(getEncapsulatingSourceSection(), "lists not supported in 'identical'");
     }
 
-    @Specialization(order = 101)
+    @Specialization
     public byte doInternalIdentialGeneric(@SuppressWarnings("unused") RDataFrame x, @SuppressWarnings("unused") RDataFrame y,
                     // @formatter:off
                     @SuppressWarnings("unused") byte numEq, @SuppressWarnings("unused") byte singleNA, @SuppressWarnings("unused") byte attribAsSet,
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Ifelse.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Ifelse.java
index f9bdf1a147..f0a4604995 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Ifelse.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Ifelse.java
@@ -42,43 +42,43 @@ public abstract class Ifelse extends RBuiltinNode {
         return na.check(test);
     }
 
-    @Specialization(order = 0, guards = "isNA")
+    @Specialization(guards = "isNA")
     public byte ifelseNA(byte test, double yes, double no) {
         controlVisibility();
         return RRuntime.LOGICAL_NA;
     }
 
-    @Specialization(order = 1, guards = "!isNA")
+    @Specialization(guards = "!isNA")
     public double ifelse(byte test, double yes, double no) {
         controlVisibility();
         return test == RRuntime.LOGICAL_TRUE ? yes : no;
     }
 
-    @Specialization(order = 2, guards = "isNA")
+    @Specialization(guards = "isNA")
     public byte ifelseNA(byte test, int yes, int no) {
         controlVisibility();
         return RRuntime.LOGICAL_NA;
     }
 
-    @Specialization(order = 3, guards = "!isNA")
+    @Specialization(guards = "!isNA")
     public int ifelse(byte test, int yes, int no) {
         controlVisibility();
         return test == RRuntime.LOGICAL_TRUE ? yes : no;
     }
 
-    @Specialization(order = 4, guards = "isNA")
+    @Specialization(guards = "isNA")
     public byte ifelseNA(byte test, String yes, String no) {
         controlVisibility();
         return RRuntime.LOGICAL_NA;
     }
 
-    @Specialization(order = 5, guards = "!isNA")
+    @Specialization(guards = "!isNA")
     public String ifelse(byte test, String yes, String no) {
         controlVisibility();
         return test == RRuntime.LOGICAL_TRUE ? yes : no;
     }
 
-    @Specialization(order = 100)
+    @Specialization
     public RDoubleVector ifelse(RLogicalVector lvec, RDoubleVector dvec, double no) {
         // just one special case for version.R
         assert lvec.getLength() == 1;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFinite.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFinite.java
index 77915e5a18..114a455f08 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFinite.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsFinite.java
@@ -45,7 +45,7 @@ public abstract class IsFinite extends RBuiltinNode {
         return RDataFactory.createLogicalVector(b, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 100)
+    @Specialization
     public Object doIsFiniteGeneric(VirtualFrame frame, @SuppressWarnings("unused") Object x) {
         controlVisibility();
         CompilerDirectives.transferToInterpreter();
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsListFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsListFunctions.java
index 4d937c6689..3fe5ceea13 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsListFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsListFunctions.java
@@ -76,25 +76,25 @@ public class IsListFunctions {
             return RRuntime.LOGICAL_FALSE;
         }
 
-        @Specialization(order = 10, guards = "isList")
+        @Specialization(guards = "isList")
         public byte isTypeFrame(RDataFrame value) {
             controlVisibility();
             return RRuntime.LOGICAL_TRUE;
         }
 
-        @Specialization(order = 11, guards = "!isList")
+        @Specialization(guards = "!isList")
         public byte isType(RDataFrame value) {
             controlVisibility();
             return RRuntime.LOGICAL_FALSE;
         }
 
-        @Specialization(order = 12)
+        @Specialization
         public byte isType(REnvironment env) {
             controlVisibility();
             return RRuntime.LOGICAL_FALSE;
         }
 
-        @Specialization(order = 13)
+        @Specialization
         public byte isType(RPairList pl) {
             controlVisibility();
             return RRuntime.LOGICAL_TRUE;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTRUE.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTRUE.java
index f0daa8e0ec..29e7438c3e 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTRUE.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsTRUE.java
@@ -37,7 +37,7 @@ import com.oracle.truffle.r.runtime.data.*;
 // TODO revert to R
 public abstract class IsTRUE extends RBuiltinNode {
 
-    @Specialization(order = 0)
+    @Specialization
     public RLogicalVector isTRUE(byte x) {
         controlVisibility();
         byte xx = x;
@@ -47,13 +47,13 @@ public abstract class IsTRUE extends RBuiltinNode {
         return RDataFactory.createLogicalVectorFromScalar(xx);
     }
 
-    @Specialization(order = 1, guards = "exactlyTrue")
+    @Specialization(guards = "exactlyTrue")
     public RLogicalVector isTRUE(@SuppressWarnings("unused") RLogicalVector x) {
         controlVisibility();
         return RDataFactory.createLogicalVectorFromScalar(RRuntime.LOGICAL_TRUE);
     }
 
-    @Specialization(order = 100)
+    @Specialization
     public RLogicalVector isTRUEGeneric(@SuppressWarnings("unused") Object x) {
         controlVisibility();
         return RDataFactory.createLogicalVectorFromScalar(RRuntime.LOGICAL_FALSE);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsVector.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsVector.java
index 5b4e799022..9a72a7c442 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsVector.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/IsVector.java
@@ -42,47 +42,47 @@ public abstract class IsVector extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1)
+    @Specialization
     public byte isNull(RNull operand, Object mode) {
         return RRuntime.LOGICAL_FALSE;
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 10)
+    @Specialization
     public byte isNull(RDataFrame operand, Object mode) {
         return RRuntime.LOGICAL_FALSE;
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 50, guards = {"namesOnlyOrNoAttr", "modeIsAnyOrMatches"})
+    @Specialization(guards = {"namesOnlyOrNoAttr", "modeIsAnyOrMatches"})
     public byte isList(RAbstractVector x, String mode) {
         controlVisibility();
         return RRuntime.LOGICAL_TRUE;
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 51, guards = {"namesOnlyOrNoAttr", "!modeIsAnyOrMatches"})
+    @Specialization(guards = {"namesOnlyOrNoAttr", "!modeIsAnyOrMatches"})
     public byte isNotVector(RAbstractVector x, String mode) {
         controlVisibility();
         return RRuntime.LOGICAL_FALSE;
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 52, guards = "!namesOnlyOrNoAttr")
+    @Specialization(guards = "!namesOnlyOrNoAttr")
     public byte isVectorAttr(RAbstractVector x, String mode) {
         controlVisibility();
         return RRuntime.LOGICAL_FALSE;
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1000, guards = "namesOnlyOrNoAttr")
+    @Specialization(guards = "namesOnlyOrNoAttr")
     public byte isVector(RAbstractVector x, RMissing mode) {
         controlVisibility();
         return RRuntime.LOGICAL_TRUE;
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1001, guards = "!namesOnlyOrNoAttr")
+    @Specialization(guards = "!namesOnlyOrNoAttr")
     public byte isVectorAttr(RAbstractVector x, RMissing mode) {
         controlVisibility();
         return RRuntime.LOGICAL_FALSE;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Ls.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Ls.java
index 90bb88f869..9cda443d64 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Ls.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Ls.java
@@ -47,14 +47,14 @@ public abstract class Ls extends RBuiltinNode {
                         ConstantNode.create(RMissing.instance)};
     }
 
-    @Specialization(order = 0)
+    @Specialization
     @SuppressWarnings("unused")
     public RStringVector ls(VirtualFrame frame, RMissing name, int pos, RMissing envir, byte allNames, RMissing pattern) {
         controlVisibility();
         return REnvironment.createLsCurrent(frame.materialize()).ls(RRuntime.fromLogical(allNames), null);
     }
 
-    @Specialization(order = 1)
+    @Specialization
     @SuppressWarnings("unused")
     public RStringVector ls(REnvironment name, Object pos, RMissing envir, byte allNames, RMissing pattern) {
         controlVisibility();
@@ -62,20 +62,20 @@ public abstract class Ls extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 2)
+    @Specialization
     public RStringVector ls(VirtualFrame frame, RMissing name, int pos, REnvironment envir, byte allNames, RMissing pattern) {
         controlVisibility();
         return envir.ls(RRuntime.fromLogical(allNames), null);
     }
 
-    @Specialization(order = 3)
+    @Specialization
     @SuppressWarnings("unused")
     public RStringVector ls(VirtualFrame frame, RMissing name, int pos, RMissing envir, byte allNames, String pattern) {
         controlVisibility();
         return REnvironment.createLsCurrent(frame.materialize()).ls(RRuntime.fromLogical(allNames), compile(pattern));
     }
 
-    @Specialization(order = 4)
+    @Specialization
     @SuppressWarnings("unused")
     public RStringVector ls(REnvironment name, Object pos, RMissing envir, byte allNames, String pattern) {
         controlVisibility();
@@ -83,14 +83,14 @@ public abstract class Ls extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 5)
+    @Specialization
     public RStringVector ls(VirtualFrame frame, RMissing name, int pos, REnvironment envir, byte allNames, String pattern) {
         controlVisibility();
         return envir.ls(RRuntime.fromLogical(allNames), compile(pattern));
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 6)
+    @Specialization
     public RStringVector ls(VirtualFrame frame, RAbstractIntVector name, int pos, RMissing envir, byte allNames, RMissing pattern) {
         controlVisibility();
         String[] searchPath = REnvironment.searchPath();
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/MatMult.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/MatMult.java
index 88645de087..8fbc91ccc2 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/MatMult.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/MatMult.java
@@ -53,7 +53,7 @@ public abstract class MatMult extends RBuiltinNode {
         this.na = prev.na;
     }
 
-    @Specialization(order = 1, guards = "bothZeroDim")
+    @Specialization(guards = "bothZeroDim")
     public RDoubleVector both0Dim(RAbstractDoubleVector a, RAbstractDoubleVector b) {
         controlVisibility();
         int r = b.getDimensions()[1];
@@ -63,14 +63,14 @@ public abstract class MatMult extends RBuiltinNode {
         return result;
     }
 
-    @Specialization(order = 2, guards = "leftHasZeroDim")
+    @Specialization(guards = "leftHasZeroDim")
     public RAbstractVector left0Dim(RAbstractVector a, RAbstractVector b) {
         controlVisibility();
         int[] dim = a.getDimensions()[0] == 0 ? new int[]{0, b.getDimensions()[1]} : new int[]{b.getDimensions()[0], 0};
         return a.copyWithNewDimensions(dim);
     }
 
-    @Specialization(order = 3, guards = "rightHasZeroDim")
+    @Specialization(guards = "rightHasZeroDim")
     public RAbstractVector right0Dim(RAbstractVector a, RAbstractVector b) {
         controlVisibility();
         int[] dim = b.getDimensions()[0] == 0 ? new int[]{0, a.getDimensions()[1]} : new int[]{a.getDimensions()[0], 0};
@@ -79,7 +79,7 @@ public abstract class MatMult extends RBuiltinNode {
 
     // double-double
 
-    @Specialization(order = 10, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RDoubleVector matmatmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractDoubleVector b) {
         controlVisibility();
         final int aCols = a.getDimensions()[1];
@@ -104,7 +104,7 @@ public abstract class MatMult extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA(), new int[]{aRows, bCols});
     }
 
-    @Specialization(order = 11, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RDoubleVector vecvecmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractDoubleVector b) {
         controlVisibility();
         if (a.getLength() != b.getLength()) {
@@ -119,7 +119,7 @@ public abstract class MatMult extends RBuiltinNode {
         return RDataFactory.createDoubleVector(new double[]{result}, na.neverSeenNA(), new int[]{1, 1});
     }
 
-    @Specialization(order = 12, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RDoubleVector matvecmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractDoubleVector b) {
         controlVisibility();
         final int aCols = a.getDimensions()[1];
@@ -152,7 +152,7 @@ public abstract class MatMult extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 13, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RDoubleVector vecmatmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractDoubleVector b) {
         controlVisibility();
         final int bCols = b.getDimensions()[1];
@@ -187,7 +187,7 @@ public abstract class MatMult extends RBuiltinNode {
 
     // complex-complex
 
-    @Specialization(order = 20, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RComplexVector matmatmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractComplexVector b) {
         controlVisibility();
         final int aCols = a.getDimensions()[1];
@@ -214,7 +214,7 @@ public abstract class MatMult extends RBuiltinNode {
         return RDataFactory.createComplexVector(result, na.neverSeenNA(), new int[]{aRows, bCols});
     }
 
-    @Specialization(order = 21, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RComplexVector vecvecmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractComplexVector b) {
         controlVisibility();
         if (a.getLength() != b.getLength()) {
@@ -229,7 +229,7 @@ public abstract class MatMult extends RBuiltinNode {
         return RDataFactory.createComplexVector(new double[]{result.getRealPart(), result.getImaginaryPart()}, na.neverSeenNA(), new int[]{1, 1});
     }
 
-    @Specialization(order = 22, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RComplexVector matvecmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractComplexVector b) {
         controlVisibility();
         final int aCols = a.getDimensions()[1];
@@ -264,7 +264,7 @@ public abstract class MatMult extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 23, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RComplexVector vecmatmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractComplexVector b) {
         controlVisibility();
         final int bRows = b.getDimensions()[0];
@@ -301,7 +301,7 @@ public abstract class MatMult extends RBuiltinNode {
 
     // int-int
 
-    @Specialization(order = 30, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RIntVector matmatmult(VirtualFrame frame, RAbstractIntVector a, RAbstractIntVector b) {
         controlVisibility();
         final int aCols = a.getDimensions()[1];
@@ -326,7 +326,7 @@ public abstract class MatMult extends RBuiltinNode {
         return RDataFactory.createIntVector(result, na.neverSeenNA(), new int[]{aRows, bCols});
     }
 
-    @Specialization(order = 31, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RIntVector vecvecmult(VirtualFrame frame, RAbstractIntVector a, RAbstractIntVector b) {
         controlVisibility();
         if (a.getLength() != b.getLength()) {
@@ -341,7 +341,7 @@ public abstract class MatMult extends RBuiltinNode {
         return RDataFactory.createIntVector(new int[]{result}, na.neverSeenNA(), new int[]{1, 1});
     }
 
-    @Specialization(order = 32, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RIntVector matvecmult(VirtualFrame frame, RAbstractIntVector a, RAbstractIntVector b) {
         controlVisibility();
         final int aCols = a.getDimensions()[1];
@@ -374,7 +374,7 @@ public abstract class MatMult extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 33, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RIntVector vecmatmult(VirtualFrame frame, RAbstractIntVector a, RAbstractIntVector b) {
         controlVisibility();
         final int bCols = b.getDimensions()[1];
@@ -409,268 +409,268 @@ public abstract class MatMult extends RBuiltinNode {
 
     // logical-logical
 
-    @Specialization(order = 40, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RIntVector matmatmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractLogicalVector b) {
         return matmatmult(frame, RClosures.createLogicalToIntVector(a, na), RClosures.createLogicalToIntVector(b, na));
     }
 
-    @Specialization(order = 41, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RIntVector vecvecmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractLogicalVector b) {
         return vecvecmult(frame, RClosures.createLogicalToIntVector(a, na), RClosures.createLogicalToIntVector(b, na));
     }
 
-    @Specialization(order = 42, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RIntVector matvecmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractLogicalVector b) {
         return matvecmult(frame, RClosures.createLogicalToIntVector(a, na), RClosures.createLogicalToIntVector(b, na));
     }
 
-    @Specialization(order = 43, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RIntVector vecmatmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractLogicalVector b) {
         return vecmatmult(frame, RClosures.createLogicalToIntVector(a, na), RClosures.createLogicalToIntVector(b, na));
     }
 
     // to int
 
-    @Specialization(order = 50, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RIntVector matmatmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractIntVector b) {
         return matmatmult(frame, RClosures.createLogicalToIntVector(a, na), b);
     }
 
-    @Specialization(order = 51, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RIntVector vecvecmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractIntVector b) {
         return vecvecmult(frame, RClosures.createLogicalToIntVector(a, na), b);
     }
 
-    @Specialization(order = 52, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RIntVector matvecmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractIntVector b) {
         return matvecmult(frame, RClosures.createLogicalToIntVector(a, na), b);
     }
 
-    @Specialization(order = 53, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RIntVector vecmatmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractIntVector b) {
         return vecmatmult(frame, RClosures.createLogicalToIntVector(a, na), b);
     }
 
-    @Specialization(order = 54, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RIntVector matmatmult(VirtualFrame frame, RAbstractIntVector a, RAbstractLogicalVector b) {
         return matmatmult(frame, a, RClosures.createLogicalToIntVector(b, na));
     }
 
-    @Specialization(order = 55, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RIntVector vecvecmult(VirtualFrame frame, RAbstractIntVector a, RAbstractLogicalVector b) {
         return vecvecmult(frame, a, RClosures.createLogicalToIntVector(b, na));
     }
 
-    @Specialization(order = 56, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RIntVector matvecmult(VirtualFrame frame, RAbstractIntVector a, RAbstractLogicalVector b) {
         return matvecmult(frame, a, RClosures.createLogicalToIntVector(b, na));
     }
 
-    @Specialization(order = 57, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RIntVector vecmatmult(VirtualFrame frame, RAbstractIntVector a, RAbstractLogicalVector b) {
         return vecmatmult(frame, a, RClosures.createLogicalToIntVector(b, na));
     }
 
     // to complex
 
-    @Specialization(order = 60, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RComplexVector matmatmult(VirtualFrame frame, RAbstractIntVector a, RAbstractComplexVector b) {
         return matmatmult(frame, RClosures.createIntToComplexVector(a, na), b);
     }
 
-    @Specialization(order = 61, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RComplexVector vecvecmult(VirtualFrame frame, RAbstractIntVector a, RAbstractComplexVector b) {
         return vecvecmult(frame, RClosures.createIntToComplexVector(a, na), b);
     }
 
-    @Specialization(order = 62, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RComplexVector matvecmult(VirtualFrame frame, RAbstractIntVector a, RAbstractComplexVector b) {
         return matvecmult(frame, RClosures.createIntToComplexVector(a, na), b);
     }
 
-    @Specialization(order = 63, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RComplexVector vecmatmult(VirtualFrame frame, RAbstractIntVector a, RAbstractComplexVector b) {
         return vecmatmult(frame, RClosures.createIntToComplexVector(a, na), b);
     }
 
-    @Specialization(order = 65, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RComplexVector matmatmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractIntVector b) {
         return matmatmult(frame, a, RClosures.createIntToComplexVector(b, na));
     }
 
-    @Specialization(order = 66, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RComplexVector vecvecmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractIntVector b) {
         return vecvecmult(frame, a, RClosures.createIntToComplexVector(b, na));
     }
 
-    @Specialization(order = 67, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RComplexVector matvecmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractIntVector b) {
         return matvecmult(frame, a, RClosures.createIntToComplexVector(b, na));
     }
 
-    @Specialization(order = 68, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RComplexVector vecmatmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractIntVector b) {
         return vecmatmult(frame, a, RClosures.createIntToComplexVector(b, na));
     }
 
-    @Specialization(order = 70, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RComplexVector matmatmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractComplexVector b) {
         return matmatmult(frame, RClosures.createLogicalToComplexVector(a, na), b);
     }
 
-    @Specialization(order = 71, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RComplexVector vecvecmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractComplexVector b) {
         return vecvecmult(frame, RClosures.createLogicalToComplexVector(a, na), b);
     }
 
-    @Specialization(order = 72, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RComplexVector matvecmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractComplexVector b) {
         return matvecmult(frame, RClosures.createLogicalToComplexVector(a, na), b);
     }
 
-    @Specialization(order = 73, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RComplexVector vecmatmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractComplexVector b) {
         return vecmatmult(frame, RClosures.createLogicalToComplexVector(a, na), b);
     }
 
-    @Specialization(order = 75, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RComplexVector matmatmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractLogicalVector b) {
         return matmatmult(frame, a, RClosures.createLogicalToComplexVector(b, na));
     }
 
-    @Specialization(order = 76, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RComplexVector vecvecmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractLogicalVector b) {
         return vecvecmult(frame, a, RClosures.createLogicalToComplexVector(b, na));
     }
 
-    @Specialization(order = 77, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RComplexVector matvecmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractLogicalVector b) {
         return matvecmult(frame, a, RClosures.createLogicalToComplexVector(b, na));
     }
 
-    @Specialization(order = 78, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RComplexVector vecmatmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractLogicalVector b) {
         return vecmatmult(frame, a, RClosures.createLogicalToComplexVector(b, na));
     }
 
-    @Specialization(order = 80, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RComplexVector matmatmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractComplexVector b) {
         return matmatmult(frame, RClosures.createDoubleToComplexVector(a, na), b);
     }
 
-    @Specialization(order = 81, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RComplexVector vecvecmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractComplexVector b) {
         return vecvecmult(frame, RClosures.createDoubleToComplexVector(a, na), b);
     }
 
-    @Specialization(order = 82, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RComplexVector matvecmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractComplexVector b) {
         return matvecmult(frame, RClosures.createDoubleToComplexVector(a, na), b);
     }
 
-    @Specialization(order = 83, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RComplexVector vecmatmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractComplexVector b) {
         return vecmatmult(frame, RClosures.createDoubleToComplexVector(a, na), b);
     }
 
-    @Specialization(order = 85, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RComplexVector matmatmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractDoubleVector b) {
         return matmatmult(frame, a, RClosures.createDoubleToComplexVector(b, na));
     }
 
-    @Specialization(order = 86, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RComplexVector vecvecmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractDoubleVector b) {
         return vecvecmult(frame, a, RClosures.createDoubleToComplexVector(b, na));
     }
 
-    @Specialization(order = 87, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RComplexVector matvecmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractDoubleVector b) {
         return matvecmult(frame, a, RClosures.createDoubleToComplexVector(b, na));
     }
 
-    @Specialization(order = 88, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RComplexVector vecmatmult(VirtualFrame frame, RAbstractComplexVector a, RAbstractDoubleVector b) {
         return vecmatmult(frame, a, RClosures.createDoubleToComplexVector(b, na));
     }
 
     // to double
 
-    @Specialization(order = 90, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RDoubleVector matmatmult(VirtualFrame frame, RAbstractIntVector a, RAbstractDoubleVector b) {
         return matmatmult(frame, RClosures.createIntToDoubleVector(a, na), b);
     }
 
-    @Specialization(order = 91, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RDoubleVector vecvecmult(VirtualFrame frame, RAbstractIntVector a, RAbstractDoubleVector b) {
         return vecvecmult(frame, RClosures.createIntToDoubleVector(a, na), b);
     }
 
-    @Specialization(order = 92, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RDoubleVector matvecmult(VirtualFrame frame, RAbstractIntVector a, RAbstractDoubleVector b) {
         return matvecmult(frame, RClosures.createIntToDoubleVector(a, na), b);
     }
 
-    @Specialization(order = 93, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RDoubleVector vecmatmult(VirtualFrame frame, RAbstractIntVector a, RAbstractDoubleVector b) {
         return vecmatmult(frame, RClosures.createIntToDoubleVector(a, na), b);
     }
 
-    @Specialization(order = 95, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RDoubleVector matmatmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractIntVector b) {
         return matmatmult(frame, a, RClosures.createIntToDoubleVector(b, na));
     }
 
-    @Specialization(order = 96, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RDoubleVector vecvecmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractIntVector b) {
         return vecvecmult(frame, a, RClosures.createIntToDoubleVector(b, na));
     }
 
-    @Specialization(order = 97, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RDoubleVector matvecmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractIntVector b) {
         return matvecmult(frame, a, RClosures.createIntToDoubleVector(b, na));
     }
 
-    @Specialization(order = 98, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RDoubleVector vecmatmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractIntVector b) {
         return vecmatmult(frame, a, RClosures.createIntToDoubleVector(b, na));
     }
 
-    @Specialization(order = 100, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RDoubleVector matmatmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractDoubleVector b) {
         return matmatmult(frame, RClosures.createLogicalToDoubleVector(a, na), b);
     }
 
-    @Specialization(order = 101, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RDoubleVector vecvecmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractDoubleVector b) {
         return vecvecmult(frame, RClosures.createLogicalToDoubleVector(a, na), b);
     }
 
-    @Specialization(order = 102, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RDoubleVector matvecmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractDoubleVector b) {
         return matvecmult(frame, RClosures.createLogicalToDoubleVector(a, na), b);
     }
 
-    @Specialization(order = 103, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RDoubleVector vecmatmult(VirtualFrame frame, RAbstractLogicalVector a, RAbstractDoubleVector b) {
         return vecmatmult(frame, RClosures.createLogicalToDoubleVector(a, na), b);
     }
 
-    @Specialization(order = 105, guards = "matmat")
+    @Specialization(guards = "matmat")
     public RDoubleVector matmatmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractLogicalVector b) {
         return matmatmult(frame, a, RClosures.createLogicalToDoubleVector(b, na));
     }
 
-    @Specialization(order = 106, guards = "vecvec")
+    @Specialization(guards = "vecvec")
     public RDoubleVector vecvecmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractLogicalVector b) {
         return vecvecmult(frame, a, RClosures.createLogicalToDoubleVector(b, na));
     }
 
-    @Specialization(order = 107, guards = "matvec")
+    @Specialization(guards = "matvec")
     public RDoubleVector matvecmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractLogicalVector b) {
         return matvecmult(frame, a, RClosures.createLogicalToDoubleVector(b, na));
     }
 
-    @Specialization(order = 108, guards = "vecmat")
+    @Specialization(guards = "vecmat")
     public RDoubleVector vecmatmult(VirtualFrame frame, RAbstractDoubleVector a, RAbstractLogicalVector b) {
         return vecmatmult(frame, a, RClosures.createLogicalToDoubleVector(b, na));
     }
@@ -678,25 +678,25 @@ public abstract class MatMult extends RBuiltinNode {
     // errors
 
     @SuppressWarnings("unused")
-    @Specialization(order = 200)
+    @Specialization
     public RDoubleVector doRaw(VirtualFrame frame, RAbstractRawVector a, Object b) {
         throw RError.error(frame, this.getEncapsulatingSourceSection(), RError.Message.NUMERIC_COMPLEX_MATRIX_VECTOR);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 201)
+    @Specialization
     public RDoubleVector doRaw(VirtualFrame frame, Object a, RAbstractRawVector b) {
         throw RError.error(frame, this.getEncapsulatingSourceSection(), RError.Message.NUMERIC_COMPLEX_MATRIX_VECTOR);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 205)
+    @Specialization
     public RDoubleVector doString(VirtualFrame frame, RAbstractStringVector a, Object b) {
         throw RError.error(frame, this.getEncapsulatingSourceSection(), RError.Message.NUMERIC_COMPLEX_MATRIX_VECTOR);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 206)
+    @Specialization
     public RDoubleVector doString(VirtualFrame frame, Object a, RAbstractStringVector b) {
         throw RError.error(frame, this.getEncapsulatingSourceSection(), RError.Message.NUMERIC_COMPLEX_MATRIX_VECTOR);
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Match.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Match.java
index b42997be29..33cc1dbe7b 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Match.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Match.java
@@ -68,19 +68,19 @@ public abstract class Match extends RBuiltinNode {
 
     // FIXME deal incomparables parameter
 
-    @Specialization(order = 0)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector match(VirtualFrame frame, RNull x, RAbstractVector table, Object nomatchObj, Object incomparables) {
         return RDataFactory.createIntVector(0);
     }
 
-    @Specialization(order = 1)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector match(VirtualFrame frame, RAbstractVector x, RNull table, Object nomatchObj, Object incomparables) {
         return RDataFactory.createIntVector(x.getLength());
     }
 
-    @Specialization(order = 5)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector match(VirtualFrame frame, RAbstractIntVector x, RAbstractIntVector table, Object nomatchObj, Object incomparables) {
         controlVisibility();
@@ -102,7 +102,7 @@ public abstract class Match extends RBuiltinNode {
         return RDataFactory.createIntVector(result, setCompleteState(matchAll, nomatch));
     }
 
-    @Specialization(order = 6)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector match(VirtualFrame frame, RAbstractDoubleVector x, RAbstractIntVector table, Object nomatchObj, Object incomparables) {
         controlVisibility();
@@ -124,7 +124,7 @@ public abstract class Match extends RBuiltinNode {
         return RDataFactory.createIntVector(result, setCompleteState(matchAll, nomatch));
     }
 
-    @Specialization(order = 10)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector match(VirtualFrame frame, RAbstractIntVector x, RAbstractDoubleVector table, Object nomatchObj, Object incomparables) {
         controlVisibility();
@@ -146,7 +146,7 @@ public abstract class Match extends RBuiltinNode {
         return RDataFactory.createIntVector(result, setCompleteState(matchAll, nomatch));
     }
 
-    @Specialization(order = 11)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector match(VirtualFrame frame, RAbstractDoubleVector x, RAbstractDoubleVector table, Object nomatchObj, Object incomparables) {
         controlVisibility();
@@ -168,7 +168,7 @@ public abstract class Match extends RBuiltinNode {
         return RDataFactory.createIntVector(result, setCompleteState(matchAll, nomatch));
     }
 
-    @Specialization(order = 21)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector match(VirtualFrame frame, RAbstractStringVector x, RAbstractStringVector table, Object nomatchObj, Object incomparables) {
         controlVisibility();
@@ -190,7 +190,7 @@ public abstract class Match extends RBuiltinNode {
         return RDataFactory.createIntVector(result, setCompleteState(matchAll, nomatch));
     }
 
-    @Specialization(order = 15)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector match(VirtualFrame frame, RAbstractLogicalVector x, RAbstractLogicalVector table, Object nomatchObj, Object incomparables) {
         controlVisibility();
@@ -211,7 +211,7 @@ public abstract class Match extends RBuiltinNode {
         return RDataFactory.createIntVector(result, setCompleteState(matchAll, nomatch));
     }
 
-    @Specialization(order = 22, guards = "!isStringVectorX")
+    @Specialization(guards = "!isStringVectorX")
     @SuppressWarnings("unused")
     public RIntVector match(VirtualFrame frame, RAbstractStringVector x, RAbstractVector table, Object nomatchObj, Object incomparables) {
         controlVisibility();
@@ -233,7 +233,7 @@ public abstract class Match extends RBuiltinNode {
         return RDataFactory.createIntVector(result, setCompleteState(matchAll, nomatch));
     }
 
-    @Specialization(order = 25)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector match(VirtualFrame frame, RAbstractComplexVector x, RAbstractComplexVector table, Object nomatchObj, Object incomparables) {
         controlVisibility();
@@ -255,13 +255,13 @@ public abstract class Match extends RBuiltinNode {
         return RDataFactory.createIntVector(result, setCompleteState(matchAll, nomatch));
     }
 
-    @Specialization(order = 100)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector match(VirtualFrame frame, RFunction x, Object table, Object nomatchObj, Object incomparables) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MATCH_VECTOR_ARGS);
     }
 
-    @Specialization(order = 101)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector match(VirtualFrame frame, Object x, RFunction table, Object nomatchObj, Object incomparables) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MATCH_VECTOR_ARGS);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Matrix.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Matrix.java
index 1b036c6318..ae568d3fd9 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Matrix.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Matrix.java
@@ -62,7 +62,7 @@ public abstract class Matrix extends RBuiltinNode {
         return arguments;
     }
 
-    @Specialization(guards = "isByRow", order = 12)
+    @Specialization(guards = "isByRow")
     @SuppressWarnings("unused")
     public Object matrixByRow(VirtualFrame frame, RAbstractVector data, RAbstractVector nrowp, RAbstractVector ncolp, byte byrow, RNull dimnames, byte missingNr, byte missingNc) {
         controlVisibility();
@@ -72,7 +72,7 @@ public abstract class Matrix extends RBuiltinNode {
         return transpose.execute(frame, vdata.copyResized(nrowncol[0] * nrowncol[1], false).copyWithNewDimensions(rowColByRow));
     }
 
-    @Specialization(guards = "isByRow", order = 10)
+    @Specialization(guards = "isByRow")
     @SuppressWarnings("unused")
     public Object matrixByRow(VirtualFrame frame, RAbstractVector data, RMissing nrowp, RAbstractVector ncolp, byte byrow, RNull dimnames, byte missingNr, byte missingNc) {
         controlVisibility();
@@ -82,7 +82,7 @@ public abstract class Matrix extends RBuiltinNode {
         return transpose.execute(frame, vdata.copyResized(nrowncol[0] * nrowncol[1], false).copyWithNewDimensions(rowColByRow));
     }
 
-    @Specialization(guards = "isByRow", order = 8)
+    @Specialization(guards = "isByRow")
     @SuppressWarnings("unused")
     public Object matrixByRow(VirtualFrame frame, RAbstractVector data, RAbstractVector nrowp, RMissing ncolp, byte byrow, RNull dimnames, byte missingNr, byte missingNc) {
         controlVisibility();
@@ -92,7 +92,7 @@ public abstract class Matrix extends RBuiltinNode {
         return transpose.execute(frame, vdata.copyResized(nrowncol[0] * nrowncol[1], false).copyWithNewDimensions(rowColByRow));
     }
 
-    @Specialization(guards = "isByRow", order = 6)
+    @Specialization(guards = "isByRow")
     @SuppressWarnings("unused")
     public Object matrixByRow(VirtualFrame frame, RAbstractVector data, RMissing nrowp, RMissing ncolp, byte byrow, RNull dimnames, byte missingNr, byte missingNc) {
         controlVisibility();
@@ -101,7 +101,7 @@ public abstract class Matrix extends RBuiltinNode {
         return transpose.execute(frame, data.copyResized(nrowncol[0] * nrowncol[1], false).copyWithNewDimensions(rowColByRow));
     }
 
-    @Specialization(guards = "!isByRow", order = 4)
+    @Specialization(guards = "!isByRow")
     @SuppressWarnings("unused")
     public RAbstractVector matrix(VirtualFrame frame, RAbstractVector data, RAbstractVector nrowp, RAbstractVector ncolp, byte byrow, RNull dimnames, byte missingNr, byte missingNc) {
         controlVisibility();
@@ -109,7 +109,7 @@ public abstract class Matrix extends RBuiltinNode {
         return data.copyResized(nrowncol[0] * nrowncol[1], false).copyWithNewDimensions(nrowncol);
     }
 
-    @Specialization(guards = "!isByRow", order = 2)
+    @Specialization(guards = "!isByRow")
     @SuppressWarnings("unused")
     public RAbstractVector matrix(VirtualFrame frame, RAbstractVector data, RMissing nrowp, RAbstractVector ncolp, byte byrow, RNull dimnames, byte missingNr, byte missingNc) {
         controlVisibility();
@@ -117,7 +117,7 @@ public abstract class Matrix extends RBuiltinNode {
         return data.copyResized(nrowncol[0] * nrowncol[1], false).copyWithNewDimensions(nrowncol);
     }
 
-    @Specialization(guards = "!isByRow", order = 1)
+    @Specialization(guards = "!isByRow")
     @SuppressWarnings("unused")
     public RAbstractVector matrix(VirtualFrame frame, RAbstractVector data, RAbstractVector nrowp, RMissing ncolp, byte byrow, RNull dimnames, byte missingNr, byte missingNc) {
         controlVisibility();
@@ -125,7 +125,7 @@ public abstract class Matrix extends RBuiltinNode {
         return data.copyResized(nrowncol[0] * nrowncol[1], false).copyWithNewDimensions(nrowncol);
     }
 
-    @Specialization(guards = "!isByRow", order = 0)
+    @Specialization(guards = "!isByRow")
     @SuppressWarnings("unused")
     public RAbstractVector matrix(VirtualFrame frame, RAbstractVector data, RMissing nrowp, RMissing ncolp, byte byrow, RNull dimnames, byte missingNr, byte missingNc) {
         controlVisibility();
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NGetText.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NGetText.java
index b42ef7a8f7..7fef72000b 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NGetText.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NGetText.java
@@ -49,48 +49,48 @@ public abstract class NGetText extends RBuiltinNode {
         return new RNode[]{CastIntegerNodeFactory.create(children[0], false, false, false), children[1], children[2], children[3]};
     }
 
-    @Specialization(order = 1, guards = "wrongNVector")
+    @Specialization(guards = "wrongNVector")
     public String getTextEmpty(VirtualFrame frame, RAbstractIntVector nVector, String msg1, String msg2, Object domain) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, "n");
     }
 
-    @Specialization(order = 2, guards = "!wrongNVector")
+    @Specialization(guards = "!wrongNVector")
     public String getText(RAbstractIntVector nVector, String msg1, String msg2, Object domain) {
         int n = nVector.getDataAt(0);
         return n == 1 ? msg1 : msg2;
     }
 
-    @Specialization(order = 10, guards = "!wrongNVector")
+    @Specialization(guards = "!wrongNVector")
     public String getTextMsg1Null(VirtualFrame frame, RAbstractIntVector nVector, RNull msg1, RNull msg2, Object domain) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MUST_BE_STRING, "msg1");
     }
 
-    @Specialization(order = 11, guards = "!wrongNVector")
+    @Specialization(guards = "!wrongNVector")
     public String getTextMsg1Null(VirtualFrame frame, RAbstractIntVector nVector, RNull msg1, RAbstractVector msg2, Object domain) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MUST_BE_STRING, "msg1");
     }
 
-    @Specialization(order = 12, guards = {"!wrongNVector", "!msg1StringVectorOneElem"})
+    @Specialization(guards = {"!wrongNVector", "!msg1StringVectorOneElem"})
     public String getTextMsg1WrongMsg2Null(VirtualFrame frame, RAbstractIntVector nVector, RAbstractVector msg1, RNull msg2, Object domain) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MUST_BE_STRING, "msg1");
     }
 
-    @Specialization(order = 13, guards = {"!wrongNVector", "!msg1StringVectorOneElem"})
+    @Specialization(guards = {"!wrongNVector", "!msg1StringVectorOneElem"})
     public String getTextMsg1Wrong(VirtualFrame frame, RAbstractIntVector nVector, RAbstractVector msg1, RAbstractVector msg2, Object domain) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MUST_BE_STRING, "msg1");
     }
 
-    @Specialization(order = 20, guards = {"!wrongNVector", "msg1StringVectorOneElem"})
+    @Specialization(guards = {"!wrongNVector", "msg1StringVectorOneElem"})
     public String getTextMsg1(VirtualFrame frame, RAbstractIntVector nVector, RAbstractVector msg1, RNull msg2, Object domain) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MUST_BE_STRING, "msg2");
     }
 
-    @Specialization(order = 21, guards = {"!wrongNVector", "msg1StringVectorOneElem", "!msg2StringVectorOneElem"})
+    @Specialization(guards = {"!wrongNVector", "msg1StringVectorOneElem", "!msg2StringVectorOneElem"})
     public String getTextMsg2Wrong(VirtualFrame frame, RAbstractIntVector nVector, RAbstractVector msg1, RAbstractVector msg2, Object domain) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MUST_BE_STRING, "msg2");
     }
 
-    @Specialization(order = 30, guards = {"!wrongNVector", "msg1StringVectorOneElem", "msg2StringVectorOneElem"})
+    @Specialization(guards = {"!wrongNVector", "msg1StringVectorOneElem", "msg2StringVectorOneElem"})
     public String getTextMsg1(RAbstractIntVector nVector, RAbstractVector msg1, RAbstractVector msg2, Object domain) {
         return getText(nVector, ((RAbstractStringVector) msg1).getDataAt(0), ((RAbstractStringVector) msg2).getDataAt(0), domain);
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NextMethod.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NextMethod.java
index 0ae6ec2801..1fde5b21ac 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NextMethod.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NextMethod.java
@@ -37,7 +37,7 @@ public abstract class NextMethod extends RBuiltinNode {
         return new RNode[]{ConstantNode.create(RNull.instance), ConstantNode.create(RNull.instance), ConstantNode.create(RMissing.instance)};
     }
 
-    @Specialization(order = 0)
+    @Specialization
     public Object nextMethod(VirtualFrame frame, String genericMethod, @SuppressWarnings("unused") Object obj, Object[] args) {
         controlVisibility();
         final RStringVector type = readType(frame);
@@ -54,13 +54,13 @@ public abstract class NextMethod extends RBuiltinNode {
         return dispatchedCallNode.execute(frame, type);
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public Object nextMethod(VirtualFrame frame, @SuppressWarnings("unused") RNull generic, @SuppressWarnings("unused") RNull obj, @SuppressWarnings("unused") RMissing args) {
         controlVisibility();
         return nextMethod(frame, null, null, new Object[0]);
     }
 
-    @Specialization(order = 11)
+    @Specialization
     public Object nextMethod(VirtualFrame frame, String generic, Object obj, @SuppressWarnings("unused") RMissing args) {
         controlVisibility();
         return nextMethod(frame, generic, obj, new Object[0]);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NormalizePath.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NormalizePath.java
index 099ae013ec..7ac30f8e2b 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NormalizePath.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/NormalizePath.java
@@ -77,7 +77,7 @@ public abstract class NormalizePath extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 100)
+    @Specialization
     public Object doNormalizePath(VirtualFrame frame, Object path, Object winslash, Object mustWork) {
         controlVisibility();
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.WRONG_TYPE);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Order.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Order.java
index 943ab89720..e600fb88fb 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Order.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Order.java
@@ -53,7 +53,7 @@ public abstract class Order extends RBuiltinNode {
 
     // specialisations for one parameter
 
-    @Specialization(order = 10)
+    @Specialization
     public RIntVector order(RStringVector x, @SuppressWarnings("unused") RMissing tie) {
         controlVisibility();
         String[] xs = x.getDataCopy();
@@ -62,7 +62,7 @@ public abstract class Order extends RBuiltinNode {
         return RDataFactory.createIntVector(ord, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 20)
+    @Specialization
     public RIntVector order(RDoubleVector x, @SuppressWarnings("unused") RMissing tie) {
         controlVisibility();
         double[] xs = x.getDataCopy();
@@ -71,7 +71,7 @@ public abstract class Order extends RBuiltinNode {
         return RDataFactory.createIntVector(ord, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 30)
+    @Specialization
     public RIntVector order(RIntVector x, @SuppressWarnings("unused") RMissing tie) {
         controlVisibility();
         int[] xs = x.getDataCopy();
@@ -80,13 +80,13 @@ public abstract class Order extends RBuiltinNode {
         return RDataFactory.createIntVector(ord, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 31)
+    @Specialization
     public RIntVector order(RIntVector x, @SuppressWarnings("unused") RNull nul) {
         controlVisibility();
         return order(x, RMissing.instance);
     }
 
-    @Specialization(order = 40)
+    @Specialization
     public RIntVector order(RComplexVector x, @SuppressWarnings("unused") RMissing tie) {
         controlVisibility();
         double[] xs = x.getDataCopy();
@@ -97,7 +97,7 @@ public abstract class Order extends RBuiltinNode {
 
     // specialisations for vector and tie parameters
 
-    @Specialization(order = 100)
+    @Specialization
     public RIntVector order(RIntVector x, RStringVector tie) {
         controlVisibility();
         int[] t = order(tie, RMissing.instance).getDataWithoutCopying();
@@ -108,7 +108,7 @@ public abstract class Order extends RBuiltinNode {
         return RDataFactory.createIntVector(ord, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 110)
+    @Specialization
     public RIntVector order(RDoubleVector x, RStringVector tie) {
         controlVisibility();
         int[] t = order(tie, RMissing.instance).getDataWithoutCopying();
@@ -119,7 +119,7 @@ public abstract class Order extends RBuiltinNode {
         return RDataFactory.createIntVector(ord, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 120)
+    @Specialization
     public RIntVector order(RDoubleVector x, RDoubleVector tie) {
         controlVisibility();
         int[] t = order(tie, RMissing.instance).getDataWithoutCopying();
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Parse.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Parse.java
index eb3c0bb93d..05a47814a4 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Parse.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Parse.java
@@ -45,7 +45,7 @@ import com.oracle.truffle.r.runtime.data.*;
 public abstract class Parse extends RInvisibleBuiltinNode {
 
     @SuppressWarnings("unused")
-    @Specialization(order = 0)
+    @Specialization
     public Object parse(VirtualFrame frame, RConnection conn, RNull n, RNull text, String prompt, RNull srcFile, String encoding) {
         controlVisibility();
         try {
@@ -57,7 +57,7 @@ public abstract class Parse extends RInvisibleBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1)
+    @Specialization
     public Object parse(VirtualFrame frame, RConnection conn, double n, RNull text, String prompt, RNull srcFile, String encoding) {
         controlVisibility();
         try {
@@ -69,7 +69,7 @@ public abstract class Parse extends RInvisibleBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 2, guards = "isText")
+    @Specialization(guards = "isText")
     public Object parse(VirtualFrame frame, RConnection conn, RNull n, String text, String prompt, RNull srcFile, String encoding) {
         controlVisibility();
         try {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PathExpand.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PathExpand.java
index c815eef8bc..c0cc467cdb 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PathExpand.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PathExpand.java
@@ -45,7 +45,7 @@ public abstract class PathExpand extends RBuiltinNode {
         return RDataFactory.createStringVector(results, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 100)
+    @Specialization
     public Object doPathExpandGeneric(VirtualFrame frame, @SuppressWarnings("unused") Object path) {
         controlVisibility();
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, "path");
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java
index c10db0a92b..17b1c21395 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java
@@ -120,7 +120,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 1)
+    @Specialization
     public String prettyPrintVector(byte operand, Object listElementName, byte quote) {
         return concat("[1] ", prettyPrint(operand));
     }
@@ -136,7 +136,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 10)
+    @Specialization
     public String prettyPrintVector(int operand, Object listElementName, byte quote) {
         return concat("[1] ", prettyPrint(operand));
     }
@@ -146,7 +146,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 20)
+    @Specialization
     public String prettyPrintVector(double operand, Object listElementName, byte quote) {
         return concat("[1] ", prettyPrint(operand));
     }
@@ -160,7 +160,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 30)
+    @Specialization
     public String prettyPrintVector(RComplex operand, Object listElementName, byte quote) {
         return concat("[1] ", prettyPrint(operand));
     }
@@ -172,7 +172,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 40)
+    @Specialization
     public String prettyPrintVector(String operand, Object listElementName, byte quote) {
         return concat("[1] ", prettyPrint(operand));
     }
@@ -182,7 +182,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 50)
+    @Specialization
     public String prettyPrintVector(RRaw operand, Object listElementName, byte quote) {
         return concat("[1] ", prettyPrint(operand));
     }
@@ -192,13 +192,13 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 60)
+    @Specialization
     public String prettyPrint(RFunction operand, Object listElementName, byte quote) {
         return ((RRootNode) operand.getTarget().getRootNode()).getSourceCode();
     }
 
     @SlowPath
-    @Specialization(order = 70)
+    @Specialization
     public String prettyPrint(REnvironment operand, Object listElementName, byte quote) {
         RAttributes attributes = operand.getAttributes();
         if (attributes == null) {
@@ -213,7 +213,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 80)
+    @Specialization
     public String prettyPrint(RExpression expr, Object listElementName, byte quote) {
         StringBuilder builder = new StringBuilder();
         builder.append("expression(");
@@ -229,13 +229,13 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 85)
+    @Specialization
     public String prettyPrintSymbol(RSymbol operand, Object listElementName, byte quote) {
         return operand.getName();
     }
 
     @SlowPath
-    @Specialization(order = 86)
+    @Specialization
     public String prettyPrintPromise(RPromise promise, Object listElementName, byte quote) {
         if (promise.isEvaluated()) {
             return prettyPrintRecursive(promise.getValue(), listElementName, quote);
@@ -245,7 +245,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 87)
+    @Specialization
     public String prettyPrintLanguage(RLanguage language, Object listElementName, byte quote) {
         return prettyPrintLanguageRep(language, listElementName);
     }
@@ -261,7 +261,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 88)
+    @Specialization
     public String prettyPrintPairList(RPairList pairList, Object listElementName, byte quote) {
         StringBuilder sb = new StringBuilder();
         RPairList pl = pairList;
@@ -284,13 +284,13 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 89)
+    @Specialization
     public String prettyPrintMissing(RMissing missing, Object listElementName, byte quote) {
         return "";
     }
 
     @SlowPath
-    @Specialization(order = 90)
+    @Specialization
     public String prettyPrintFormula(RFormula formula, Object listElementName, byte quote) {
         return formula.getSource().getCode();
     }
@@ -579,37 +579,37 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 100, guards = "twoDimsOrMore")
+    @Specialization(guards = "twoDimsOrMore")
     public String prettyPrintM(RList operand, Object listElementName, byte quote) {
         return printVectorMultiDim(operand, true, false);
     }
 
     @SlowPath
-    @Specialization(order = 101, guards = "twoDimsOrMore")
+    @Specialization(guards = "twoDimsOrMore")
     public String prettyPrintM(RAbstractStringVector operand, Object listElementName, byte quote) {
         return printVectorMultiDim(operand, true, false);
     }
 
     @SlowPath
-    @Specialization(order = 103, guards = "twoDimsOrMore")
+    @Specialization(guards = "twoDimsOrMore")
     public String prettyPrintM(RAbstractComplexVector operand, Object listElementName, byte quote) {
         return printVectorMultiDim(operand, false, true);
     }
 
     @SlowPath
-    @Specialization(order = 104, guards = "twoDimsOrMore")
+    @Specialization(guards = "twoDimsOrMore")
     public String prettyPrintM(RAbstractRawVector operand, Object listElementName, byte quote) {
         return printVectorMultiDim(operand, false, true);
     }
 
     @SlowPath
-    @Specialization(order = 105, guards = "twoDimsOrMore")
+    @Specialization(guards = "twoDimsOrMore")
     public String prettyPrintM(RAbstractVector operand, Object listElementName, byte quote) {
         return printVectorMultiDim(operand, false, false);
     }
 
     @SlowPath
-    @Specialization(order = 200, guards = "!twoDimsOrMore")
+    @Specialization(guards = "!twoDimsOrMore")
     public String prettyPrint(RList operand, Object listElementName, byte quote) {
         return prettyPrintList0(operand, listElementName, quote);
     }
@@ -635,7 +635,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 300, guards = "!twoDimsOrMore")
+    @Specialization(guards = "!twoDimsOrMore")
     public String prettyPrint(RAbstractDoubleVector operand, Object listElementName, byte quote) {
         int length = operand.getLength();
         String[] values = new String[length];
@@ -650,7 +650,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 400, guards = "!twoDimsOrMore")
+    @Specialization(guards = "!twoDimsOrMore")
     public String prettyPrint(RAbstractIntVector operand, Object listElementName, byte quote) {
         int length = operand.getLength();
         String[] values = new String[length];
@@ -662,7 +662,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 500, guards = "!twoDimsOrMore")
+    @Specialization(guards = "!twoDimsOrMore")
     public String prettyPrint(RAbstractStringVector operand, Object listElementName, byte quote) {
         int length = operand.getLength();
         String[] values = new String[length];
@@ -678,7 +678,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 600, guards = "!twoDimsOrMore")
+    @Specialization(guards = "!twoDimsOrMore")
     public String prettyPrint(RAbstractLogicalVector operand, Object listElementName, byte quote) {
         int length = operand.getLength();
         String[] values = new String[length];
@@ -690,7 +690,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 700, guards = "!twoDimsOrMore")
+    @Specialization(guards = "!twoDimsOrMore")
     public String prettyPrint(RAbstractRawVector operand, Object listElementName, byte quote) {
         int length = operand.getLength();
         String[] values = new String[length];
@@ -702,7 +702,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 800, guards = "!twoDimsOrMore")
+    @Specialization(guards = "!twoDimsOrMore")
     public String prettyPrint(RAbstractComplexVector operand, Object listElementName, byte quote) {
         if (re == null) {
             // the two are allocated side by side; checking for re is sufficient
@@ -735,7 +735,7 @@ public abstract class PrettyPrinterNode extends RNode {
     }
 
     @SlowPath
-    @Specialization(order = 1000)
+    @Specialization
     public String prettyPrint(RDataFrame operand, Object listElementName, byte quote) {
         if (operand.getVector().getLength() == 0) {
             return "data frame with 0 columns and 0 rows";
@@ -1075,19 +1075,19 @@ public abstract class PrettyPrinterNode extends RNode {
         }
 
         @SlowPath
-        @Specialization(order = 1)
+        @Specialization
         public String prettyPrintVectorElement(RList operand) {
             return prettyPrint(operand);
         }
 
         @SlowPath
-        @Specialization(order = 2, guards = {"!isLengthOne", "!isVectorList"})
+        @Specialization(guards = {"!isLengthOne", "!isVectorList"})
         public String prettyPrintVectorElement(RAbstractVector operand) {
             return prettyPrint(operand);
         }
 
         @SlowPath
-        @Specialization(order = 3, guards = {"isLengthOne", "!isVectorList"})
+        @Specialization(guards = {"isLengthOne", "!isVectorList"})
         public String prettyPrintVectorElementLengthOne(RAbstractVector operand) {
             return prettyPrintRecursive(operand.getDataAtAsObject(0));
         }
@@ -1226,7 +1226,7 @@ public abstract class PrettyPrinterNode extends RNode {
         }
 
         @SlowPath
-        @Specialization(order = 1, guards = "isEmpty")
+        @Specialization(guards = "isEmpty")
         public String printVector2DimEmpty(RAbstractVector vector, RIntVector dimensions, int offset, byte isListOrStringVector, byte isComplexOrRawVector) {
             int nrow = dimensions.getDataAt(0);
             int ncol = dimensions.getDataAt(1);
@@ -1263,7 +1263,7 @@ public abstract class PrettyPrinterNode extends RNode {
         }
 
         @SlowPath
-        @Specialization(order = 10, guards = "!isEmpty")
+        @Specialization(guards = "!isEmpty")
         public String printVector2Dim(RAbstractDoubleVector vector, RIntVector dimensions, int offset, byte isListOrStringVector, byte isComplexOrRawVector) {
             int nrow = dimensions.getDataAt(0);
             int ncol = dimensions.getDataAt(1);
@@ -1325,7 +1325,7 @@ public abstract class PrettyPrinterNode extends RNode {
         }
 
         @SlowPath
-        @Specialization(order = 20, guards = "!isEmpty")
+        @Specialization(guards = "!isEmpty")
         public String printVector2Dim(RAbstractComplexVector vector, RIntVector dimensions, int offset, byte isListOrStringVector, byte isComplexOrRawVector) {
             int nrow = dimensions.getDataAt(0);
             int ncol = dimensions.getDataAt(1);
@@ -1380,7 +1380,7 @@ public abstract class PrettyPrinterNode extends RNode {
         }
 
         @SlowPath
-        @Specialization(order = 200, guards = {"!isEmpty", "notDoubleOrComplex"})
+        @Specialization(guards = {"!isEmpty", "notDoubleOrComplex"})
         public String printVector2Dim(RAbstractVector vector, RIntVector dimensions, int offset, byte isListOrStringVector, byte isComplexOrRawVector) {
             int nrow = dimensions.getDataAt(0);
             int ncol = dimensions.getDataAt(1);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RNGFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RNGFunctions.java
index 00f2dc205e..e675a7ce84 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RNGFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RNGFunctions.java
@@ -45,7 +45,7 @@ public class RNGFunctions {
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 0)
+        @Specialization
         public RNull setSeed(VirtualFrame frame, double seed, RNull kind, RNull normKind) {
             controlVisibility();
             doSetSeed(frame, (int) seed, RRNG.NO_KIND_CHANGE, RRNG.NO_KIND_CHANGE);
@@ -53,7 +53,7 @@ public class RNGFunctions {
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 1)
+        @Specialization
         public RNull setSeed(VirtualFrame frame, double seed, RAbstractIntVector kind, RNull normKind) {
             controlVisibility();
             doSetSeed(frame, (int) seed, kind.getDataAt(0), RRNG.NO_KIND_CHANGE);
@@ -61,7 +61,7 @@ public class RNGFunctions {
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 2)
+        @Specialization
         public RNull setSeed(VirtualFrame frame, RNull seed, RNull kind, RNull normKind) {
             controlVisibility();
             doSetSeed(frame, RRNG.RESET_SEED, RRNG.NO_KIND_CHANGE, RRNG.NO_KIND_CHANGE);
@@ -69,7 +69,7 @@ public class RNGFunctions {
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 10)
+        @Specialization
         public RNull setSeed(VirtualFrame frame, byte seed, RNull kind, RNull normKind) {
             controlVisibility();
             CompilerDirectives.transferToInterpreter();
@@ -93,14 +93,14 @@ public class RNGFunctions {
     @RBuiltin(name = "RNGkind", kind = INTERNAL, parameterNames = {"kind", "normkind"})
     public abstract static class RNGkind extends RBuiltinNode {
 
-        @Specialization(order = 0)
+        @Specialization
         @SuppressWarnings("unused")
         public RIntVector doRNGkind(VirtualFrame frame, RNull x, RNull y) {
             controlVisibility();
             return getCurrent();
         }
 
-        @Specialization(order = 1)
+        @Specialization
         public RIntVector doRNGkind(VirtualFrame frame, RAbstractIntVector kind, @SuppressWarnings("unused") RNull normKind) {
             controlVisibility();
             RIntVector result = getCurrent();
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Repeat.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Repeat.java
index 43574858d5..1c503f1e96 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Repeat.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Repeat.java
@@ -59,7 +59,7 @@ public abstract class Repeat extends RBuiltinNode {
         return arguments;
     }
 
-    @Specialization(order = 0)
+    @Specialization
     @SuppressWarnings("unused")
     public RNull repeat(VirtualFrame frame, RNull value, Object times, Object lengthOut, Object each) {
         controlVisibility();
@@ -73,7 +73,7 @@ public abstract class Repeat extends RBuiltinNode {
     // * if length.out is given (it supersedes times)
     //
 
-    @Specialization(order = 10)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector repeat(int value, int times, RMissing lengthOut, Object each) {
         controlVisibility();
@@ -82,19 +82,19 @@ public abstract class Repeat extends RBuiltinNode {
         return RDataFactory.createIntVector(array, RRuntime.isComplete(value));
     }
 
-    @Specialization(order = 11, guards = "lengthNA")
+    @Specialization(guards = "lengthNA")
     @SuppressWarnings("unused")
     public int repeatLengthNA(int value, Object times, int lengthOut, Object each) {
         return value;
     }
 
-    @Specialization(order = 12, guards = "!lengthNA")
+    @Specialization(guards = "!lengthNA")
     @SuppressWarnings("unused")
     public RIntVector repeat(int value, Object times, int lengthOut, Object each) {
         return repeat(value, lengthOut, RMissing.instance, each);
     }
 
-    @Specialization(order = 20)
+    @Specialization
     @SuppressWarnings("unused")
     public RDoubleVector repeat(double value, int times, RMissing lengthOut, Object each) {
         controlVisibility();
@@ -103,19 +103,19 @@ public abstract class Repeat extends RBuiltinNode {
         return RDataFactory.createDoubleVector(array, RRuntime.isComplete(value));
     }
 
-    @Specialization(order = 21, guards = "lengthNA")
+    @Specialization(guards = "lengthNA")
     @SuppressWarnings("unused")
     public double repeatLengthNA(double value, Object times, int lengthOut, Object each) {
         return value;
     }
 
-    @Specialization(order = 23, guards = "!lengthNA")
+    @Specialization(guards = "!lengthNA")
     @SuppressWarnings("unused")
     public RDoubleVector repeat(double value, Object times, int lengthOut, Object each) {
         return repeat(value, lengthOut, RMissing.instance, each);
     }
 
-    @Specialization(order = 30)
+    @Specialization
     @SuppressWarnings("unused")
     public RRawVector repeat(RRaw value, int times, RMissing lengthOut, Object each) {
         controlVisibility();
@@ -124,19 +124,19 @@ public abstract class Repeat extends RBuiltinNode {
         return RDataFactory.createRawVector(array);
     }
 
-    @Specialization(order = 31, guards = "lengthNA")
+    @Specialization(guards = "lengthNA")
     @SuppressWarnings("unused")
     public RRaw repeatLengthNA(RRaw value, Object times, int lengthOut, Object each) {
         return value;
     }
 
-    @Specialization(order = 32, guards = "!lengthNA")
+    @Specialization(guards = "!lengthNA")
     @SuppressWarnings("unused")
     public RRawVector repeat(RRaw value, Object times, int lengthOut, Object each) {
         return repeat(value, lengthOut, RMissing.instance, each);
     }
 
-    @Specialization(order = 40)
+    @Specialization
     @SuppressWarnings("unused")
     public RComplexVector repeat(RComplex value, int times, RMissing lengthOut, Object each) {
         controlVisibility();
@@ -149,19 +149,19 @@ public abstract class Repeat extends RBuiltinNode {
         return RDataFactory.createComplexVector(array, !value.isNA());
     }
 
-    @Specialization(order = 41, guards = "lengthNA")
+    @Specialization(guards = "lengthNA")
     @SuppressWarnings("unused")
     public RComplex repeatLengthNA(RComplex value, Object times, int lengthOut, Object each) {
         return value;
     }
 
-    @Specialization(order = 42, guards = "!lengthNA")
+    @Specialization(guards = "!lengthNA")
     @SuppressWarnings("unused")
     public RComplexVector repeat(RComplex value, Object times, int lengthOut, Object each) {
         return repeat(value, lengthOut, RMissing.instance, each);
     }
 
-    @Specialization(order = 50)
+    @Specialization
     @SuppressWarnings("unused")
     public RStringVector repeat(String value, int times, RMissing lengthOut, Object each) {
         controlVisibility();
@@ -170,19 +170,19 @@ public abstract class Repeat extends RBuiltinNode {
         return RDataFactory.createStringVector(array, !RRuntime.isNA(value));
     }
 
-    @Specialization(order = 51, guards = "lengthNA")
+    @Specialization(guards = "lengthNA")
     @SuppressWarnings("unused")
     public String repeatLengthNA(String value, Object times, int lengthOut, Object each) {
         return value;
     }
 
-    @Specialization(order = 52, guards = "!lengthNA")
+    @Specialization(guards = "!lengthNA")
     @SuppressWarnings("unused")
     public RStringVector repeat(String value, Object times, int lengthOut, Object each) {
         return repeat(value, lengthOut, RMissing.instance, each);
     }
 
-    @Specialization(order = 60)
+    @Specialization
     @SuppressWarnings("unused")
     public RLogicalVector repeat(byte value, int times, RMissing lengthOut, Object each) {
         controlVisibility();
@@ -191,13 +191,13 @@ public abstract class Repeat extends RBuiltinNode {
         return RDataFactory.createLogicalVector(array, value != RRuntime.LOGICAL_NA);
     }
 
-    @Specialization(order = 61, guards = "lengthNA")
+    @Specialization(guards = "lengthNA")
     @SuppressWarnings("unused")
     public byte repeatLengthNA(byte value, Object times, int lengthOut, Object each) {
         return value;
     }
 
-    @Specialization(order = 62, guards = "!lengthNA")
+    @Specialization(guards = "!lengthNA")
     @SuppressWarnings("unused")
     public RLogicalVector repeat(byte value, Object times, int lengthOut, Object each) {
         return repeat(value, lengthOut, RMissing.instance, each);
@@ -232,7 +232,7 @@ public abstract class Repeat extends RBuiltinNode {
         return RDataFactory.createStringVector(names, oldNames.isComplete());
     }
 
-    @Specialization(order = 100)
+    @Specialization
     @SuppressWarnings("unused")
     public RIntVector repeat(RAbstractIntVector value, int times, RMissing lengthOut, Object each) {
         controlVisibility();
@@ -253,13 +253,13 @@ public abstract class Repeat extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 102, guards = "lengthNA")
+    @Specialization(guards = "lengthNA")
     @SuppressWarnings("unused")
     public RAbstractIntVector repeatLengthNA(RAbstractIntVector value, Object times, int lengthOut, Object each) {
         return value;
     }
 
-    @Specialization(order = 103, guards = "!lengthNA")
+    @Specialization(guards = "!lengthNA")
     @SuppressWarnings("unused")
     public RIntVector repeat(RAbstractIntVector value, Object times, int lengthOut, Object each) {
         controlVisibility();
@@ -276,7 +276,7 @@ public abstract class Repeat extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 110)
+    @Specialization
     @SuppressWarnings("unused")
     public RDoubleVector repeat(RAbstractDoubleVector value, int times, RMissing lengthOut, Object each) {
         controlVisibility();
@@ -297,13 +297,13 @@ public abstract class Repeat extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 111, guards = "lengthNA")
+    @Specialization(guards = "lengthNA")
     @SuppressWarnings("unused")
     public RAbstractDoubleVector repeatLengthNA(RAbstractDoubleVector value, Object times, int lengthOut, Object each) {
         return value;
     }
 
-    @Specialization(order = 112, guards = "!lengthNA")
+    @Specialization(guards = "!lengthNA")
     @SuppressWarnings("unused")
     public RDoubleVector repeat(RAbstractDoubleVector value, Object times, int lengthOut, Object each) {
         controlVisibility();
@@ -320,7 +320,7 @@ public abstract class Repeat extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 120)
+    @Specialization
     @SuppressWarnings("unused")
     public RRawVector repeat(RRawVector value, int times, RMissing lengthOut, Object each) {
         controlVisibility();
@@ -341,13 +341,13 @@ public abstract class Repeat extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 121, guards = "lengthNA")
+    @Specialization(guards = "lengthNA")
     @SuppressWarnings("unused")
     public RRawVector repeatLengthNA(RRawVector value, Object times, int lengthOut, Object each) {
         return value;
     }
 
-    @Specialization(order = 122, guards = "!lengthNA")
+    @Specialization(guards = "!lengthNA")
     @SuppressWarnings("unused")
     public RRawVector repeat(RRawVector value, Object times, int lengthOut, Object each) {
         controlVisibility();
@@ -364,7 +364,7 @@ public abstract class Repeat extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 130)
+    @Specialization
     @SuppressWarnings("unused")
     public RComplexVector repeat(RComplexVector value, int times, RMissing lengthOut, Object each) {
         controlVisibility();
@@ -388,13 +388,13 @@ public abstract class Repeat extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 131, guards = "lengthNA")
+    @Specialization(guards = "lengthNA")
     @SuppressWarnings("unused")
     public RComplexVector repeatLengthNA(RComplexVector value, Object times, int lengthOut, Object each) {
         return value;
     }
 
-    @Specialization(order = 132, guards = "!lengthNA")
+    @Specialization(guards = "!lengthNA")
     @SuppressWarnings("unused")
     public RComplexVector repeat(RComplexVector value, Object times, int lengthOut, Object each) {
         controlVisibility();
@@ -414,7 +414,7 @@ public abstract class Repeat extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 140)
+    @Specialization
     @SuppressWarnings("unused")
     public RLogicalVector repeat(RAbstractLogicalVector value, int times, RMissing lengthOut, Object each) {
         controlVisibility();
@@ -435,13 +435,13 @@ public abstract class Repeat extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 141, guards = "lengthNA")
+    @Specialization(guards = "lengthNA")
     @SuppressWarnings("unused")
     public RAbstractLogicalVector repeatLengthNA(RAbstractLogicalVector value, Object times, int lengthOut, Object each) {
         return value;
     }
 
-    @Specialization(order = 142, guards = "!lengthNA")
+    @Specialization(guards = "!lengthNA")
     @SuppressWarnings("unused")
     public RLogicalVector repeat(RAbstractLogicalVector value, Object times, int lengthOut, Object each) {
         controlVisibility();
@@ -458,7 +458,7 @@ public abstract class Repeat extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 150)
+    @Specialization
     @SuppressWarnings("unused")
     public RStringVector repeat(RAbstractStringVector value, int times, RMissing lengthOut, Object each) {
         controlVisibility();
@@ -479,13 +479,13 @@ public abstract class Repeat extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 151, guards = "lengthNA")
+    @Specialization(guards = "lengthNA")
     @SuppressWarnings("unused")
     public RAbstractStringVector repeatLengthNA(RAbstractStringVector value, Object times, int lengthOut, Object each) {
         return value;
     }
 
-    @Specialization(order = 152, guards = "!lengthNA")
+    @Specialization(guards = "!lengthNA")
     @SuppressWarnings("unused")
     public RStringVector repeat(RAbstractStringVector value, Object times, int lengthOut, Object each) {
         controlVisibility();
@@ -518,7 +518,7 @@ public abstract class Repeat extends RBuiltinNode {
         return names;
     }
 
-    @Specialization(order = 500)
+    @Specialization
     @SuppressWarnings("unused")
     public RAbstractVector repeatTV(VirtualFrame frame, RAbstractVector value, RIntVector times, RMissing lengthOut, Object each) {
         controlVisibility();
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RepeatInternal.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RepeatInternal.java
index 4bf888c5ee..0e6c3bb557 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RepeatInternal.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RepeatInternal.java
@@ -105,7 +105,7 @@ public abstract class RepeatInternal extends RBuiltinNode {
         return RDataFactory.createStringVector(array, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public RStringVector repInt(VirtualFrame frame, RStringVector value, RIntVector timesVec) {
         controlVisibility();
         int valueLength = value.getLength();
@@ -140,7 +140,7 @@ public abstract class RepeatInternal extends RBuiltinNode {
         return RDataFactory.createStringVector(array, value.isComplete());
     }
 
-    @Specialization(order = 11)
+    @Specialization
     public RList repList(RList value, int times) {
         controlVisibility();
         int oldLength = value.getLength();
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rhome.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rhome.java
index e873c69a19..8f00e25efe 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rhome.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rhome.java
@@ -45,13 +45,13 @@ import com.oracle.truffle.r.runtime.data.*;
 // TODO revert to R implementation
 public abstract class Rhome extends RBuiltinNode {
 
-    @Specialization(order = 0)
+    @Specialization
     public Object doRhome(@SuppressWarnings("unused") RMissing component) {
         controlVisibility();
         return RDataFactory.createStringVector(REnvVars.rHome());
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public Object doRhome(String component) {
         controlVisibility();
         String rHome = REnvVars.rHome();
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rm.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rm.java
index b4b4627209..8936db8179 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rm.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Rm.java
@@ -53,7 +53,7 @@ public abstract class Rm extends RInvisibleBuiltinNode {
         return getParameterValues0();
     }
 
-    @Specialization(order = 0)
+    @Specialization
     @SuppressWarnings("unused")
     public Object rm(VirtualFrame frame, String name, RStringVector list, Object pos, RMissing envir, byte inherits) {
         controlVisibility();
@@ -61,7 +61,7 @@ public abstract class Rm extends RInvisibleBuiltinNode {
         return RNull.instance;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     @SuppressWarnings("unused")
     public Object rm(VirtualFrame frame, Object[] names, RStringVector list, Object pos, RMissing envir, byte inherits) {
         controlVisibility();
@@ -72,7 +72,7 @@ public abstract class Rm extends RInvisibleBuiltinNode {
         return RNull.instance;
     }
 
-    @Specialization(order = 2)
+    @Specialization
     @SuppressWarnings("unused")
     public Object rm(VirtualFrame frame, String name, RStringVector list, Object pos, REnvironment envir, byte inherits) {
         controlVisibility();
@@ -84,7 +84,7 @@ public abstract class Rm extends RInvisibleBuiltinNode {
         return RNull.instance;
     }
 
-    @Specialization(order = 3)
+    @Specialization
     @SuppressWarnings("unused")
     public Object rm(VirtualFrame frame, Object[] names, RStringVector list, Object pos, REnvironment envir, byte inherits) {
         controlVisibility();
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Round.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Round.java
index ca7fcedf7e..08a1b4828a 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Round.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Round.java
@@ -62,25 +62,25 @@ public abstract class Round extends RBuiltinNode {
         return digits != 0;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public int round(int x, @SuppressWarnings("unused") int digits) {
         controlVisibility();
         return roundOp.op(x);
     }
 
-    @Specialization(order = 20, guards = "!hasDigits")
+    @Specialization(guards = "!hasDigits")
     public double round(double x, @SuppressWarnings("unused") int digits) {
         controlVisibility();
         return roundOp.op(x);
     }
 
-    @Specialization(order = 21, guards = "hasDigits")
+    @Specialization(guards = "hasDigits")
     public double roundDigits(double x, int digits) {
         controlVisibility();
         return roundOp.opd(x, digits);
     }
 
-    @Specialization(order = 22, guards = "!hasDigits")
+    @Specialization(guards = "!hasDigits")
     public RDoubleVector round(RAbstractDoubleVector x, int digits) {
         controlVisibility();
         double[] result = new double[x.getLength()];
@@ -94,7 +94,7 @@ public abstract class Round extends RBuiltinNode {
         return ret;
     }
 
-    @Specialization(order = 23, guards = "hasDigits")
+    @Specialization(guards = "hasDigits")
     public RDoubleVector roundDigits(RAbstractDoubleVector x, int digits) {
         controlVisibility();
         double[] result = new double[x.getLength()];
@@ -108,19 +108,19 @@ public abstract class Round extends RBuiltinNode {
         return ret;
     }
 
-    @Specialization(order = 30, guards = "!hasDigits")
+    @Specialization(guards = "!hasDigits")
     public RComplex round(RComplex x, @SuppressWarnings("unused") int digits) {
         controlVisibility();
         return roundOp.op(x.getRealPart(), x.getImaginaryPart());
     }
 
-    @Specialization(order = 31, guards = "hasDigits")
+    @Specialization(guards = "hasDigits")
     public RComplex roundDigits(RComplex x, int digits) {
         controlVisibility();
         return roundOp.opd(x.getRealPart(), x.getImaginaryPart(), digits);
     }
 
-    @Specialization(order = 32, guards = "!hasDigits")
+    @Specialization(guards = "!hasDigits")
     public RComplexVector round(RComplexVector x, int digits) {
         controlVisibility();
         double[] result = new double[x.getLength() << 1];
@@ -137,7 +137,7 @@ public abstract class Round extends RBuiltinNode {
         return ret;
     }
 
-    @Specialization(order = 33, guards = "hasDigits")
+    @Specialization(guards = "hasDigits")
     public RComplexVector roundDigits(RComplexVector x, int digits) {
         controlVisibility();
         double[] result = new double[x.getLength() << 1];
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RowMeans.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RowMeans.java
index 2e1fba7479..cb6498e0cd 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RowMeans.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RowMeans.java
@@ -42,7 +42,7 @@ public abstract class RowMeans extends RBuiltinNode {
         return arguments;
     }
 
-    @Specialization(guards = "!isNaRm", order = 0)
+    @Specialization(guards = "!isNaRm")
     public RDoubleVector rowMeansNaRmFalse(RDoubleVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[rowNum];
@@ -68,7 +68,7 @@ public abstract class RowMeans extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA() && isComplete);
     }
 
-    @Specialization(guards = "isNaRm", order = 1)
+    @Specialization(guards = "isNaRm")
     public RDoubleVector rowMeansNaRmTrue(RDoubleVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[rowNum];
@@ -94,7 +94,7 @@ public abstract class RowMeans extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, isComplete);
     }
 
-    @Specialization(guards = "!isNaRm", order = 2)
+    @Specialization(guards = "!isNaRm")
     public RDoubleVector rowMeansNaRmFalse(RLogicalVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[rowNum];
@@ -114,7 +114,7 @@ public abstract class RowMeans extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA());
     }
 
-    @Specialization(guards = "isNaRm", order = 3)
+    @Specialization(guards = "isNaRm")
     public RDoubleVector rowMeansNaRmTrue(RLogicalVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[rowNum];
@@ -140,7 +140,7 @@ public abstract class RowMeans extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, isComplete);
     }
 
-    @Specialization(guards = "!isNaRm", order = 4)
+    @Specialization(guards = "!isNaRm")
     public RDoubleVector rowMeansNaRmFalse(RIntVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[rowNum];
@@ -160,7 +160,7 @@ public abstract class RowMeans extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA());
     }
 
-    @Specialization(guards = "isNaRm", order = 5)
+    @Specialization(guards = "isNaRm")
     public RDoubleVector rowMeansNaRmTrue(RIntVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[rowNum];
@@ -187,7 +187,7 @@ public abstract class RowMeans extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 6)
+    @Specialization
     public RDoubleVector rowMeans(VirtualFrame frame, RAbstractStringVector x, int rowNum, int colNum, byte naRm) {
         controlVisibility();
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.X_NUMERIC);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RowSums.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RowSums.java
index 00f34422de..0ed92286c3 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RowSums.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/RowSums.java
@@ -42,7 +42,7 @@ public abstract class RowSums extends RBuiltinNode {
         return arguments;
     }
 
-    @Specialization(guards = "!isNaRm", order = 0)
+    @Specialization(guards = "!isNaRm")
     public RDoubleVector rowSumsNaRmFalse(RDoubleVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[rowNum];
@@ -68,7 +68,7 @@ public abstract class RowSums extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA() && isComplete);
     }
 
-    @Specialization(guards = "isNaRm", order = 1)
+    @Specialization(guards = "isNaRm")
     public RDoubleVector rowSumsNaRmTrue(RDoubleVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[rowNum];
@@ -86,7 +86,7 @@ public abstract class RowSums extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(guards = "!isNaRm", order = 2)
+    @Specialization(guards = "!isNaRm")
     public RDoubleVector rowSumsNaRmFalse(RLogicalVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[rowNum];
@@ -106,7 +106,7 @@ public abstract class RowSums extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA());
     }
 
-    @Specialization(guards = "isNaRm", order = 3)
+    @Specialization(guards = "isNaRm")
     public RDoubleVector rowSumsNaRmTrue(RLogicalVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[rowNum];
@@ -124,7 +124,7 @@ public abstract class RowSums extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(guards = "!isNaRm", order = 4)
+    @Specialization(guards = "!isNaRm")
     public RDoubleVector rowSumsNaRmFalse(RIntVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[rowNum];
@@ -144,7 +144,7 @@ public abstract class RowSums extends RBuiltinNode {
         return RDataFactory.createDoubleVector(result, na.neverSeenNA());
     }
 
-    @Specialization(guards = "isNaRm", order = 5)
+    @Specialization(guards = "isNaRm")
     public RDoubleVector rowSumsNaRmTrue(RIntVector x, int rowNum, int colNum, @SuppressWarnings("unused") byte naRm) {
         controlVisibility();
         double[] result = new double[rowNum];
@@ -163,7 +163,7 @@ public abstract class RowSums extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 6)
+    @Specialization
     public RDoubleVector rowSums(VirtualFrame frame, RAbstractStringVector x, int rowNum, int colNum, byte naRm) {
         controlVisibility();
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.X_NUMERIC);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sample.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sample.java
index 1723ab2e00..6c403a920c 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sample.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sample.java
@@ -42,32 +42,32 @@ public abstract class Sample extends RBuiltinNode {
         return arguments;
     }
 
-    @Specialization(order = 10, guards = "invalidFirstArgument")
+    @Specialization(guards = "invalidFirstArgument")
     @SuppressWarnings("unused")
     public RIntVector doSampleInvalidFirstArg(VirtualFrame frame, final int x, final int size, final byte isRepeatable, final RDoubleVector prob) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_FIRST_ARGUMENT);
     }
 
-    @Specialization(order = 20, guards = "invalidProb")
+    @Specialization(guards = "invalidProb")
     @SuppressWarnings("unused")
     public RIntVector doSampleInvalidProb(VirtualFrame frame, final int x, final int size, final byte isRepeatable, final RDoubleVector prob) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INCORRECT_NUM_PROB);
     }
 
-    @Specialization(order = 30, guards = "largerPopulation")
+    @Specialization(guards = "largerPopulation")
     @SuppressWarnings("unused")
     public RIntVector doSampleLargerPopulation(VirtualFrame frame, final int x, final int size, final byte isRepeatable, final RDoubleVector prob) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SAMPLE_LARGER_THAN_POPULATION);
     }
 
-    @Specialization(order = 40, guards = "invalidSizeArgument")
+    @Specialization(guards = "invalidSizeArgument")
     @SuppressWarnings("unused")
     public RIntVector doSampleInvalidSize(VirtualFrame frame, final int x, final int size, final byte isRepeatable, final RDoubleVector prob) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, RRuntime.toString(size));
 
     }
 
-    @Specialization(order = 1, guards = {"!invalidFirstArgument", "!invalidProb", "!largerPopulation", "!invalidSizeArgument", "withReplacement"})
+    @Specialization(guards = {"!invalidFirstArgument", "!invalidProb", "!largerPopulation", "!invalidSizeArgument", "withReplacement"})
     public RIntVector doSampleWithReplacement(VirtualFrame frame, final int x, final int size, final byte isRepeatable, final RDoubleVector prob) {
         // The following code is transcribed from GNU R src/main/random.c lines 493-501 in
         // function do_sample.
@@ -87,7 +87,7 @@ public abstract class Sample extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 2, guards = {"!invalidFirstArgument", "!invalidProb", "!largerPopulation", "!invalidSizeArgument", "!withReplacement"})
+    @Specialization(guards = {"!invalidFirstArgument", "!invalidProb", "!largerPopulation", "!invalidSizeArgument", "!withReplacement"})
     public RIntVector doSampleNoReplacement(VirtualFrame frame, final int x, final int size, final byte isRepeatable, final RDoubleVector prob) {
         double[] probArray = prob.getDataCopy();
         fixupProbability(frame, probArray, x, size, isRepeatable);
@@ -95,24 +95,24 @@ public abstract class Sample extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 50, guards = "invalidFirstArgumentNullProb")
+    @Specialization(guards = "invalidFirstArgumentNullProb")
     public RIntVector doSampleInvalidFirstArgument(VirtualFrame frame, final int x, final int size, final byte isRepeatable, final RNull prob) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_FIRST_ARGUMENT);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 60, guards = "invalidSizeArgument")
+    @Specialization(guards = "invalidSizeArgument")
     public RIntVector doSampleInvalidSizeArgument(VirtualFrame frame, final int x, final int size, final byte isRepeatable, final RNull prob) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, RRuntime.toString(size));
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 70, guards = "largerPopulation")
+    @Specialization(guards = "largerPopulation")
     public RIntVector doSampleInvalidLargerPopulation(VirtualFrame frame, final int x, final int size, final byte isRepeatable, final RNull prob) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INCORRECT_NUM_PROB);
     }
 
-    @Specialization(order = 80, guards = {"!invalidFirstArgumentNullProb", "!invalidSizeArgument", "!largerPopulation"})
+    @Specialization(guards = {"!invalidFirstArgumentNullProb", "!invalidSizeArgument", "!largerPopulation"})
     public RIntVector doSample(final int x, final int size, final byte isRepeatable, @SuppressWarnings("unused") final RNull prob) {
         // TODO:Add support of long integers.
         // The following code is transcribed from GNU R src/main/random.c lines 533-545 in
@@ -139,7 +139,7 @@ public abstract class Sample extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 100, guards = "invalidIsRepeatable")
+    @Specialization(guards = "invalidIsRepeatable")
     public RIntVector doSampleInvalidIsRepeatable(VirtualFrame frame, final int x, final int size, final byte isRepeatable, final RDoubleVector prob) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, RRuntime.toString(isRepeatable));
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Seq.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Seq.java
index 1b0e2eb105..1cda5c6287 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Seq.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Seq.java
@@ -68,91 +68,91 @@ public abstract class Seq extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 0, guards = {"startLengthOne", "toLengthOne", "zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "zero"})
     public int seqZero(VirtualFrame frame, RAbstractIntVector start, RAbstractIntVector to, Object stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return 0;
     }
 
-    @Specialization(order = 1, guards = {"startLengthOne", "toLengthOne", "zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "zero"})
     public int seqZer0(RAbstractDoubleVector start, RAbstractIntVector to, Object stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return 0;
     }
 
-    @Specialization(order = 2, guards = {"startLengthOne", "toLengthOne", "zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "zero"})
     public int seqZero(RAbstractIntVector start, RAbstractDoubleVector to, Object stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return 0;
     }
 
-    @Specialization(order = 3, guards = {"startLengthOne", "toLengthOne", "zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "zero"})
     public double seq(RAbstractDoubleVector start, RAbstractDoubleVector to, Object stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return 0;
     }
 
-    @Specialization(order = 5, guards = {"startLengthOne", "toLengthOne", "!zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!zero"})
     public RIntSequence seq(RAbstractIntVector start, RAbstractIntVector to, RMissing stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createIntSequence(start.getDataAt(0), ascending(start, to) ? 1 : -1, Math.abs(to.getDataAt(0) - start.getDataAt(0)) + 1);
     }
 
-    @Specialization(order = 10, guards = {"startLengthOne", "toLengthOne", "!zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!zero"})
     public RIntSequence seq(RAbstractIntVector start, RAbstractIntVector to, int stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createIntSequence(start.getDataAt(0), stride, Math.abs((to.getDataAt(0) - start.getDataAt(0)) / stride) + 1);
     }
 
-    @Specialization(order = 12, guards = {"startLengthOne", "toLengthOne", "!lengthZero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!lengthZero"})
     public RDoubleVector seq(RAbstractIntVector start, RAbstractIntVector to, RMissing stride, int lengthOut, RMissing alongWith) {
         controlVisibility();
         return getVectorWithComputedStride(RRuntime.int2double(start.getDataAt(0)), RRuntime.int2double(to.getDataAt(0)), RRuntime.int2double(lengthOut), ascending(start, to));
     }
 
-    @Specialization(order = 13, guards = {"startLengthOne", "toLengthOne", "!lengthZero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!lengthZero"})
     public RDoubleVector seq(RAbstractLogicalVector start, RAbstractLogicalVector to, RMissing stride, int lengthOut, RMissing alongWith) {
         controlVisibility();
         return getVectorWithComputedStride(RRuntime.logical2double(start.getDataAt(0)), RRuntime.logical2double(to.getDataAt(0)), RRuntime.int2double(lengthOut), ascending(start, to));
     }
 
-    @Specialization(order = 14, guards = {"startLengthOne", "toLengthOne", "lengthZero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "lengthZero"})
     public RIntVector seqLengthZero(RAbstractIntVector start, RAbstractIntVector to, RMissing stride, int lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createEmptyIntVector();
     }
 
-    @Specialization(order = 15, guards = {"startLengthOne", "toLengthOne", "!zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!zero"})
     public RDoubleSequence seq(RAbstractIntVector start, RAbstractIntVector to, double stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createDoubleSequence(RRuntime.int2double(start.getDataAt(0)), stride, (int) (Math.abs((to.getDataAt(0) - start.getDataAt(0)) / stride)) + 1);
     }
 
-    @Specialization(order = 17, guards = {"startLengthOne", "toLengthOne", "!lengthZero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!lengthZero"})
     public RDoubleVector seq(RAbstractIntVector start, RAbstractIntVector to, RMissing stride, double lengthOut, RMissing alongWith) {
         controlVisibility();
         return getVectorWithComputedStride(RRuntime.int2double(start.getDataAt(0)), RRuntime.int2double(to.getDataAt(0)), lengthOut, ascending(start, to));
     }
 
-    @Specialization(order = 18, guards = {"startLengthOne", "toLengthOne", "!lengthZero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!lengthZero"})
     public RDoubleVector seq(RAbstractLogicalVector start, RAbstractLogicalVector to, RMissing stride, double lengthOut, RMissing alongWith) {
         controlVisibility();
         return getVectorWithComputedStride(RRuntime.logical2double(start.getDataAt(0)), RRuntime.logical2double(to.getDataAt(0)), lengthOut, ascending(start, to));
     }
 
-    @Specialization(order = 19, guards = {"startLengthOne", "toLengthOne", "lengthZero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "lengthZero"})
     public RIntVector seqLengthZero(RAbstractLogicalVector start, RAbstractLogicalVector to, RMissing stride, double lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createEmptyIntVector();
     }
 
-    @Specialization(order = 31, guards = {"startLengthOne", "toLengthOne", "!zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!zero"})
     public RDoubleSequence seq(RAbstractIntVector start, RAbstractDoubleVector to, RMissing stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createDoubleSequence(start.getDataAt(0), ascending(start, to) ? 1 : -1, (int) Math.abs(to.getDataAt(0) - start.getDataAt(0)) + 1);
     }
 
-    @Specialization(order = 40, guards = {"startLengthOne", "toLengthOne", "!zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!zero"})
     public RDoubleSequence seq(RAbstractIntVector start, RAbstractDoubleVector to, int stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         int length = (int) Math.abs(to.getDataAt(0) - start.getDataAt(0)) / stride;
@@ -162,151 +162,151 @@ public abstract class Seq extends RBuiltinNode {
         return RDataFactory.createDoubleSequence(start.getDataAt(0), stride, length);
     }
 
-    @Specialization(order = 45, guards = "!startEmpty")
+    @Specialization(guards = "!startEmpty")
     public RIntSequence seqFromOneArg(RAbstractIntVector start, RMissing to, RMissing stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         // GNU R really does that (take the length of start to create a sequence)
         return RDataFactory.createIntSequence(1, 1, start.getLength());
     }
 
-    @Specialization(order = 46, guards = "startEmpty")
+    @Specialization(guards = "startEmpty")
     public RIntVector seqFromOneArgEmpty(RAbstractIntVector start, RMissing to, RMissing stride, RMissing lengthOut, RMissing alongWith) {
         return RDataFactory.createEmptyIntVector();
     }
 
-    @Specialization(order = 50, guards = "!startEmpty")
+    @Specialization(guards = "!startEmpty")
     public RIntSequence seqFromOneArg(RAbstractLogicalVector start, RMissing to, RMissing stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         // GNU R really does that (take the length of start to create a sequence)
         return RDataFactory.createIntSequence(1, 1, start.getLength());
     }
 
-    @Specialization(order = 51, guards = "startEmpty")
+    @Specialization(guards = "startEmpty")
     public RIntVector seqFromOneArgEmpty(RAbstractLogicalVector start, RMissing to, RMissing stride, RMissing lengthOut, RMissing alongWith) {
         return RDataFactory.createEmptyIntVector();
     }
 
-    @Specialization(order = 55, guards = {"startLengthOne", "toLengthOne", "!zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!zero"})
     public RDoubleSequence seq(RAbstractDoubleVector start, RAbstractIntVector to, RMissing stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createDoubleSequence(start.getDataAt(0), ascending(start, to) ? 1 : -1, (int) Math.abs(to.getDataAt(0) - start.getDataAt(0)) + 1);
     }
 
-    @Specialization(order = 60, guards = {"startLengthOne", "toLengthOne", "!zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!zero"})
     public RDoubleSequence seq(RAbstractDoubleVector start, RAbstractIntVector to, int stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createDoubleSequence(start.getDataAt(0), stride, (int) Math.abs((to.getDataAt(0) - start.getDataAt(0)) / stride) + 1);
     }
 
-    @Specialization(order = 91, guards = {"startLengthOne", "toLengthOne", "!zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!zero"})
     public RDoubleSequence seq(RAbstractDoubleVector start, RAbstractDoubleVector to, RMissing stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createDoubleSequence(start.getDataAt(0), ascending(start, to) ? 1 : -1, (int) Math.abs(to.getDataAt(0) - start.getDataAt(0)) + 1);
     }
 
-    @Specialization(order = 100, guards = {"startLengthOne", "toLengthOne", "!zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!zero"})
     public RDoubleSequence seq(RAbstractDoubleVector start, RAbstractDoubleVector to, int stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createDoubleSequence(start.getDataAt(0), stride, (int) (Math.abs((to.getDataAt(0) - start.getDataAt(0)) / stride) + 1));
     }
 
-    @Specialization(order = 103, guards = {"startLengthOne", "toLengthOne", "!lengthZero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!lengthZero"})
     public RDoubleVector seq(RAbstractDoubleVector start, RAbstractDoubleVector to, RMissing stride, int lengthOut, RMissing alongWith) {
         controlVisibility();
         return getVectorWithComputedStride(start.getDataAt(0), to.getDataAt(0), RRuntime.int2double(lengthOut), ascending(start, to));
     }
 
-    @Specialization(order = 104, guards = {"startLengthOne", "toLengthOne", "lengthZero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "lengthZero"})
     public RIntVector seqLengthZero(RAbstractDoubleVector start, RAbstractDoubleVector to, RMissing stride, int lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createEmptyIntVector();
     }
 
-    @Specialization(order = 110, guards = {"startLengthOne", "toLengthOne", "!zero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!zero"})
     public RDoubleSequence seq(RAbstractDoubleVector start, RAbstractDoubleVector to, double stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createDoubleSequence(start.getDataAt(0), stride, (int) (Math.abs((to.getDataAt(0) - start.getDataAt(0)) / stride) + 1));
     }
 
-    @Specialization(order = 113, guards = {"startLengthOne", "toLengthOne", "!lengthZero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "!lengthZero"})
     public RDoubleVector seq(RAbstractDoubleVector start, RAbstractDoubleVector to, RMissing stride, double lengthOut, RMissing alongWith) {
         controlVisibility();
         return getVectorWithComputedStride(start.getDataAt(0), to.getDataAt(0), lengthOut, ascending(start, to));
     }
 
-    @Specialization(order = 114, guards = {"startLengthOne", "toLengthOne", "lengthZero"})
+    @Specialization(guards = {"startLengthOne", "toLengthOne", "lengthZero"})
     public RIntVector seqLengthZero(RAbstractDoubleVector start, RAbstractDoubleVector to, RMissing stride, double lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createEmptyIntVector();
     }
 
-    @Specialization(order = 120, guards = "!startEmpty")
+    @Specialization(guards = "!startEmpty")
     public RDoubleSequence seqFromOneArg(RAbstractDoubleVector start, RMissing to, RMissing stride, RMissing lengthOut, RMissing alongWith) {
         controlVisibility();
         // GNU R really does that (take the length of start to create a sequence)
         return RDataFactory.createDoubleSequence(1, 1, start.getLength());
     }
 
-    @Specialization(order = 121, guards = "startEmpty")
+    @Specialization(guards = "startEmpty")
     public RIntVector seqFromOneArgEmpty(RAbstractDoubleVector start, RMissing to, RMissing stride, RMissing lengthOut, RMissing alongWith) {
         return RDataFactory.createEmptyIntVector();
     }
 
-    @Specialization(order = 150, guards = "lengthZero")
+    @Specialization(guards = "lengthZero")
     public RIntVector seqLengthZero(RMissing start, RMissing to, RMissing stride, int lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createEmptyIntVector();
     }
 
-    @Specialization(order = 151, guards = "!lengthZero")
+    @Specialization(guards = "!lengthZero")
     public RIntSequence seq(RMissing start, RMissing to, RMissing stride, int lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createIntSequence(1, 1, lengthOut);
     }
 
-    @Specialization(order = 155, guards = "lengthZero")
+    @Specialization(guards = "lengthZero")
     public RIntVector seqLengthZero(RMissing start, RMissing to, RMissing stride, double lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createEmptyIntVector();
     }
 
-    @Specialization(order = 156, guards = "!lengthZero")
+    @Specialization(guards = "!lengthZero")
     public RIntSequence seq(RMissing start, RMissing to, RMissing stride, double lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createIntSequence(1, 1, (int) Math.ceil(lengthOut));
     }
 
-    @Specialization(order = 160, guards = "lengthZeroAlong")
+    @Specialization(guards = "lengthZeroAlong")
     public RIntVector LengthZero(RMissing start, RMissing to, RMissing stride, Object lengthOut, RAbstractVector alongWith) {
         controlVisibility();
         return RDataFactory.createEmptyIntVector();
     }
 
-    @Specialization(order = 161, guards = "!lengthZeroAlong")
+    @Specialization(guards = "!lengthZeroAlong")
     public RIntSequence seq(RMissing start, RMissing to, RMissing stride, Object lengthOut, RAbstractVector alongWith) {
         controlVisibility();
         return RDataFactory.createIntSequence(1, 1, alongWith.getLength());
     }
 
-    @Specialization(order = 170, guards = {"startLengthOne", "lengthZero"})
+    @Specialization(guards = {"startLengthOne", "lengthZero"})
     public RDoubleVector seq(RAbstractDoubleVector start, RMissing to, RMissing stride, int lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createEmptyDoubleVector();
     }
 
-    @Specialization(order = 171, guards = {"startLengthOne", "lengthZeroAlong"})
+    @Specialization(guards = {"startLengthOne", "lengthZeroAlong"})
     public RDoubleVector seq(RAbstractDoubleVector start, RMissing to, RMissing stride, Object lengthOut, RAbstractVector alongWith) {
         controlVisibility();
         return RDataFactory.createEmptyDoubleVector();
     }
 
-    @Specialization(order = 180, guards = {"startLengthOne", "!lengthZero"})
+    @Specialization(guards = {"startLengthOne", "!lengthZero"})
     public RDoubleSequence seqLengthZero(RAbstractDoubleVector start, RMissing to, RMissing stride, int lengthOut, RMissing alongWith) {
         controlVisibility();
         return RDataFactory.createDoubleSequence(start.getDataAt(0), 1, lengthOut);
     }
 
-    @Specialization(order = 181, guards = {"startLengthOne", "!lengthZeroAlong"})
+    @Specialization(guards = {"startLengthOne", "!lengthZeroAlong"})
     public RDoubleSequence seqLengthZero(RAbstractDoubleVector start, RMissing to, RMissing stride, Object lengthOut, RAbstractVector alongWith) {
         controlVisibility();
         return RDataFactory.createDoubleSequence(start.getDataAt(0), 1, alongWith.getLength());
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sprintf.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sprintf.java
index 5d04fe0d75..78d45645ee 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sprintf.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Sprintf.java
@@ -46,29 +46,29 @@ public abstract class Sprintf extends RBuiltinNode {
         return new RNode[]{ConstantNode.create(RMissing.instance), ConstantNode.create(RMissing.instance)};
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public String sprintf(String fmt, @SuppressWarnings("unused") RMissing x) {
         controlVisibility();
         return fmt;
     }
 
-    @Specialization(order = 2, guards = "fmtLengthOne")
+    @Specialization(guards = "fmtLengthOne")
     public String sprintf(RAbstractStringVector fmt, RMissing x) {
         return sprintf(fmt.getDataAt(0), x);
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public String sprintf(String fmt, int x) {
         controlVisibility();
         return format(fmt, x);
     }
 
-    @Specialization(order = 11, guards = "fmtLengthOne")
+    @Specialization(guards = "fmtLengthOne")
     public String sprintf(RAbstractStringVector fmt, int x) {
         return sprintf(fmt.getDataAt(0), x);
     }
 
-    @Specialization(order = 20)
+    @Specialization
     public RStringVector sprintf(String fmt, RAbstractIntVector x) {
         controlVisibility();
         String[] r = new String[x.getLength()];
@@ -78,12 +78,12 @@ public abstract class Sprintf extends RBuiltinNode {
         return RDataFactory.createStringVector(r, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 21, guards = "fmtLengthOne")
+    @Specialization(guards = "fmtLengthOne")
     public RStringVector sprintf(RAbstractStringVector fmt, RAbstractIntVector x) {
         return sprintf(fmt.getDataAt(0), x);
     }
 
-    @Specialization(order = 30)
+    @Specialization
     public String sprintf(VirtualFrame frame, String fmt, double x) {
         controlVisibility();
         char f = Character.toLowerCase(firstFormatChar(fmt));
@@ -96,12 +96,12 @@ public abstract class Sprintf extends RBuiltinNode {
         return format(fmt, x);
     }
 
-    @Specialization(order = 31, guards = "fmtLengthOne")
+    @Specialization(guards = "fmtLengthOne")
     public String sprintf(VirtualFrame frame, RAbstractStringVector fmt, double x) {
         return sprintf(frame, fmt.getDataAt(0), x);
     }
 
-    @Specialization(order = 40)
+    @Specialization
     public RStringVector sprintf(VirtualFrame frame, String fmt, RAbstractDoubleVector x) {
         controlVisibility();
         String[] r = new String[x.getLength()];
@@ -111,23 +111,23 @@ public abstract class Sprintf extends RBuiltinNode {
         return RDataFactory.createStringVector(r, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 41, guards = "fmtLengthOne")
+    @Specialization(guards = "fmtLengthOne")
     public RStringVector sprintf(VirtualFrame frame, RAbstractStringVector fmt, RAbstractDoubleVector x) {
         return sprintf(frame, fmt.getDataAt(0), x);
     }
 
-    @Specialization(order = 50)
+    @Specialization
     public String sprintf(String fmt, String x) {
         controlVisibility();
         return format(fmt, x);
     }
 
-    @Specialization(order = 51, guards = "fmtLengthOne")
+    @Specialization(guards = "fmtLengthOne")
     public String sprintf(RAbstractStringVector fmt, String x) {
         return sprintf(fmt.getDataAt(0), x);
     }
 
-    @Specialization(order = 60)
+    @Specialization
     public RStringVector sprintf(String fmt, RAbstractStringVector x) {
         controlVisibility();
         String[] r = new String[x.getLength()];
@@ -137,12 +137,12 @@ public abstract class Sprintf extends RBuiltinNode {
         return RDataFactory.createStringVector(r, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 61, guards = "fmtLengthOne")
+    @Specialization(guards = "fmtLengthOne")
     public RStringVector sprintf(RAbstractStringVector fmt, RAbstractStringVector x) {
         return sprintf(fmt.getDataAt(0), x);
     }
 
-    @Specialization(order = 100)
+    @Specialization
     public String sprintf(String fmt, Object[] args) {
         controlVisibility();
         return format(fmt, args);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Substr.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Substr.java
index 9faf176767..13dd4a8947 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Substr.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Substr.java
@@ -67,19 +67,19 @@ public abstract class Substr extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1, guards = "emptyArg")
+    @Specialization(guards = "emptyArg")
     public RStringVector substrEmptyArg(VirtualFrame frame, RAbstractStringVector arg, RAbstractIntVector start, RAbstractIntVector stop) {
         return RDataFactory.createEmptyStringVector();
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 2, guards = {"!emptyArg", "wrongParams"})
+    @Specialization(guards = {"!emptyArg", "wrongParams"})
     public RNull substrWrongParams(RAbstractStringVector arg, RAbstractIntVector start, RAbstractIntVector stop) {
         assert false; // should never happen
         return RNull.instance; // dummy
     }
 
-    @Specialization(order = 3, guards = {"!emptyArg", "!wrongParams"})
+    @Specialization(guards = {"!emptyArg", "!wrongParams"})
     public RStringVector substr(RAbstractStringVector arg, RAbstractIntVector start, RAbstractIntVector stop) {
         String[] res = new String[arg.getLength()];
         for (int i = 0, j = 0, k = 0; i < arg.getLength(); ++i, j = Utils.incMod(j, start.getLength()), k = Utils.incMod(k, stop.getLength())) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Switch.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Switch.java
index 0ffc596865..8707b8790f 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Switch.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Switch.java
@@ -39,7 +39,7 @@ public abstract class Switch extends RBuiltinNode {
         return this.isVisible;
     }
 
-    @Specialization(order = 0, guards = "isLengthOne")
+    @Specialization(guards = "isLengthOne")
     public Object doSwitch(VirtualFrame frame, RAbstractStringVector x, Object[] optionalArgs) {
         controlVisibility();
         Object currentDefaultValue = null;
@@ -67,12 +67,12 @@ public abstract class Switch extends RBuiltinNode {
         }
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public Object doSwitch(VirtualFrame frame, int x, Object[] optionalArgs) {
         return doSwitchInt(frame, x, optionalArgs);
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public Object doSwitch(VirtualFrame frame, Object x, Object[] optionalArgs) {
         if (castIntNode == null) {
             CompilerDirectives.transferToInterpreterAndInvalidate();
@@ -87,7 +87,7 @@ public abstract class Switch extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 3)
+    @Specialization
     public Object doSwitch(VirtualFrame frame, RMissing x, RMissing optionalArgs) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.EXPR_MISSING);
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/SysFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/SysFunctions.java
index 2d86cc108e..93b8abbc9f 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/SysFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/SysFunctions.java
@@ -90,7 +90,7 @@ public class SysFunctions {
             }
         }
 
-        @Specialization(order = 100)
+        @Specialization
         public Object sysGetEnvGeneric(VirtualFrame frame, @SuppressWarnings("unused") Object x, @SuppressWarnings("unused") Object unset) {
             controlVisibility();
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.WRONG_TYPE);
@@ -156,14 +156,14 @@ public class SysFunctions {
     @RBuiltin(name = "Sys.sleep", kind = INTERNAL, parameterNames = {"time"})
     public abstract static class SysSleep extends RInvisibleBuiltinNode {
 
-        @Specialization(order = 0)
+        @Specialization
         public Object sysSleep(double seconds) {
             controlVisibility();
             sleep(convertToMillis(seconds));
             return RNull.instance;
         }
 
-        @Specialization(order = 1)
+        @Specialization
         public Object sysSleep(VirtualFrame frame, String secondsString) {
             controlVisibility();
             long millis = convertToMillis(checkValidString(frame, secondsString));
@@ -171,7 +171,7 @@ public class SysFunctions {
             return RNull.instance;
         }
 
-        @Specialization(order = 2, guards = "lengthOne")
+        @Specialization(guards = "lengthOne")
         public Object sysSleep(VirtualFrame frame, RStringVector secondsVector) {
             controlVisibility();
             long millis = convertToMillis(checkValidString(frame, secondsVector.getDataAt(0)));
@@ -183,7 +183,7 @@ public class SysFunctions {
             return vec.getLength() == 1;
         }
 
-        @Specialization(order = 100)
+        @Specialization
         public Object sysSleep(VirtualFrame frame, @SuppressWarnings("unused") Object arg) throws RError {
             controlVisibility();
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_VALUE, "time");
@@ -216,13 +216,13 @@ public class SysFunctions {
     @RBuiltin(name = "Sys.readlink", kind = INTERNAL, parameterNames = {"paths"})
     public abstract static class SysReadlink extends RBuiltinNode {
 
-        @Specialization(order = 0)
+        @Specialization
         public Object sysReadLink(String path) {
             controlVisibility();
             return RDataFactory.createStringVector(doSysReadLink(path));
         }
 
-        @Specialization(order = 1)
+        @Specialization
         public Object sysReadlink(RStringVector vector) {
             controlVisibility();
             String[] paths = new String[vector.getLength()];
@@ -254,7 +254,7 @@ public class SysFunctions {
             return s;
         }
 
-        @Specialization(order = 100)
+        @Specialization
         public Object sysReadlinkGeneric(VirtualFrame frame, @SuppressWarnings("unused") Object path) {
             controlVisibility();
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARGUMENT, "paths");
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TempFile.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TempFile.java
index 20aa2d5401..b729027f3e 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TempFile.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TempFile.java
@@ -50,7 +50,7 @@ public abstract class TempFile extends RBuiltinNode {
         return "invalid '" + msg + "'";
     }
 
-    @Specialization(order = 0, guards = "tempDirL1")
+    @Specialization(guards = "tempDirL1")
     public RStringVector tempfile(String pattern, RAbstractStringVector tempDir, String fileExt) {
         controlVisibility();
         return RDataFactory.createStringVector(createFile(pattern, tempDir.getDataAt(0), fileExt));
@@ -61,7 +61,7 @@ public abstract class TempFile extends RBuiltinNode {
         return tempDir.getLength() == 1;
     }
 
-    @Specialization(order = 100)
+    @Specialization
     public RStringVector tempfileGeneric(VirtualFrame frame, Object pattern, Object tempDir, Object fileExt) throws RError {
         controlVisibility();
         RStringVector[] argVecs = new RStringVector[]{checkVector(frame, pattern, INVALID_PATTERN), checkVector(frame, tempDir, INVALID_TEMPDIR), checkVector(frame, fileExt, INVALID_FILEEXT)};
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Transpose.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Transpose.java
index ff04c715fc..bb7b91603a 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Transpose.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Transpose.java
@@ -72,14 +72,14 @@ public abstract class Transpose extends RBuiltinNode {
         return value;
     }
 
-    @Specialization(order = 10, guards = "isEmpty2D")
+    @Specialization(guards = "isEmpty2D")
     public RAbstractVector transpose(RAbstractVector vector) {
         controlVisibility();
         int[] dim = vector.getDimensions();
         return vector.copyWithNewDimensions(new int[]{dim[1], dim[0]});
     }
 
-    @Specialization(order = 11, guards = "!isEmpty2D")
+    @Specialization(guards = "!isEmpty2D")
     public RIntVector transpose(RAbstractIntVector vector) {
         controlVisibility();
         return performAbstractIntVector(vector, vector.isMatrix() ? vector.getDimensions() : new int[]{vector.getLength(), 1});
@@ -106,7 +106,7 @@ public abstract class Transpose extends RBuiltinNode {
         return r;
     }
 
-    @Specialization(order = 12, guards = "!isEmpty2D")
+    @Specialization(guards = "!isEmpty2D")
     public RDoubleVector transpose(RAbstractDoubleVector vector) {
         controlVisibility();
         return performAbstractDoubleVector(vector, vector.isMatrix() ? vector.getDimensions() : new int[]{vector.getLength(), 1});
@@ -133,7 +133,7 @@ public abstract class Transpose extends RBuiltinNode {
         return r;
     }
 
-    @Specialization(order = 13, guards = "!isEmpty2D")
+    @Specialization(guards = "!isEmpty2D")
     public RStringVector transpose(RAbstractStringVector vector) {
         controlVisibility();
         return performAbstractStringVector(vector, vector.isMatrix() ? vector.getDimensions() : new int[]{vector.getLength(), 1});
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TrigExpFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TrigExpFunctions.java
index 9abca28841..29673a9778 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TrigExpFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TrigExpFunctions.java
@@ -361,36 +361,36 @@ public class TrigExpFunctions {
             return arguments;
         }
 
-        @Specialization(order = 10)
+        @Specialization
         public Object atan(VirtualFrame frame, @SuppressWarnings("unused") RMissing x, @SuppressWarnings("unused") RMissing y) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.ARGUMENT_MISSING, getRBuiltin().parameterNames()[0]);
         }
 
-        @Specialization(order = 11)
+        @Specialization
         public Object atan(VirtualFrame frame, @SuppressWarnings("unused") RAbstractDoubleVector x, @SuppressWarnings("unused") RMissing y) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.ARGUMENT_MISSING, getRBuiltin().parameterNames()[1]);
         }
 
-        @Specialization(order = 0)
+        @Specialization
         public double atan2(double x, double y) {
             controlVisibility();
             return Math.atan2(x, y);
         }
 
-        @Specialization(order = 1)
+        @Specialization
         public RDoubleVector atan2(RDoubleVector x, RDoubleVector y) {
             controlVisibility();
             return doFun(x, y, (double d1, double d2) -> Math.atan2(d1, d2));
         }
 
-        @Specialization(order = 2)
+        @Specialization
         public RDoubleVector atan2(double x, RDoubleVector y) {
             controlVisibility();
             RDoubleVector xv = RDataFactory.createDoubleVectorFromScalar(x).copyResized(y.getLength(), false);
             return doFun(xv, y, (double d1, double d2) -> Math.atan2(d1, d2));
         }
 
-        @Specialization(order = 3)
+        @Specialization
         public RDoubleVector atan2(RDoubleVector x, double y) {
             controlVisibility();
             RDoubleVector yv = RDataFactory.createDoubleVectorFromScalar(y);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Unlist.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Unlist.java
index 97457b1cfc..2823eac2a3 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Unlist.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Unlist.java
@@ -66,12 +66,12 @@ public abstract class Unlist extends RBuiltinNode {
             return 0;
         }
 
-        @Specialization(order = 10, guards = "!isVectorList")
+        @Specialization(guards = "!isVectorList")
         public int getLength(RAbstractVector vector) {
             return vector.getLength();
         }
 
-        @Specialization(order = 20, guards = "isVectorList")
+        @Specialization(guards = "isVectorList")
         public int getLengthList(VirtualFrame frame, RAbstractVector vector) {
             int totalSize = 0;
             for (int i = 0; i < vector.getLength(); ++i) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttr.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttr.java
index 897d70ad27..ea9c737287 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttr.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateAttr.java
@@ -86,7 +86,7 @@ public abstract class UpdateAttr extends RInvisibleBuiltinNode {
         return castList.executeList(frame, value);
     }
 
-    @Specialization(order = 0, guards = "nullValue")
+    @Specialization(guards = "nullValue")
     public RAbstractContainer updateAttr(VirtualFrame frame, RAbstractContainer container, String name, RNull value) {
         controlVisibility();
         RVector resultVector = container.materializeNonSharedVector();
@@ -117,7 +117,7 @@ public abstract class UpdateAttr extends RInvisibleBuiltinNode {
         throw RError.error(frame, sourceSection, RError.Message.SET_INVALID_CLASS_ATTR);
     }
 
-    @Specialization(order = 1, guards = "!nullValue")
+    @Specialization(guards = "!nullValue")
     public RAbstractContainer updateAttr(VirtualFrame frame, RAbstractContainer container, String name, Object value) {
         controlVisibility();
         RVector resultVector = container.materializeNonSharedVector();
@@ -143,7 +143,7 @@ public abstract class UpdateAttr extends RInvisibleBuiltinNode {
         return container.getElementClass() == RVector.class ? container : resultVector;
     }
 
-    @Specialization(order = 2, guards = "!nullValue")
+    @Specialization(guards = "!nullValue")
     public RAbstractContainer updateAttr(VirtualFrame frame, RAbstractVector vector, RStringVector name, Object value) {
         controlVisibility();
         return updateAttr(frame, vector, name.getDataAt(0), value);
@@ -155,14 +155,14 @@ public abstract class UpdateAttr extends RInvisibleBuiltinNode {
         return value == RNull.instance;
     }
 
-    @Specialization(order = 10, guards = "!nullValueforEnv")
+    @Specialization(guards = "!nullValueforEnv")
     public REnvironment updateAttr(VirtualFrame frame, REnvironment env, String name, Object value) {
         controlVisibility();
         env.setAttr(name, value);
         return env;
     }
 
-    @Specialization(order = 11, guards = "nullValueforEnv")
+    @Specialization(guards = "nullValueforEnv")
     public REnvironment updateAttr(VirtualFrame frame, REnvironment env, String name, RNull value) {
         controlVisibility();
         env.removeAttr(name);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java
index 6fc62cc927..9ec97acd88 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDiag.java
@@ -62,20 +62,20 @@ public abstract class UpdateDiag extends RInvisibleBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 0, guards = "!isMatrix")
+    @Specialization(guards = "!isMatrix")
     public RIntVector updateDiagNoMatrix(VirtualFrame frame, RAbstractVector vector, RAbstractVector valueVector) {
         controlVisibility();
         throw RError.error(frame, this.getEncapsulatingSourceSection(), RError.Message.ONLY_MATRIX_DIAGONALS);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1, guards = {"isMatrix", "!correctReplacementLength"})
+    @Specialization(guards = {"isMatrix", "!correctReplacementLength"})
     public RIntVector updateDiagReplacementDiagonalLength(VirtualFrame frame, RAbstractVector vector, RAbstractVector valueVector) {
         controlVisibility();
         throw RError.error(frame, this.getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_DIAGONAL_LENGTH);
     }
 
-    @Specialization(order = 11, guards = {"isMatrix", "correctReplacementLength"})
+    @Specialization(guards = {"isMatrix", "correctReplacementLength"})
     public RAbstractIntVector updateDiag(RIntVector vector, RAbstractIntVector valueVector) {
         controlVisibility();
         RIntVector resultVector = vector;
@@ -94,7 +94,7 @@ public abstract class UpdateDiag extends RInvisibleBuiltinNode {
         return resultVector;
     }
 
-    @Specialization(order = 12, guards = {"isMatrix", "correctReplacementLength"})
+    @Specialization(guards = {"isMatrix", "correctReplacementLength"})
     public RAbstractDoubleVector updateDiag(RDoubleVector vector, RAbstractDoubleVector valueVector) {
         controlVisibility();
         RDoubleVector resultVector = vector;
@@ -113,7 +113,7 @@ public abstract class UpdateDiag extends RInvisibleBuiltinNode {
         return resultVector;
     }
 
-    @Specialization(order = 13, guards = {"isMatrix", "correctReplacementLength"})
+    @Specialization(guards = {"isMatrix", "correctReplacementLength"})
     public RAbstractDoubleVector updateDiag(VirtualFrame frame, RIntVector vector, RAbstractDoubleVector valueVector) {
         controlVisibility();
         if (castDouble == null) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDim.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDim.java
index 3b6d7dac39..8d9fbe00cb 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDim.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDim.java
@@ -48,7 +48,7 @@ public abstract class UpdateDim extends RInvisibleBuiltinNode {
         return (RAbstractIntVector) castInteger.executeCast(frame, vector);
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public RAbstractVector updateDim(RAbstractVector vector, RNull dimensions) {
         controlVisibility();
         RVector result = vector.materialize();
@@ -56,7 +56,7 @@ public abstract class UpdateDim extends RInvisibleBuiltinNode {
         return result;
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public RAbstractVector updateDim(VirtualFrame frame, RAbstractVector vector, RAbstractVector dimensions) {
         controlVisibility();
         if (dimensions.getLength() == 0) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java
index f236301c9b..44c8611a63 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateDimNames.java
@@ -71,7 +71,7 @@ public abstract class UpdateDimNames extends RInvisibleBuiltinNode {
         return list;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public RAbstractVector updateDimnames(VirtualFrame frame, RAbstractVector vector, RNull list) {
         RVector v = vector.materialize();
         v.setDimNames(frame, null, getEncapsulatingSourceSection());
@@ -79,7 +79,7 @@ public abstract class UpdateDimNames extends RInvisibleBuiltinNode {
         return v;
     }
 
-    @Specialization(order = 2, guards = "isZeroLength")
+    @Specialization(guards = "isZeroLength")
     public RAbstractVector updateDimnamesEmpty(VirtualFrame frame, RAbstractVector vector, RList list) {
         RVector v = vector.materialize();
         v.setDimNames(frame, null, getEncapsulatingSourceSection());
@@ -87,7 +87,7 @@ public abstract class UpdateDimNames extends RInvisibleBuiltinNode {
         return v;
     }
 
-    @Specialization(order = 3, guards = "!isZeroLength")
+    @Specialization(guards = "!isZeroLength")
     public RAbstractVector updateDimnames(VirtualFrame frame, RAbstractVector vector, RList list) {
         RVector v = vector.materialize();
         v.setDimNames(frame, convertToListOfStrings(frame, list), getEncapsulatingSourceSection());
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateLength.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateLength.java
index 8851a2ba40..0681ff70d6 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateLength.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateLength.java
@@ -44,7 +44,7 @@ public abstract class UpdateLength extends RInvisibleBuiltinNode {
         return arguments;
     }
 
-    @Specialization(order = 1, guards = "isLengthOne")
+    @Specialization(guards = "isLengthOne")
     public RAbstractVector updateLength(RAbstractVector vector, RAbstractIntVector lengthVector) {
         controlVisibility();
         int length = lengthVector.getDataAt(0);
@@ -58,7 +58,7 @@ public abstract class UpdateLength extends RInvisibleBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 2, guards = "!isLengthOne")
+    @Specialization(guards = "!isLengthOne")
     public RAbstractVector updateLengthError(VirtualFrame frame, RAbstractVector vector, RAbstractIntVector lengthVector) {
         controlVisibility();
         throw RError.error(frame, this.getEncapsulatingSourceSection(), RError.Message.INVALID_UNNAMED_VALUE);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateStorageMode.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateStorageMode.java
index ee44ad21c5..6e12f72b74 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateStorageMode.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateStorageMode.java
@@ -32,7 +32,7 @@ public abstract class UpdateStorageMode extends RBuiltinNode {
     @Child private CastTypeNode castTypeNode;
     @Child private IsFactorNode isFactor;
 
-    @Specialization(order = 0, guards = {"!isReal", "!isSingle"})
+    @Specialization(guards = {"!isReal", "!isSingle"})
     public Object update(VirtualFrame frame, final Object x, final String value) {
         controlVisibility();
         if (typeof == null) {
@@ -73,21 +73,21 @@ public abstract class UpdateStorageMode extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1, guards = "isReal")
+    @Specialization(guards = "isReal")
     public Object updateReal(VirtualFrame frame, final Object x, final String value) {
         controlVisibility();
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.USE_DEFUNCT, RRuntime.REAL, RRuntime.TYPE_DOUBLE);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 2, guards = "isSingle")
+    @Specialization(guards = "isSingle")
     public Object updateSingle(VirtualFrame frame, final Object x, final String value) {
         controlVisibility();
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.USE_DEFUNCT, RRuntime.SINGLE, "mode<-");
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 3)
+    @Specialization
     public Object update(VirtualFrame frame, final Object x, final Object value) {
         controlVisibility();
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.NULL_VALUE);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateSubstr.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateSubstr.java
index 0b7257604c..183e5f8e69 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateSubstr.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/UpdateSubstr.java
@@ -79,31 +79,31 @@ public abstract class UpdateSubstr extends RBuiltinNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1, guards = "emptyArg")
+    @Specialization(guards = "emptyArg")
     public RStringVector substrEmptyArg(RAbstractStringVector arg, RAbstractIntVector start, RAbstractIntVector stop, Object value) {
         return RDataFactory.createEmptyStringVector();
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 2, guards = {"!emptyArg", "wrongParams"})
+    @Specialization(guards = {"!emptyArg", "wrongParams"})
     public RNull substrWrongParams(RAbstractStringVector arg, RAbstractIntVector start, RAbstractIntVector stop, Object value) {
         assert false; // should never happen
         return RNull.instance; // dummy
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 10, guards = {"!emptyArg", "!wrongParams"})
+    @Specialization(guards = {"!emptyArg", "!wrongParams"})
     public RStringVector substr(VirtualFrame frame, RAbstractStringVector arg, RAbstractIntVector start, RAbstractIntVector stop, RNull value) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_UNNAMED_VALUE);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 11, guards = {"!emptyArg", "!wrongParams", "wrongValue"})
+    @Specialization(guards = {"!emptyArg", "!wrongParams", "wrongValue"})
     public RStringVector substr(VirtualFrame frame, RAbstractStringVector arg, RAbstractIntVector start, RAbstractIntVector stop, RAbstractVector value) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_UNNAMED_VALUE);
     }
 
-    @Specialization(order = 12, guards = {"!emptyArg", "!wrongParams", "!wrongValue"})
+    @Specialization(guards = {"!emptyArg", "!wrongParams", "!wrongValue"})
     public RStringVector substr(RAbstractStringVector arg, RAbstractIntVector start, RAbstractIntVector stop, RAbstractStringVector value) {
         String[] res = new String[arg.getLength()];
         for (int i = 0, j = 0, k = 0, l = 0; i < arg.getLength(); ++i, j = Utils.incMod(j, start.getLength()), k = Utils.incMod(k, stop.getLength()), l = Utils.incMod(k, value.getLength())) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArrayNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArrayNode.java
index d09b669c17..e143e27e2f 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArrayNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArrayNode.java
@@ -176,55 +176,55 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1, guards = {"inRecursion", "isFirstPositionPositive"})
+    @Specialization(guards = {"inRecursion", "isFirstPositionPositive"})
     RNull accessNullInRecursionPosPositive(VirtualFrame frame, RNull vector, int recLevel, RAbstractIntVector positions, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBSCRIPT_BOUNDS);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 2, guards = {"inRecursion", "!isFirstPositionPositive"})
+    @Specialization(guards = {"inRecursion", "!isFirstPositionPositive"})
     RNull accessNullInRecursion(VirtualFrame frame, RNull vector, int recLevel, RAbstractIntVector positions, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 3)
+    @Specialization
     RNull access(RNull vector, int recLevel, Object positions, RAbstractLogicalVector dropDim) {
         return RNull.instance;
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 4, guards = {"inRecursion", "isFirstPositionOne"})
+    @Specialization(guards = {"inRecursion", "isFirstPositionOne"})
     RNull accessFunctionInRecursionPosOne(VirtualFrame frame, RFunction vector, int recLevel, RAbstractIntVector positions, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_TYPE_LENGTH, "closure", 1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 5, guards = {"inRecursion", "isFirstPositionPositive", "!isFirstPositionOne"})
+    @Specialization(guards = {"inRecursion", "isFirstPositionPositive", "!isFirstPositionOne"})
     RNull accessFunctionInRecursionPosPositive(VirtualFrame frame, RFunction vector, int recLevel, RAbstractIntVector positions, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBSCRIPT_BOUNDS);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 6, guards = {"inRecursion", "!isFirstPositionPositive"})
+    @Specialization(guards = {"inRecursion", "!isFirstPositionPositive"})
     RNull accessFunctionInRecursion(VirtualFrame frame, RFunction vector, int recLevel, RAbstractIntVector positions, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 7, guards = "inRecursion")
+    @Specialization(guards = "inRecursion")
     RNull accessFunctionInRecursionString(VirtualFrame frame, RFunction vector, int recLevel, RAbstractStringVector positions, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBSCRIPT_BOUNDS);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 8)
+    @Specialization
     RNull accessFunction(VirtualFrame frame, RFunction vector, int recLevel, Object position, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.OBJECT_NOT_SUBSETTABLE, "closure");
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 9)
+    @Specialization
     RNull access(RAbstractContainer container, int recLevel, RNull positions, RAbstractLogicalVector dropDim) {
         // this is a special case (see ArrayPositionCast) - RNull can only appear to represent the
         // x[NA] case which has to return null and not a null vector
@@ -232,7 +232,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 10)
+    @Specialization
     Object access(VirtualFrame frame, RAbstractContainer container, int recLevel, RMissing positions, RAbstractLogicalVector dropDim) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "symbol");
@@ -242,13 +242,13 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 11, guards = "wrongDimensions")
+    @Specialization(guards = "wrongDimensions")
     Object access(VirtualFrame frame, RAbstractContainer container, int recLevel, Object[] positions, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INCORRECT_DIMENSIONS);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 12, guards = {"isPositionNA", "!isSubset"})
+    @Specialization(guards = {"isPositionNA", "!isSubset"})
     RIntVector accessNA(VirtualFrame frame, RAbstractContainer container, int recLevel, int position, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBSCRIPT_BOUNDS);
     }
@@ -331,7 +331,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 13)
+    @Specialization
     RList access(VirtualFrame frame, RList vector, int recLevel, Object[] positions, RAbstractLogicalVector dropDim) {
         // compute length of dimensions array and of the resulting vector
         DimsAndResultLength res = getDimsAndResultLength(positions, dropDim.getLength() == 0 ? RRuntime.TRUE : dropDim.getDataAt(0));
@@ -379,7 +379,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 14, guards = "isSubset")
+    @Specialization(guards = "isSubset")
     RList accessSubset(RList vector, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         int resLength = p.getLength();
         Object[] data = new Object[resLength];
@@ -412,12 +412,12 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 15, guards = "!hasNames")
+    @Specialization(guards = "!hasNames")
     RList accessStringNoNames(VirtualFrame frame, RList vector, int recLevel, RStringVector p, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.NO_SUCH_INDEX, 1);
     }
 
-    @Specialization(order = 16, guards = {"hasNames", "!isSubset", "twoPosition"})
+    @Specialization(guards = {"hasNames", "!isSubset", "twoPosition"})
     Object accessStringTwoPosRec(VirtualFrame frame, RList vector, int recLevel, RStringVector p, RAbstractLogicalVector dropDim) {
         int position = getPositionInRecursion(frame, vector, p.getDataAt(0), recLevel, getEncapsulatingSourceSection());
         Object newVector = castVector(frame, vector.getDataAt(position - 1));
@@ -425,7 +425,7 @@ public abstract class AccessArrayNode extends RNode {
         return accessRecursive(frame, newVector, newPosition, recLevel + 1, dropDim);
     }
 
-    @Specialization(order = 17, guards = {"hasNames", "!isSubset", "!twoPosition"})
+    @Specialization(guards = {"hasNames", "!isSubset", "!twoPosition"})
     Object accessString(VirtualFrame frame, RList vector, int recLevel, RStringVector p, RAbstractLogicalVector dropDim) {
         int position = getPositionInRecursion(frame, vector, p.getDataAt(0), recLevel, getEncapsulatingSourceSection());
         RStringVector newP = popHead(p, posNACheck);
@@ -433,7 +433,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 20, guards = {"!isSubset", "onePosition", "!inRecursion"})
+    @Specialization(guards = {"!isSubset", "onePosition", "!inRecursion"})
     Object accessOnePos(VirtualFrame frame, RList vector, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         int position = p.getDataAt(0);
         if (RRuntime.isNA(position)) {
@@ -447,7 +447,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 21, guards = {"!isSubset", "noPosition"})
+    @Specialization(guards = {"!isSubset", "noPosition"})
     Object accessNoPos(VirtualFrame frame, RList vector, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
     }
@@ -478,14 +478,14 @@ public abstract class AccessArrayNode extends RNode {
         return position;
     }
 
-    @Specialization(order = 22, guards = {"!isSubset", "onePosition", "inRecursion"})
+    @Specialization(guards = {"!isSubset", "onePosition", "inRecursion"})
     Object accessSubscript(VirtualFrame frame, RList vector, int recLevel, RIntVector p, @SuppressWarnings("unused") RAbstractLogicalVector dropDim) {
         int position = p.getDataAt(0);
         position = getPositionInRecursion(frame, vector, position, recLevel);
         return vector.getDataAt(position - 1);
     }
 
-    @Specialization(order = 23, guards = {"!isSubset", "twoPosition"})
+    @Specialization(guards = {"!isSubset", "twoPosition"})
     Object accessTwoPosRec(VirtualFrame frame, RList vector, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         int position = p.getDataAt(0);
         position = getPositionInRecursion(frame, vector, position, recLevel);
@@ -494,7 +494,7 @@ public abstract class AccessArrayNode extends RNode {
         return accessRecursive(frame, newVector, newPosition, recLevel + 1, dropDim);
     }
 
-    @Specialization(order = 24, guards = {"!isSubset", "multiPos"})
+    @Specialization(guards = {"!isSubset", "multiPos"})
     Object access(VirtualFrame frame, RList vector, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         int position = p.getDataAt(0);
         position = getPositionInRecursion(frame, vector, position, recLevel);
@@ -503,7 +503,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 25, guards = {"isPositionNA", "isSubset"})
+    @Specialization(guards = {"isPositionNA", "isSubset"})
     RList accessNA(RList vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (vector.getNames() == RNull.instance) {
             return RDataFactory.createList(new Object[]{RNull.instance});
@@ -514,56 +514,56 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 26, guards = {"!isPositionNA", "isPositionNegative", "!outOfBoundsNegative"})
+    @Specialization(guards = {"!isPositionNA", "isPositionNegative", "!outOfBoundsNegative"})
     RList accessNegativeInBounds(VirtualFrame frame, RAbstractContainer container, int recLevel, int position, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 27, guards = {"!isPositionNA", "isPositionNegative", "outOfBoundsNegative", "oneElemVector"})
+    @Specialization(guards = {"!isPositionNA", "isPositionNegative", "outOfBoundsNegative", "oneElemVector"})
     RList accessNegativeOutOfBoundsOneElemVector(VirtualFrame frame, RAbstractContainer container, int recLevel, int position, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 28, guards = {"!isPositionNA", "isPositionNegative", "outOfBoundsNegative", "!oneElemVector"})
+    @Specialization(guards = {"!isPositionNA", "isPositionNegative", "outOfBoundsNegative", "!oneElemVector"})
     RList accessNegativeOutOfBounds(VirtualFrame frame, RAbstractContainer container, int recLevel, int position, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 29, guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
     RList accessNamesSubset(RList vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         Object val = vector.getDataAt(position - 1);
         return RDataFactory.createList(new Object[]{val}, getName(vector, position));
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 30, guards = {"!isPositionZero", "hasNames", "!isSubset", "!isPositionNA", "!isPositionNegative", "!outOfBounds"})
+    @Specialization(guards = {"!isPositionZero", "hasNames", "!isSubset", "!isPositionNA", "!isPositionNegative", "!outOfBounds"})
     Object accessNames(RList vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         return vector.getDataAt(position - 1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 31, guards = {"!isPositionZero", "!hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "!hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
     RList accessSubset(RList vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         return RDataFactory.createList(new Object[]{vector.getDataAt(position - 1)});
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 32, guards = {"!isPositionZero", "!hasNames", "!isSubset", "!isPositionNA", "!isPositionNegative", "!outOfBounds"})
+    @Specialization(guards = {"!isPositionZero", "!hasNames", "!isSubset", "!isPositionNA", "!isPositionNegative", "!outOfBounds"})
     Object access(RList vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         return vector.getDataAt(position - 1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 33, guards = {"!isSubset", "outOfBounds"})
+    @Specialization(guards = {"!isSubset", "outOfBounds"})
     Object accessOutOfBounds(VirtualFrame frame, RList vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBSCRIPT_BOUNDS);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 34, guards = "isPositionZero")
+    @Specialization(guards = "isPositionZero")
     RList accessPosZero(VirtualFrame frame, RList vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -576,18 +576,18 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 35, guards = {"!isSubset", "inRecursion", "multiPos", "!isVectorList"})
+    @Specialization(guards = {"!isSubset", "inRecursion", "multiPos", "!isVectorList"})
     Object accessRecFailedRec(VirtualFrame frame, RAbstractContainer container, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.RECURSIVE_INDEXING_FAILED, recLevel + 1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 36, guards = {"!isSubset", "!inRecursion", "multiPos", "!isVectorList"})
+    @Specialization(guards = {"!isSubset", "!inRecursion", "multiPos", "!isVectorList"})
     Object accessRecFailed(VirtualFrame frame, RAbstractContainer container, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
 
-    @Specialization(order = 40)
+    @Specialization
     RIntVector access(VirtualFrame frame, RAbstractIntVector vector, @SuppressWarnings("unused") int recLevel, Object[] positions, RAbstractLogicalVector dropDim) {
         // compute length of dimensions array and of the resulting vector
         DimsAndResultLength res = getDimsAndResultLength(positions, dropDim.getLength() == 0 ? RRuntime.TRUE : dropDim.getDataAt(0));
@@ -635,7 +635,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 41)
+    @Specialization
     RIntVector access(RAbstractIntVector vector, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         int resLength = p.getLength();
         int[] data = new int[resLength];
@@ -654,7 +654,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 42, guards = {"isPositionNA", "isSubset"})
+    @Specialization(guards = {"isPositionNA", "isSubset"})
     RIntVector accessNA(RAbstractIntVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (vector.getNames() == RNull.instance) {
             return RDataFactory.createIntVector(new int[]{RRuntime.INT_NA}, RDataFactory.INCOMPLETE_VECTOR);
@@ -665,7 +665,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 43, guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
     RIntVector accessNames(RAbstractIntVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         int val = vector.getDataAt(position - 1);
         elementNACheck.check(val);
@@ -673,13 +673,13 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 44, guards = {"!isPositionZero", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "!isPositionNA", "!isPositionNegative"})
     int access(RAbstractIntVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         return vector.getDataAt(position - 1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 45, guards = "isPositionZero")
+    @Specialization(guards = "isPositionZero")
     RIntVector accessPosZero(VirtualFrame frame, RAbstractIntVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -691,7 +691,7 @@ public abstract class AccessArrayNode extends RNode {
         }
     }
 
-    @Specialization(order = 50)
+    @Specialization
     RDoubleVector access(VirtualFrame frame, RAbstractDoubleVector vector, @SuppressWarnings("unused") int recLevel, Object[] positions, RAbstractLogicalVector dropDim) {
         // compute length of dimensions array and of the resulting vector
         DimsAndResultLength res = getDimsAndResultLength(positions, dropDim.getLength() == 0 ? RRuntime.TRUE : dropDim.getDataAt(0));
@@ -739,7 +739,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 51)
+    @Specialization
     RDoubleVector access(RAbstractDoubleVector vector, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         int resLength = p.getLength();
         double[] data = new double[resLength];
@@ -758,7 +758,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 52, guards = {"isPositionNA", "isSubset"})
+    @Specialization(guards = {"isPositionNA", "isSubset"})
     RDoubleVector accessNA(RAbstractDoubleVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (vector.getNames() == RNull.instance) {
             return RDataFactory.createDoubleVector(new double[]{RRuntime.DOUBLE_NA}, RDataFactory.INCOMPLETE_VECTOR);
@@ -769,7 +769,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 53, guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
     RDoubleVector accessNames(RAbstractDoubleVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         double val = vector.getDataAt(position - 1);
         elementNACheck.check(val);
@@ -777,13 +777,13 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 54, guards = {"!isPositionZero", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "!isPositionNA", "!isPositionNegative"})
     double access(RAbstractDoubleVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         return vector.getDataAt(position - 1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 55, guards = "isPositionZero")
+    @Specialization(guards = "isPositionZero")
     RDoubleVector accessPosZero(VirtualFrame frame, RAbstractDoubleVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -795,7 +795,7 @@ public abstract class AccessArrayNode extends RNode {
         }
     }
 
-    @Specialization(order = 60)
+    @Specialization
     RLogicalVector access(VirtualFrame frame, RLogicalVector vector, @SuppressWarnings("unused") int recLevel, Object[] positions, RAbstractLogicalVector dropDim) {
         // compute length of dimensions array and of the resulting vector
         DimsAndResultLength res = getDimsAndResultLength(positions, dropDim.getLength() == 0 ? RRuntime.TRUE : dropDim.getDataAt(0));
@@ -843,7 +843,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 61)
+    @Specialization
     RLogicalVector access(RLogicalVector vector, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         int resLength = p.getLength();
         byte[] data = new byte[resLength];
@@ -862,7 +862,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 62, guards = {"isPositionNA", "isSubset"})
+    @Specialization(guards = {"isPositionNA", "isSubset"})
     RLogicalVector accessNA(RLogicalVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (vector.getNames() == RNull.instance) {
             return RDataFactory.createLogicalVector(new byte[]{RRuntime.LOGICAL_NA}, RDataFactory.INCOMPLETE_VECTOR);
@@ -873,7 +873,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 63, guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
     RLogicalVector accessNames(RAbstractLogicalVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         byte val = vector.getDataAt(position - 1);
         elementNACheck.check(val);
@@ -881,13 +881,13 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 64, guards = {"!isPositionZero", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "!isPositionNA", "!isPositionNegative"})
     byte access(RLogicalVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         return vector.getDataAt(position - 1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 65, guards = "isPositionZero")
+    @Specialization(guards = "isPositionZero")
     RLogicalVector accessPosZero(VirtualFrame frame, RLogicalVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -899,7 +899,7 @@ public abstract class AccessArrayNode extends RNode {
         }
     }
 
-    @Specialization(order = 70)
+    @Specialization
     RStringVector access(VirtualFrame frame, RStringVector vector, @SuppressWarnings("unused") int recLevel, Object[] positions, RAbstractLogicalVector dropDim) {
         // compute length of dimensions array and of the resulting vector
         DimsAndResultLength res = getDimsAndResultLength(positions, dropDim.getLength() == 0 ? RRuntime.TRUE : dropDim.getDataAt(0));
@@ -947,7 +947,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 71)
+    @Specialization
     RStringVector access(RStringVector vector, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         int resLength = p.getLength();
         String[] data = new String[resLength];
@@ -966,7 +966,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 72, guards = {"isPositionNA", "isSubset"})
+    @Specialization(guards = {"isPositionNA", "isSubset"})
     RStringVector accessNA(RStringVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (vector.getNames() == RNull.instance) {
             return RDataFactory.createStringVector(new String[]{RRuntime.STRING_NA}, RDataFactory.INCOMPLETE_VECTOR);
@@ -977,7 +977,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 73, guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
     RStringVector accessNames(RAbstractStringVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         String val = vector.getDataAt(position - 1);
         elementNACheck.check(val);
@@ -985,13 +985,13 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 74, guards = {"!isPositionZero", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "!isPositionNA", "!isPositionNegative"})
     String access(RStringVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         return vector.getDataAt(position - 1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 75, guards = "isPositionZero")
+    @Specialization(guards = "isPositionZero")
     RStringVector accessPosZero(VirtualFrame frame, RStringVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -1003,7 +1003,7 @@ public abstract class AccessArrayNode extends RNode {
         }
     }
 
-    @Specialization(order = 80)
+    @Specialization
     RComplexVector access(VirtualFrame frame, RComplexVector vector, @SuppressWarnings("unused") int recLevel, Object[] positions, RAbstractLogicalVector dropDim) {
         // compute length of dimensions array and of the resulting vector
         DimsAndResultLength res = getDimsAndResultLength(positions, dropDim.getLength() == 0 ? RRuntime.TRUE : dropDim.getDataAt(0));
@@ -1051,7 +1051,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 81)
+    @Specialization
     RComplexVector access(RComplexVector vector, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         int resLength = p.getLength();
         double[] data = new double[resLength << 1];
@@ -1074,7 +1074,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 82, guards = {"isPositionNA", "isSubset"})
+    @Specialization(guards = {"isPositionNA", "isSubset"})
     RComplexVector accessNA(RComplexVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (vector.getNames() == RNull.instance) {
             return RDataFactory.createComplexVector(new double[]{RRuntime.COMPLEX_NA_REAL_PART, RRuntime.COMPLEX_NA_IMAGINARY_PART}, RDataFactory.INCOMPLETE_VECTOR);
@@ -1085,7 +1085,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 83, guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
     RComplexVector accessNames(RAbstractComplexVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         RComplex val = vector.getDataAt(position - 1);
         elementNACheck.check(val);
@@ -1093,13 +1093,13 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 84, guards = {"!isPositionZero", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "!isPositionNA", "!isPositionNegative"})
     RComplex access(RComplexVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         return vector.getDataAt(position - 1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 85, guards = "isPositionZero")
+    @Specialization(guards = "isPositionZero")
     RComplexVector accessPosZero(VirtualFrame frame, RComplexVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -1111,7 +1111,7 @@ public abstract class AccessArrayNode extends RNode {
         }
     }
 
-    @Specialization(order = 90)
+    @Specialization
     RRawVector access(VirtualFrame frame, RRawVector vector, @SuppressWarnings("unused") int recLevel, Object[] positions, RAbstractLogicalVector dropDim) {
         // compute length of dimensions array and of the resulting vector
         DimsAndResultLength res = getDimsAndResultLength(positions, dropDim.getLength() == 0 ? RRuntime.TRUE : dropDim.getDataAt(0));
@@ -1159,7 +1159,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 91)
+    @Specialization
     RRawVector access(RRawVector vector, int recLevel, RIntVector p, RAbstractLogicalVector dropDim) {
         int resLength = p.getLength();
         byte[] data = new byte[resLength];
@@ -1178,7 +1178,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 92, guards = {"isPositionNA", "isSubset"})
+    @Specialization(guards = {"isPositionNA", "isSubset"})
     RRawVector accessNA(RRawVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (vector.getNames() == RNull.instance) {
             return RDataFactory.createRawVector(new byte[]{0});
@@ -1189,20 +1189,20 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 93, guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "hasNames", "isSubset", "!isPositionNA", "!isPositionNegative"})
     RRawVector accessNames(RAbstractRawVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         RRaw val = vector.getDataAt(position - 1);
         return RDataFactory.createRawVector(new byte[]{val.getValue()}, getName(vector, position));
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 94, guards = {"!isPositionZero", "!isPositionNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPositionZero", "!isPositionNA", "!isPositionNegative"})
     RRaw access(RRawVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         return vector.getDataAt(position - 1);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 95, guards = "isPositionZero")
+    @Specialization(guards = "isPositionZero")
     RRawVector accessPosZero(VirtualFrame frame, RRawVector vector, int recLevel, int position, RAbstractLogicalVector dropDim) {
         if (!isSubset) {
             RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -1215,7 +1215,7 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 200, guards = "noPosition")
+    @Specialization(guards = "noPosition")
     Object accessListEmptyPos(VirtualFrame frame, RAbstractContainer container, int recLevel, RList positions, RAbstractLogicalVector dropDim) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -1225,19 +1225,19 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 201, guards = "onePosition")
+    @Specialization(guards = "onePosition")
     Object accessListOnePos(VirtualFrame frame, RAbstractContainer container, int recLevel, RList positions, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 202, guards = "multiPos")
+    @Specialization(guards = "multiPos")
     Object accessListMultiPosList(VirtualFrame frame, RList vector, int recLevel, RList positions, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 203, guards = {"multiPos", "!isVectorList"})
+    @Specialization(guards = {"multiPos", "!isVectorList"})
     Object accessListMultiPos(VirtualFrame frame, RAbstractContainer container, int recLevel, RList positions, RAbstractLogicalVector dropDim) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
@@ -1247,36 +1247,36 @@ public abstract class AccessArrayNode extends RNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 210)
+    @Specialization
     Object accessListMultiPos(VirtualFrame frame, RAbstractContainer container, int recLevel, RComplex positions, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "complex");
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 220)
+    @Specialization
     Object accessListMultiPos(VirtualFrame frame, RAbstractContainer container, int recLevel, RRaw positions, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "raw");
     }
 
     // this should really be implemented in R
-    @Specialization(order = 1000, guards = "!isSubset")
+    @Specialization(guards = "!isSubset")
     Object access(VirtualFrame frame, RDataFrame dataFrame, int recLevel, int position, RAbstractLogicalVector dropDim) {
         return accessRecursive(frame, dataFrame.getVector(), position, recLevel, dropDim);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1001, guards = "isSubset")
+    @Specialization(guards = "isSubset")
     Object accessSubset(VirtualFrame frame, RDataFrame dataFrame, int recLevel, int position, RAbstractLogicalVector dropDim) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.DATA_FRAMES_SUBSET_ACCESS);
     }
 
-    @Specialization(order = 1010)
+    @Specialization
     Object access(VirtualFrame frame, RExpression expression, int recLevel, int position, RAbstractLogicalVector dropDim) {
         return accessRecursive(frame, expression.getList(), position, recLevel, dropDim);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1100)
+    @Specialization
     Object access(RPairList pairlist, int recLevel, int position, RAbstractLogicalVector dropDim) {
         return pairlist.getDataAtAsObject(position - 1);
     }
@@ -1566,7 +1566,7 @@ public abstract class AccessArrayNode extends RNode {
             this.elementNACheck = other.elementNACheck;
         }
 
-        @Specialization(order = 1)
+        @Specialization
         RList getData(VirtualFrame frame, Object d, RList vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions, int accDstDimensions) {
             Object[] data = (Object[]) d;
             int[] srcDimensions = vector.getDimensions();
@@ -1595,7 +1595,7 @@ public abstract class AccessArrayNode extends RNode {
             return vector;
         }
 
-        @Specialization(order = 2)
+        @Specialization
         RAbstractIntVector getData(VirtualFrame frame, Object d, RAbstractIntVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions,
                         int accDstDimensions) {
             int[] data = (int[]) d;
@@ -1626,7 +1626,7 @@ public abstract class AccessArrayNode extends RNode {
             return vector;
         }
 
-        @Specialization(order = 3)
+        @Specialization
         RAbstractDoubleVector getData(VirtualFrame frame, Object d, RAbstractDoubleVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions,
                         int accDstDimensions) {
             double[] data = (double[]) d;
@@ -1657,7 +1657,7 @@ public abstract class AccessArrayNode extends RNode {
             return vector;
         }
 
-        @Specialization(order = 4)
+        @Specialization
         RAbstractLogicalVector getData(VirtualFrame frame, Object d, RAbstractLogicalVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions,
                         int accDstDimensions) {
             byte[] data = (byte[]) d;
@@ -1688,7 +1688,7 @@ public abstract class AccessArrayNode extends RNode {
             return vector;
         }
 
-        @Specialization(order = 5)
+        @Specialization
         RAbstractStringVector getData(VirtualFrame frame, Object d, RAbstractStringVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions,
                         int accDstDimensions) {
             String[] data = (String[]) d;
@@ -1719,7 +1719,7 @@ public abstract class AccessArrayNode extends RNode {
             return vector;
         }
 
-        @Specialization(order = 6)
+        @Specialization
         RAbstractComplexVector getData(VirtualFrame frame, Object d, RAbstractComplexVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions,
                         int accDstDimensions) {
             double[] data = (double[]) d;
@@ -1752,7 +1752,7 @@ public abstract class AccessArrayNode extends RNode {
             return vector;
         }
 
-        @Specialization(order = 7)
+        @Specialization
         RAbstractRawVector getData(VirtualFrame frame, Object d, RAbstractRawVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions,
                         int accDstDimensions) {
             byte[] data = (byte[]) d;
@@ -1827,12 +1827,12 @@ public abstract class AccessArrayNode extends RNode {
             this.isSubset = other.isSubset;
         }
 
-        @Specialization(order = 1, guards = {"!singleOpNegative", "!multiPos"})
+        @Specialization(guards = {"!singleOpNegative", "!multiPos"})
         public RAbstractIntVector doIntVector(@SuppressWarnings("unused") Object vector, RAbstractIntVector positions) {
             return positions;
         }
 
-        @Specialization(order = 2, guards = {"!singleOpNegative", "multiPos"})
+        @Specialization(guards = {"!singleOpNegative", "multiPos"})
         public RAbstractIntVector doIntVectorMultiPos(VirtualFrame frame, @SuppressWarnings("unused") Object vector, RAbstractIntVector positions) {
             if (isSubset) {
                 return positions;
@@ -1842,7 +1842,7 @@ public abstract class AccessArrayNode extends RNode {
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 3, guards = {"singleOpNA"})
+        @Specialization(guards = {"singleOpNA"})
         public RAbstractIntVector doIntVectorNA(VirtualFrame frame, Object vector, RAbstractIntVector positions) {
             if (isSubset) {
                 return positions;
@@ -1852,13 +1852,13 @@ public abstract class AccessArrayNode extends RNode {
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 4, guards = {"singleOpNegative", "!singleOpNA"})
+        @Specialization(guards = {"singleOpNegative", "!singleOpNA"})
         public RAbstractIntVector doIntVectorNegative(VirtualFrame frame, Object vector, RAbstractIntVector positions) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 10, guards = "noPosition")
+        @Specialization(guards = "noPosition")
         Object accessListEmptyPos(VirtualFrame frame, RAbstractVector vector, RList positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -1868,13 +1868,13 @@ public abstract class AccessArrayNode extends RNode {
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 11, guards = "onePosition")
+        @Specialization(guards = "onePosition")
         Object accessListOnePos(VirtualFrame frame, RAbstractVector vector, RList positions) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 12, guards = "multiPos")
+        @Specialization(guards = "multiPos")
         Object accessListMultiPos(VirtualFrame frame, RAbstractVector vector, RList positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
@@ -1884,13 +1884,13 @@ public abstract class AccessArrayNode extends RNode {
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 20)
+        @Specialization
         Object accessListOnePos(VirtualFrame frame, RAbstractVector vector, RComplex positions) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "complex");
         }
 
         @SuppressWarnings("unused")
-        @Specialization(order = 30)
+        @Specialization
         Object accessListOnePos(VirtualFrame frame, RAbstractVector vector, RRaw positions) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "raw");
         }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessFieldNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessFieldNode.java
index 0fd3966ea3..bab75c3a6b 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessFieldNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessFieldNode.java
@@ -41,7 +41,7 @@ public abstract class AccessFieldNode extends RNode {
 
     private final BranchProfile inexactMatch = new BranchProfile();
 
-    @Specialization(order = 1, guards = "hasNames")
+    @Specialization(guards = "hasNames")
     public Object accessField(RList object) {
         int index = object.getElementIndexByName(getField());
         if (index == -1) {
@@ -51,18 +51,18 @@ public abstract class AccessFieldNode extends RNode {
         return index == -1 ? RNull.instance : object.getDataAt(index);
     }
 
-    @Specialization(order = 2, guards = "!hasNames")
+    @Specialization(guards = "!hasNames")
     public Object accessFieldNoNames(@SuppressWarnings("unused") RList object) {
         return RNull.instance;
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public Object accessField(REnvironment env) {
         Object obj = env.get(getField());
         return obj == null ? RNull.instance : obj;
     }
 
-    @Specialization(order = 1000)
+    @Specialization
     public Object accessField(VirtualFrame frame, @SuppressWarnings("unused") RAbstractVector object) {
         throw RError.error(frame, RError.Message.DOLLAR_ATOMIC_VECTORS);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ArrayPositionCast.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ArrayPositionCast.java
index 258240d954..14dff6f49c 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ArrayPositionCast.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/ArrayPositionCast.java
@@ -88,17 +88,17 @@ public abstract class ArrayPositionCast extends RNode {
         }
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public RIntVector doMissingVector(Object op, RNull vector, RAbstractIntVector operand) {
         return operand.materialize();
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public Object doFuncOp(Object op, RFunction vector, Object operand) {
         return operand;
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public RIntVector doMissingVector(VirtualFrame frame, Object op, RAbstractContainer container, RMissing operand) {
         verifyDimensions(frame, container, dimension, numDimensions, assignment, isSubset, getEncapsulatingSourceSection());
         int[] data = new int[numDimensions == 1 ? container.getLength() : container.getDimensions()[dimension]];
@@ -109,62 +109,62 @@ public abstract class ArrayPositionCast extends RNode {
         return RDataFactory.createIntVector(data, RDataFactory.COMPLETE_VECTOR);
     }
 
-    @Specialization(order = 4)
+    @Specialization
     public RNull doNullSubset(Object op, RAbstractContainer container, RNull operand) {
         // this is a special case - RNull can only appear to represent the x[[NA]] case which has to
         // return null and not a null vector
         return operand;
     }
 
-    @Specialization(order = 5)
+    @Specialization
     public RStringVector doStringVector(Object op, RList vector, RStringVector operand) {
         // recursive access to the list
         return operand;
     }
 
-    @Specialization(order = 6)
+    @Specialization
     public RList doList(Object op, RAbstractContainer container, RList operand) {
         return operand;
     }
 
-    @Specialization(order = 7)
+    @Specialization
     public RComplex doList(Object op, RAbstractContainer container, RComplex operand) {
         return operand;
     }
 
-    @Specialization(order = 8)
+    @Specialization
     public RRaw doList(Object op, RAbstractContainer container, RRaw operand) {
         return operand;
     }
 
-    @Specialization(order = 16, guards = {"sizeOneOp", "numDimensionsOne", "!operandHasNames"})
+    @Specialization(guards = {"sizeOneOp", "numDimensionsOne", "!operandHasNames"})
     public int doIntVectorSizeOne(Object op, RAbstractContainer container, RAbstractIntVector operand) {
         int val = operand.getDataAt(0);
         return val;
     }
 
-    @Specialization(order = 17, guards = {"sizeOneOp", "numDimensionsOne", "operandHasNames"})
+    @Specialization(guards = {"sizeOneOp", "numDimensionsOne", "operandHasNames"})
     public RIntVector doIntVectorSizeOneNames(Object op, RAbstractContainer container, RAbstractIntVector operand) {
         assert operand.getDataAt(0) != 0;
         return operand.materialize();
     }
 
-    @Specialization(order = 21, guards = {"sizeOneOp", "!numDimensionsOne"})
+    @Specialization(guards = {"sizeOneOp", "!numDimensionsOne"})
     public RIntVector doIntVectorSizeOneMultiDim(Object op, RAbstractContainer container, RAbstractIntVector operand) {
         return operand.materialize();
     }
 
-    @Specialization(order = 22, guards = {"!emptyOperand", "!sizeOneOp", "!numDimensionsOne"})
+    @Specialization(guards = {"!emptyOperand", "!sizeOneOp", "!numDimensionsOne"})
     public RIntVector doIntVectorMultiDim(Object op, RAbstractContainer container, RAbstractIntVector operand) {
         return operand.materialize();
     }
 
-    @Specialization(order = 23, guards = {"!emptyOperand", "!sizeOneOp", "numDimensionsOne"})
+    @Specialization(guards = {"!emptyOperand", "!sizeOneOp", "numDimensionsOne"})
     public RIntVector doIntVectorOneDim(Object op, RAbstractContainer container, RAbstractIntVector operand) {
         return operand.materialize();
     }
 
-    @Specialization(order = 24, guards = "emptyOperand")
+    @Specialization(guards = "emptyOperand")
     public int doIntVectorZero(Object op, RAbstractContainer container, RAbstractIntVector operand) {
         return 0;
     }
@@ -266,17 +266,17 @@ public abstract class ArrayPositionCast extends RNode {
             return castInteger.executeCast(frame, operand);
         }
 
-        @Specialization(order = 0)
+        @Specialization
         public RList doList(RAbstractContainer container, RList operand) {
             return operand;
         }
 
-        @Specialization(order = 1)
+        @Specialization
         public RMissing doFuncOp(VirtualFrame frame, RAbstractContainer container, RFunction operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "closure");
         }
 
-        @Specialization(order = 6, guards = "dimLengthOne")
+        @Specialization(guards = "dimLengthOne")
         public int doMissingDimLengthOne(VirtualFrame frame, RAbstractContainer container, RMissing operand) {
             if (!isSubset) {
                 if (assignment) {
@@ -288,7 +288,7 @@ public abstract class ArrayPositionCast extends RNode {
             return 1;
         }
 
-        @Specialization(order = 7, guards = "!dimLengthOne")
+        @Specialization(guards = "!dimLengthOne")
         public RMissing doMissing(VirtualFrame frame, RAbstractContainer container, RMissing operand) {
             if (!isSubset) {
                 if (assignment) {
@@ -300,7 +300,7 @@ public abstract class ArrayPositionCast extends RNode {
             return operand;
         }
 
-        @Specialization(order = 8)
+        @Specialization
         public int doNull(VirtualFrame frame, RAbstractContainer container, RNull operand) {
             if (isSubset) {
                 return 0;
@@ -309,27 +309,27 @@ public abstract class ArrayPositionCast extends RNode {
             }
         }
 
-        @Specialization(order = 9, guards = {"indNA", "isSubset", "numDimensionsOne"})
+        @Specialization(guards = {"indNA", "isSubset", "numDimensionsOne"})
         public int doIntNASubset(RList vector, int operand) {
             return operand;
         }
 
-        @Specialization(order = 10, guards = {"indNA", "!isSubset", "numDimensionsOne"})
+        @Specialization(guards = {"indNA", "!isSubset", "numDimensionsOne"})
         public RNull doIntNA(RList vector, int operand) {
             return RNull.instance;
         }
 
-        @Specialization(order = 11, guards = {"indNA", "!numDimensionsOne"})
+        @Specialization(guards = {"indNA", "!numDimensionsOne"})
         public int doIntNAMultiDim(RList vector, int operand) {
             return operand;
         }
 
-        @Specialization(order = 12, guards = {"indNA", "isSubset", "!isVectorList"})
+        @Specialization(guards = {"indNA", "isSubset", "!isVectorList"})
         public int doIntNASubset(RAbstractContainer container, int operand) {
             return operand;
         }
 
-        @Specialization(order = 13, guards = {"indNA", "!isSubset", "!isVectorList"})
+        @Specialization(guards = {"indNA", "!isSubset", "!isVectorList"})
         public int doIntNA(VirtualFrame frame, RAbstractContainer container, int operand) {
             if (!assignment) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBSCRIPT_BOUNDS);
@@ -339,17 +339,17 @@ public abstract class ArrayPositionCast extends RNode {
             }
         }
 
-        @Specialization(order = 14, guards = {"!indNA", "!isSubset", "!isNegative"})
+        @Specialization(guards = {"!indNA", "!isSubset", "!isNegative"})
         public int doIntNegative(RList vector, int operand) {
             return operand;
         }
 
-        @Specialization(order = 15, guards = {"!indNA", "!isSubset", "outOfBoundsNegative"})
+        @Specialization(guards = {"!indNA", "!isSubset", "outOfBoundsNegative"})
         public int doIntOutOfBoundsNegative(RList vector, int operand) {
             return operand;
         }
 
-        @Specialization(order = 16, guards = {"!indNA", "outOfBounds", "numDimensionsOne"})
+        @Specialization(guards = {"!indNA", "outOfBounds", "numDimensionsOne"})
         public int doIntOutOfBoundsOneDim(VirtualFrame frame, RAbstractContainer container, int operand) {
             if (assignment) {
                 return operand;
@@ -362,46 +362,46 @@ public abstract class ArrayPositionCast extends RNode {
             }
         }
 
-        @Specialization(order = 17, guards = {"!indNA", "outOfBounds", "!numDimensionsOne"})
+        @Specialization(guards = {"!indNA", "outOfBounds", "!numDimensionsOne"})
         public int doIntOutOfBounds(VirtualFrame frame, RAbstractContainer container, int operand) {
             throw RError.error(frame, assignment ? getEncapsulatingSourceSection() : null, RError.Message.SUBSCRIPT_BOUNDS);
         }
 
-        @Specialization(order = 18, guards = {"!indNA", "outOfBoundsNegative", "dimLengthOne", "isSubset"})
+        @Specialization(guards = {"!indNA", "outOfBoundsNegative", "dimLengthOne", "isSubset"})
         public int doIntOutOfBoundsNegativeOneElementSubset(RAbstractContainer container, int operand) {
             // there is only one element to be picked
             return 1;
         }
 
-        @Specialization(order = 19, guards = {"!indNA", "outOfBoundsNegative", "dimLengthOne", "!isSubset"})
+        @Specialization(guards = {"!indNA", "outOfBoundsNegative", "dimLengthOne", "!isSubset"})
         public int doIntOutOfBoundsNegativeOneElementAccess(RAbstractContainer container, int operand) {
             return operand;
         }
 
-        @Specialization(order = 20, guards = {"!indNA", "outOfBoundsNegative", "!dimLengthOne", "isSubset"})
+        @Specialization(guards = {"!indNA", "outOfBoundsNegative", "!dimLengthOne", "isSubset"})
         public RMissing doIntOutOfBoundsNegativeSubset(RAbstractContainer container, int operand) {
             // all indexes - result is the same as with missing index
             return RMissing.instance;
         }
 
-        @Specialization(order = 22, guards = {"!indNA", "outOfBoundsNegative", "!dimLengthOne", "!isSubset"})
+        @Specialization(guards = {"!indNA", "outOfBoundsNegative", "!dimLengthOne", "!isSubset"})
         public int doIntOutOfBoundsNegativeAccess(RAbstractContainer container, int operand) {
             return operand;
         }
 
-        @Specialization(order = 23, guards = {"!indNA", "!outOfBounds", "!isNegative"})
+        @Specialization(guards = {"!indNA", "!outOfBounds", "!isNegative"})
         public int doInt(RAbstractContainer container, int operand) {
             return operand;
         }
 
-        @Specialization(order = 24, guards = {"!indNA", "isNegative", "!outOfBoundsNegative", "dimLengthOne"})
+        @Specialization(guards = {"!indNA", "isNegative", "!outOfBoundsNegative", "dimLengthOne"})
         public int doIntNegativeNoDimLeft(RAbstractContainer container, int operand) {
             // it's negative, but not out of bounds and dimension has length one - result is no
             // dimensions left
             return 0;
         }
 
-        @Specialization(order = 25, guards = {"isSubset", "!indNA", "isNegative", "!outOfBoundsNegative", "!dimLengthOne", "!vecLengthTwo"})
+        @Specialization(guards = {"isSubset", "!indNA", "isNegative", "!outOfBoundsNegative", "!dimLengthOne", "!vecLengthTwo"})
         public RIntVector doIntNegativeSubset(RAbstractContainer container, int operand) {
             // it's negative, but not out of bounds - pick all indexes apart from the negative one
             int dimLength = numDimensions == 1 ? container.getLength() : container.getDimensions()[dimension];
@@ -415,48 +415,48 @@ public abstract class ArrayPositionCast extends RNode {
             return RDataFactory.createIntVector(positions, RDataFactory.COMPLETE_VECTOR);
         }
 
-        @Specialization(order = 26, guards = {"!isSubset", "!indNA", "isNegative", "!outOfBoundsNegative", "!dimLengthOne", "!vecLengthTwo"})
+        @Specialization(guards = {"!isSubset", "!indNA", "isNegative", "!outOfBoundsNegative", "!dimLengthOne", "!vecLengthTwo"})
         public int doIntNegative(RAbstractContainer container, int operand) {
             return operand;
         }
 
-        @Specialization(order = 27, guards = {"opNegOne", "vecLengthTwo"})
+        @Specialization(guards = {"opNegOne", "vecLengthTwo"})
         public int doIntNegOne(RAbstractContainer container, int operand) {
             return 2;
         }
 
-        @Specialization(order = 28, guards = {"opNegTwo", "vecLengthTwo"})
+        @Specialization(guards = {"opNegTwo", "vecLengthTwo"})
         public int doIntNegTow(RAbstractContainer container, int operand) {
             return 1;
         }
 
-        @Specialization(order = 30, guards = "!isNegative")
+        @Specialization(guards = "!isNegative")
         public Object doDouble(VirtualFrame frame, RAbstractContainer container, double operand) {
             return convertOperatorRecursive(frame, container, castInteger(frame, operand));
         }
 
-        @Specialization(order = 31, guards = "isNegative")
+        @Specialization(guards = "isNegative")
         public Object doDoubleNegative(VirtualFrame frame, RAbstractContainer container, double operand) {
             // returns object as it may return either int or RIntVector due to conversion
             return convertOperatorRecursive(frame, container, castInteger(frame, operand));
         }
 
-        @Specialization(order = 32, guards = {"indNA", "numDimensionsOne", "!isSubset"})
+        @Specialization(guards = {"indNA", "numDimensionsOne", "!isSubset"})
         public RNull doLogicalDimLengthOne(RList vector, byte operand) {
             return RNull.instance;
         }
 
-        @Specialization(order = 33, guards = {"indNA", "numDimensionsOne", "!isSubset", "!isVectorList"})
+        @Specialization(guards = {"indNA", "numDimensionsOne", "!isSubset", "!isVectorList"})
         public int doLogicalDimLengthOne(RAbstractContainer container, byte operand) {
             return RRuntime.INT_NA;
         }
 
-        @Specialization(order = 34, guards = {"indNA", "numDimensionsOne", "isSubset", "isAssignment"})
+        @Specialization(guards = {"indNA", "numDimensionsOne", "isSubset", "isAssignment"})
         public int doLogicalNASubsetDimOneAssignment(RAbstractContainer container, byte operand) {
             return RRuntime.INT_NA;
         }
 
-        @Specialization(order = 35, guards = {"indNA", "numDimensionsOne", "isSubset", "!isAssignment"})
+        @Specialization(guards = {"indNA", "numDimensionsOne", "isSubset", "!isAssignment"})
         public RIntVector doLogicalNASubsetDimOne(RAbstractContainer container, byte operand) {
             int dimLength = numDimensions == 1 ? (container.getLength() == 0 ? 1 : container.getLength()) : container.getDimensions()[dimension];
             int[] data = new int[dimLength];
@@ -464,17 +464,17 @@ public abstract class ArrayPositionCast extends RNode {
             return RDataFactory.createIntVector(data, RDataFactory.INCOMPLETE_VECTOR);
         }
 
-        @Specialization(order = 36, guards = {"indNA", "!numDimensionsOne", "isSubset", "dimLengthOne"})
+        @Specialization(guards = {"indNA", "!numDimensionsOne", "isSubset", "dimLengthOne"})
         public int doLogicalDimLengthOneSubset(VirtualFrame frame, RAbstractContainer container, byte operand) {
             return (int) castInteger(frame, operand);
         }
 
-        @Specialization(order = 37, guards = {"indNA", "!numDimensionsOne", "isSubset", "!dimLengthOne", "isAssignment"})
+        @Specialization(guards = {"indNA", "!numDimensionsOne", "isSubset", "!dimLengthOne", "isAssignment"})
         public int doLogicalNASubsetAssignment(RAbstractContainer container, byte operand) {
             return RRuntime.INT_NA;
         }
 
-        @Specialization(order = 38, guards = {"indNA", "!numDimensionsOne", "isSubset", "!dimLengthOne", "!isAssignment"})
+        @Specialization(guards = {"indNA", "!numDimensionsOne", "isSubset", "!dimLengthOne", "!isAssignment"})
         public RIntVector doLogicalNASubset(RAbstractContainer container, byte operand) {
             int dimLength = numDimensions == 1 ? (container.getLength() == 0 ? 1 : container.getLength()) : container.getDimensions()[dimension];
             int[] data = new int[dimLength];
@@ -482,12 +482,12 @@ public abstract class ArrayPositionCast extends RNode {
             return RDataFactory.createIntVector(data, RDataFactory.INCOMPLETE_VECTOR);
         }
 
-        @Specialization(order = 39, guards = {"indNA", "!numDimensionsOne", "!isSubset"})
+        @Specialization(guards = {"indNA", "!numDimensionsOne", "!isSubset"})
         public int doLogicalNA(RAbstractContainer container, byte operand) {
             return RRuntime.INT_NA;
         }
 
-        @Specialization(order = 40, guards = {"indTrue", "isSubset"})
+        @Specialization(guards = {"indTrue", "isSubset"})
         public RIntVector doLogicalIndTrue(RAbstractContainer container, byte operand) {
             int dimLength = numDimensions == 1 ? container.getLength() : container.getDimensions()[dimension];
             int[] data = new int[dimLength];
@@ -497,22 +497,22 @@ public abstract class ArrayPositionCast extends RNode {
             return RDataFactory.createIntVector(data, RDataFactory.COMPLETE_VECTOR);
         }
 
-        @Specialization(order = 41, guards = {"!indTrue", "!indNA", "isSubset"})
+        @Specialization(guards = {"!indTrue", "!indNA", "isSubset"})
         public int doLogicalIndFalse(VirtualFrame frame, RAbstractContainer container, byte operand) {
             return 0;
         }
 
-        @Specialization(order = 42, guards = {"!indNA", "!isSubset"})
+        @Specialization(guards = {"!indNA", "!isSubset"})
         public int doLogical(VirtualFrame frame, RAbstractContainer container, byte operand) {
             return (int) castInteger(frame, operand);
         }
 
-        @Specialization(order = 44)
+        @Specialization
         public RComplex doComplexValLengthZero(RAbstractContainer container, RComplex operand) {
             return operand;
         }
 
-        @Specialization(order = 45)
+        @Specialization
         public RRaw doRaw(RAbstractContainer container, RRaw operand) {
             return operand;
         }
@@ -552,35 +552,35 @@ public abstract class ArrayPositionCast extends RNode {
             return RDataFactory.createIntVector(new int[]{position}, RDataFactory.COMPLETE_VECTOR, resNames);
         }
 
-        @Specialization(order = 48, guards = {"indNA", "!numDimensionsOne"})
+        @Specialization(guards = {"indNA", "!numDimensionsOne"})
         public Object doStringNA(VirtualFrame frame, RAbstractContainer container, String operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBSCRIPT_BOUNDS);
         }
 
-        @Specialization(order = 49, guards = {"indNA", "isAssignment", "numDimensionsOne"})
+        @Specialization(guards = {"indNA", "isAssignment", "numDimensionsOne"})
         public RIntVector doStringNANumDimsOneAssignment(VirtualFrame frame, RAbstractContainer container, String operand) {
             RStringVector resNames = RDataFactory.createStringVector(new String[]{operand}, RDataFactory.INCOMPLETE_VECTOR);
             return RDataFactory.createIntVector(new int[]{container.getLength() + 1}, RDataFactory.COMPLETE_VECTOR, resNames);
         }
 
-        @Specialization(order = 50, guards = {"indNA", "!isAssignment", "numDimensionsOne"})
+        @Specialization(guards = {"indNA", "!isAssignment", "numDimensionsOne"})
         public Object doStringNANumDimsOne(VirtualFrame frame, RAbstractContainer container, String operand) {
             return convertOperatorRecursive(frame, container, RRuntime.INT_NA);
         }
 
-        @Specialization(order = 51, guards = {"hasNames", "isAssignment", "numDimensionsOne"})
+        @Specialization(guards = {"hasNames", "isAssignment", "numDimensionsOne"})
         public RIntVector doStringOneDimNamesAssignment(RAbstractContainer container, String operand) {
             RStringVector names = (RStringVector) container.getNames();
             return findPositionWithNames(container, names, operand);
         }
 
-        @Specialization(order = 52, guards = {"isSubset", "hasNames", "!isAssignment", "numDimensionsOne"})
+        @Specialization(guards = {"isSubset", "hasNames", "!isAssignment", "numDimensionsOne"})
         public Object doStringOneDimNamesSubset(VirtualFrame frame, RList vector, String operand) {
             RStringVector names = (RStringVector) vector.getNames();
             return findPosition(frame, vector, names, operand);
         }
 
-        @Specialization(order = 53, guards = {"!isSubset", "hasNames", "!isAssignment", "numDimensionsOne"})
+        @Specialization(guards = {"!isSubset", "hasNames", "!isAssignment", "numDimensionsOne"})
         public Object doStringOneDimNames(VirtualFrame frame, RList vector, String operand) {
             // we need to return either an int or null - is there a prettier way to handle this?
             RStringVector names = (RStringVector) vector.getNames();
@@ -592,31 +592,31 @@ public abstract class ArrayPositionCast extends RNode {
             }
         }
 
-        @Specialization(order = 54, guards = {"hasNames", "!isAssignment", "numDimensionsOne"})
+        @Specialization(guards = {"hasNames", "!isAssignment", "numDimensionsOne"})
         public int doStringOneDimNames(VirtualFrame frame, RAbstractContainer container, String operand) {
             RStringVector names = (RStringVector) container.getNames();
             return findPosition(frame, container, names, operand);
         }
 
-        @Specialization(order = 55, guards = {"!hasNames", "isAssignment", "numDimensionsOne"})
+        @Specialization(guards = {"!hasNames", "isAssignment", "numDimensionsOne"})
         public RIntVector doStringOneDimAssignment(RAbstractContainer container, String operand) {
             return findPositionWithNames(container, null, operand);
         }
 
-        @Specialization(order = 56, guards = {"isAssignment", "numDimensionsOne"})
+        @Specialization(guards = {"isAssignment", "numDimensionsOne"})
         public RIntVector doStringOneDimAssignment(RNull vector, String operand) {
             RStringVector resNames = RDataFactory.createStringVector(new String[]{operand}, !RRuntime.isNA(operand));
             return RDataFactory.createIntVector(new int[]{1}, RDataFactory.COMPLETE_VECTOR, resNames);
         }
 
-        @Specialization(order = 57, guards = {"hasDimNames", "!numDimensionsOne"})
+        @Specialization(guards = {"hasDimNames", "!numDimensionsOne"})
         public int doString(VirtualFrame frame, RAbstractContainer container, String operand) {
             RList dimNames = container.getDimNames();
             Object names = dimNames.getDataAt(dimension);
             return findPosition(frame, container, names, operand);
         }
 
-        @Specialization(order = 58, guards = "isSubset")
+        @Specialization(guards = "isSubset")
         public int doStringNoNamesSubset(VirtualFrame frame, RList vector, String operand) {
             if (numDimensions == 1) {
                 return RRuntime.INT_NA;
@@ -625,7 +625,7 @@ public abstract class ArrayPositionCast extends RNode {
             }
         }
 
-        @Specialization(order = 59, guards = "!isSubset")
+        @Specialization(guards = "!isSubset")
         public RNull doStringNoNames(VirtualFrame frame, RList vector, String operand) {
             if (numDimensions == 1) {
                 return RNull.instance;
@@ -634,7 +634,7 @@ public abstract class ArrayPositionCast extends RNode {
             }
         }
 
-        @Specialization(order = 60)
+        @Specialization
         public int doStringNoNames(VirtualFrame frame, RAbstractContainer container, String operand) {
             if (isSubset) {
                 if (numDimensions == 1) {
@@ -647,69 +647,69 @@ public abstract class ArrayPositionCast extends RNode {
             }
         }
 
-        @Specialization(order = 65, guards = {"!isSubset", "!opLengthZero", "!opLengthOne"})
+        @Specialization(guards = {"!isSubset", "!opLengthZero", "!opLengthOne"})
         public RAbstractIntVector doIntVectorOp(RAbstractContainer container, RAbstractIntVector operand) {
             // no transformation - if it's a list, then it's handled during recursive access, if
             // it's not then it's an error dependent on the value
             return operand;
         }
 
-        @Specialization(order = 66, guards = {"!isSubset", "opLengthZero"})
+        @Specialization(guards = {"!isSubset", "opLengthZero"})
         public RAbstractIntVector doIntVectorOp(VirtualFrame frame, RList vector, RAbstractVector operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
         }
 
-        @Specialization(order = 67, guards = {"!isSubset", "!opLengthZero", "!opLengthOne"})
+        @Specialization(guards = {"!isSubset", "!opLengthZero", "!opLengthOne"})
         public RAbstractIntVector doIntVectorOp(VirtualFrame frame, RList vector, RAbstractDoubleVector operand) {
             return (RIntVector) castInteger(frame, operand);
         }
 
-        @Specialization(order = 68, guards = {"!isSubset", "!opLengthZero", "!opLengthOne"})
+        @Specialization(guards = {"!isSubset", "!opLengthZero", "!opLengthOne"})
         public RAbstractIntVector doIntVectorOp(VirtualFrame frame, RList vector, RAbstractLogicalVector operand) {
             return (RIntVector) castInteger(frame, operand);
         }
 
-        @Specialization(order = 70, guards = {"!isSubset", "opLengthZero"})
+        @Specialization(guards = {"!isSubset", "opLengthZero"})
         public int doIntEmptyOp(VirtualFrame frame, RAbstractContainer container, RAbstractVector operand) {
             return 0;
         }
 
-        @Specialization(order = 100, guards = "opLengthOne")
+        @Specialization(guards = "opLengthOne")
         public Object doIntVectorOpLengthOne(VirtualFrame frame, RAbstractContainer container, RAbstractIntVector operand) {
             return convertOperatorRecursive(frame, container, operand.getDataAt(0));
         }
 
-        @Specialization(order = 101, guards = {"isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"isSubset", "!opLengthOne", "!opLengthZero"})
         public RAbstractIntVector doIntVectorOpSubset(VirtualFrame frame, RAbstractContainer container, RAbstractIntVector operand) {
             return transformIntoPositive(frame, container, operand);
         }
 
-        @Specialization(order = 103, guards = {"isSubset", "opLengthZero"})
+        @Specialization(guards = {"isSubset", "opLengthZero"})
         public int doIntVectorFewManySelected(RAbstractContainer container, RAbstractIntVector operand) {
             return 0;
         }
 
-        @Specialization(order = 120, guards = "opLengthOne")
+        @Specialization(guards = "opLengthOne")
         public Object doDoubleVectorOpLengthOne(VirtualFrame frame, RAbstractContainer container, RAbstractDoubleVector operand) {
             return convertOperatorRecursive(frame, container, operand.getDataAt(0));
         }
 
-        @Specialization(order = 121, guards = "!opLengthOne")
+        @Specialization(guards = "!opLengthOne")
         public Object doDoubleVector(VirtualFrame frame, RAbstractContainer container, RAbstractDoubleVector operand) {
             return convertOperatorRecursive(frame, container, castInteger(frame, operand));
         }
 
-        @Specialization(order = 135, guards = "opLengthOne")
+        @Specialization(guards = "opLengthOne")
         public Object doLogicalVectorOpLengthOne(VirtualFrame frame, RAbstractContainer container, RAbstractLogicalVector operand) {
             return convertOperatorRecursive(frame, container, operand.getDataAt(0));
         }
 
-        @Specialization(order = 136, guards = {"outOfBounds", "isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"outOfBounds", "isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doLogicalVectorOutOfBounds(VirtualFrame frame, RAbstractContainer container, RAbstractLogicalVector operand) {
             throw RError.error(frame, isSubset ? null : getEncapsulatingSourceSection(), RError.Message.LOGICAL_SUBSCRIPT_LONG);
         }
 
-        @Specialization(order = 137, guards = {"outOfBounds", "!isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"outOfBounds", "!isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doLogicalVectorOutOfBoundsTooManySelected(VirtualFrame frame, RAbstractContainer container, RAbstractLogicalVector operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
         }
@@ -727,7 +727,7 @@ public abstract class ArrayPositionCast extends RNode {
             return data;
         }
 
-        @Specialization(order = 138, guards = {"!outOfBounds", "isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"!outOfBounds", "isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doLogicalVector(RAbstractContainer container, RAbstractLogicalVector operand) {
             int resultLength = numDimensions == 1 ? Math.max(operand.getLength(), container.getLength()) : container.getDimensions()[dimension];
             int logicalVectorLength = operand.getLength();
@@ -766,7 +766,7 @@ public abstract class ArrayPositionCast extends RNode {
             }
         }
 
-        @Specialization(order = 139, guards = {"!outOfBounds", "!isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"!outOfBounds", "!isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doLogicalVectorTooManySelected(VirtualFrame frame, RAbstractContainer container, RAbstractLogicalVector operand) {
             if (operand.getLength() == 2 && operand.getDataAt(0) == RRuntime.LOGICAL_FALSE) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -775,22 +775,22 @@ public abstract class ArrayPositionCast extends RNode {
             }
         }
 
-        @Specialization(order = 140, guards = {"isSubset", "opLengthZero"})
+        @Specialization(guards = {"isSubset", "opLengthZero"})
         public int doDoubleVectorTooFewSelected(RAbstractContainer container, RAbstractLogicalVector operand) {
             return 0;
         }
 
-        @Specialization(order = 150, guards = "opLengthOne")
+        @Specialization(guards = "opLengthOne")
         public Object doComplexVectorOpLengthOne(VirtualFrame frame, RAbstractContainer container, RAbstractComplexVector operand) {
             return convertOperatorRecursive(frame, container, operand.getDataAt(0));
         }
 
-        @Specialization(order = 151, guards = {"isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doComplexVectorSubset(VirtualFrame frame, RAbstractContainer container, RAbstractComplexVector operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "complex");
         }
 
-        @Specialization(order = 152, guards = {"!isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"!isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doComplexVector(VirtualFrame frame, RAbstractContainer container, RAbstractComplexVector operand) {
             if (operand.getLength() == 2) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "complex");
@@ -799,22 +799,22 @@ public abstract class ArrayPositionCast extends RNode {
             }
         }
 
-        @Specialization(order = 153, guards = {"isSubset", "opLengthZero"})
+        @Specialization(guards = {"isSubset", "opLengthZero"})
         public RIntVector doComplexVectoTooFewSelectedSubset(VirtualFrame frame, RAbstractContainer container, RAbstractComplexVector operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "complex");
         }
 
-        @Specialization(order = 160, guards = "opLengthOne")
+        @Specialization(guards = "opLengthOne")
         public Object doRawVectorOpLengthOne(VirtualFrame frame, RAbstractContainer container, RAbstractRawVector operand) {
             return convertOperatorRecursive(frame, container, operand.getDataAt(0));
         }
 
-        @Specialization(order = 161, guards = {"isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"isSubset", "!opLengthOne", "!opLengthZero"})
         public RAbstractIntVector doRawVectorSubset(VirtualFrame frame, RAbstractContainer container, RAbstractRawVector operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "raw");
         }
 
-        @Specialization(order = 162, guards = {"!isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"!isSubset", "!opLengthOne", "!opLengthZero"})
         public RAbstractIntVector doRawVector(VirtualFrame frame, RAbstractContainer container, RAbstractRawVector operand) {
             if (operand.getLength() == 2) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "raw");
@@ -823,7 +823,7 @@ public abstract class ArrayPositionCast extends RNode {
             }
         }
 
-        @Specialization(order = 163, guards = {"isSubset", "opLengthZero"})
+        @Specialization(guards = {"isSubset", "opLengthZero"})
         public RIntVector doRawVectorTooFewSelectedSubset(VirtualFrame frame, RAbstractContainer container, RAbstractRawVector operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "raw");
         }
@@ -901,29 +901,29 @@ public abstract class ArrayPositionCast extends RNode {
             return RDataFactory.createIntVector(data, RDataFactory.COMPLETE_VECTOR, resNames);
         }
 
-        @Specialization(order = 170, guards = "opLengthOne")
+        @Specialization(guards = "opLengthOne")
         public Object doStringlVectorOpLengthOne(VirtualFrame frame, RAbstractContainer container, RAbstractStringVector operand) {
             return convertOperatorRecursive(frame, container, operand.getDataAt(0));
         }
 
-        @Specialization(order = 171, guards = {"hasNames", "isAssignment", "numDimensionsOne", "isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"hasNames", "isAssignment", "numDimensionsOne", "isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doStringVectorOneDimNamesAssignment(RAbstractContainer container, RAbstractStringVector operand) {
             RStringVector names = (RStringVector) container.getNames();
             return findPositionsWithNames(container, names, operand, assignment);
         }
 
-        @Specialization(order = 172, guards = {"hasNames", "!isAssignment", "numDimensionsOne", "isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"hasNames", "!isAssignment", "numDimensionsOne", "isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doStringVectorOneDimNames(VirtualFrame frame, RAbstractContainer container, RAbstractStringVector operand) {
             RStringVector names = (RStringVector) container.getNames();
             return findPositions(frame, container, names, operand, assignment);
         }
 
-        @Specialization(order = 173, guards = {"!hasNames", "isAssignment", "numDimensionsOne", "isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"!hasNames", "isAssignment", "numDimensionsOne", "isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doStringVectorOneDimAssignment(RAbstractContainer container, RAbstractStringVector operand) {
             return findPositionsWithNames(container, null, operand, assignment);
         }
 
-        @Specialization(order = 174, guards = {"isAssignment", "numDimensionsOne", "isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"isAssignment", "numDimensionsOne", "isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doStringVectorOneDimAssignment(VirtualFrame frame, RNull vector, RAbstractStringVector operand) {
             // we need to get rid of duplicates but retain all NAs
             int[] data = new int[operand.getLength()];
@@ -935,25 +935,25 @@ public abstract class ArrayPositionCast extends RNode {
             return RDataFactory.createIntVector(data, RDataFactory.COMPLETE_VECTOR, operand.materialize());
         }
 
-        @Specialization(order = 175, guards = {"hasDimNames", "!numDimensionsOne", "isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"hasDimNames", "!numDimensionsOne", "isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doStringVector(VirtualFrame frame, RAbstractContainer container, RAbstractStringVector operand) {
             RList dimNames = container.getDimNames();
             RStringVector names = (RStringVector) dimNames.getDataAt(dimension);
             return findPositions(frame, container, names, operand, false);
         }
 
-        @Specialization(order = 176, guards = {"!isSubset", "!opLengthOne", "!opLengthZero", "numDimensionsOne"})
+        @Specialization(guards = {"!isSubset", "!opLengthOne", "!opLengthZero", "numDimensionsOne"})
         public RAbstractStringVector doStringVectorTooManySelected(RList vector, RAbstractStringVector operand) {
             // for recursive access
             return operand;
         }
 
-        @Specialization(order = 177, guards = {"!isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"!isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doStringVectorTooManySelected(VirtualFrame frame, RAbstractContainer container, RAbstractStringVector operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
         }
 
-        @Specialization(order = 178, guards = {"isSubset", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"isSubset", "!opLengthOne", "!opLengthZero"})
         public RIntVector doStringVectorNoDimNames(VirtualFrame frame, RAbstractContainer container, RAbstractStringVector operand) {
             if (numDimensions == 1) {
                 int[] data = new int[operand.getLength()];
@@ -964,59 +964,59 @@ public abstract class ArrayPositionCast extends RNode {
             }
         }
 
-        @Specialization(order = 179, guards = "opLengthZero")
+        @Specialization(guards = "opLengthZero")
         public int doStringVectorTooFewSelected(RAbstractContainer container, RAbstractStringVector operand) {
             return 0;
         }
 
-        @Specialization(order = 200, guards = {"numDimensionsOne", "operandHasNames", "!opLengthOne", "!opLengthZero"})
+        @Specialization(guards = {"numDimensionsOne", "operandHasNames", "!opLengthOne", "!opLengthZero"})
         public RAbstractIntVector doMissingVector(RNull vector, RAbstractIntVector operand) {
             RIntVector resPositions = (RIntVector) operand.copy();
             resPositions.setNames(null);
             return resPositions;
         }
 
-        @Specialization(order = 201, guards = {"numDimensionsOne", "operandHasNames", "opLengthZero"})
+        @Specialization(guards = {"numDimensionsOne", "operandHasNames", "opLengthZero"})
         public Object doMissingVectorOpLengthZero(VirtualFrame frame, RNull vector, RAbstractIntVector operand) {
             return castInteger(frame, operand);
         }
 
-        @Specialization(order = 202, guards = {"numDimensionsOne", "operandHasNames", "opLengthOne"})
+        @Specialization(guards = {"numDimensionsOne", "operandHasNames", "opLengthOne"})
         public Object doMissingVectorOpLengthOne(VirtualFrame frame, RNull vector, RAbstractIntVector operand) {
             return castInteger(frame, operand);
         }
 
-        @Specialization(order = 203, guards = {"numDimensionsOne", "!operandHasNames"})
+        @Specialization(guards = {"numDimensionsOne", "!operandHasNames"})
         public Object doMissingVectorNoNames(VirtualFrame frame, RNull vector, RAbstractIntVector operand) {
             return castInteger(frame, operand);
         }
 
-        @Specialization(order = 204, guards = "!numDimensionsOne")
+        @Specialization(guards = "!numDimensionsOne")
         public Object doMissingVectorDimGreaterThanOne(VirtualFrame frame, RNull vector, RAbstractIntVector operand) {
             return castInteger(frame, operand);
         }
 
-        @Specialization(order = 210)
+        @Specialization
         public Object doMissingVector(VirtualFrame frame, RNull vector, RAbstractDoubleVector operand) {
             return castInteger(frame, operand);
         }
 
-        @Specialization(order = 211)
+        @Specialization
         public Object doMissingVector(VirtualFrame frame, RNull vector, RAbstractLogicalVector operand) {
             return castInteger(frame, operand);
         }
 
-        @Specialization(order = 212)
+        @Specialization
         public Object doMissingVector(VirtualFrame frame, RNull vector, RAbstractComplexVector operand) {
             return castInteger(frame, operand);
         }
 
-        @Specialization(order = 213)
+        @Specialization
         public Object doMissingVector(VirtualFrame frame, RNull vector, RAbstractRawVector operand) {
             return castInteger(frame, operand);
         }
 
-        @Specialization(order = 300)
+        @Specialization
         public Object doFuncOp(RFunction vector, Object operand) {
             return operand;
         }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/CoerceBinaryNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/CoerceBinaryNode.java
index 6de5a9f14f..5a7cab5ea7 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/CoerceBinaryNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/CoerceBinaryNode.java
@@ -177,360 +177,360 @@ public abstract class CoerceBinaryNode extends RNode {
 
     // Left side is RNull
 
-    @Specialization(order = 0)
+    @Specialization
     public RNull access(VirtualFrame frame, RNull left, RNull right) {
         return left;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public RLogicalVector access(VirtualFrame frame, RNull left, byte right) {
         return doLogical(frame, RDataFactory.createEmptyLogicalVector(), right);
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public RIntVector access(VirtualFrame frame, RNull left, int right) {
         return doInt(frame, RDataFactory.createEmptyIntVector(), right);
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RNull left, double right) {
         return doDouble(frame, RDataFactory.createEmptyDoubleVector(), right);
     }
 
-    @Specialization(order = 4)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RNull left, RComplex right) {
         return doComplex(frame, RDataFactory.createEmptyComplexVector(), right);
     }
 
-    @Specialization(order = 5)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RNull left, String right) {
         return doString(frame, RDataFactory.createEmptyStringVector(), right);
     }
 
-    @Specialization(order = 6)
+    @Specialization
     public RLogicalVector access(VirtualFrame frame, RNull left, RLogicalVector right) {
         return doLogical(frame, RDataFactory.createEmptyLogicalVector(), right);
     }
 
-    @Specialization(order = 7)
+    @Specialization
     public RIntVector access(VirtualFrame frame, RNull left, RIntVector right) {
         return doInt(frame, RDataFactory.createEmptyIntVector(), right);
     }
 
-    @Specialization(order = 8)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RNull left, RDoubleVector right) {
         return doDouble(frame, RDataFactory.createEmptyDoubleVector(), right);
     }
 
-    @Specialization(order = 9)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RNull left, RComplexVector right) {
         return doComplex(frame, RDataFactory.createEmptyComplexVector(), right);
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RNull left, RStringVector right) {
         return doString(frame, RDataFactory.createEmptyStringVector(), right);
     }
 
     // Left side is RLogicalVector
 
-    @Specialization(order = 100)
+    @Specialization
     public RLogicalVector access(VirtualFrame frame, RLogicalVector left, RNull right) {
         return doLogical(frame, left, RDataFactory.createEmptyLogicalVector());
     }
 
-    @Specialization(order = 101)
+    @Specialization
     public RLogicalVector access(VirtualFrame frame, RLogicalVector left, byte right) {
         return doLogical(frame, left, right);
     }
 
-    @Specialization(order = 102)
+    @Specialization
     public RIntVector access(VirtualFrame frame, RLogicalVector left, int right) {
         leftNACheck.enable(left);
         return doInt(frame, RClosures.createLogicalToIntVector(left, leftNACheck).materialize(), right);
     }
 
-    @Specialization(order = 103)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RLogicalVector left, double right) {
         leftNACheck.enable(left);
         return doDouble(frame, RClosures.createLogicalToDoubleVector(left, leftNACheck).materialize(), right);
     }
 
-    @Specialization(order = 104)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RLogicalVector left, RComplex right) {
         leftNACheck.enable(left);
         return doComplex(frame, RClosures.createLogicalToComplexVector(left, leftNACheck).materialize(), right);
     }
 
-    @Specialization(order = 105)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RLogicalVector left, String right) {
         return doString(frame, left.toStringVector(), right);
     }
 
-    @Specialization(order = 106)
+    @Specialization
     public RLogicalVector access(VirtualFrame frame, RLogicalVector left, RLogicalVector right) {
         return doLogical(frame, left, right);
     }
 
-    @Specialization(order = 107)
+    @Specialization
     public RIntVector access(VirtualFrame frame, RLogicalVector left, RIntVector right) {
         leftNACheck.enable(left);
         return doInt(frame, RClosures.createLogicalToIntVector(left, leftNACheck).materialize(), right);
     }
 
-    @Specialization(order = 108)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RLogicalVector left, RDoubleVector right) {
         leftNACheck.enable(left);
         return doDouble(frame, RClosures.createLogicalToDoubleVector(left, leftNACheck).materialize(), right);
     }
 
-    @Specialization(order = 109)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RLogicalVector left, RComplexVector right) {
         leftNACheck.enable(left);
         return doComplex(frame, RClosures.createLogicalToComplexVector(left, leftNACheck).materialize(), right);
     }
 
-    @Specialization(order = 110)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RLogicalVector left, RStringVector right) {
         return doString(frame, left.toStringVector(), right);
     }
 
     // Left side is RIntVector
 
-    @Specialization(order = 200)
+    @Specialization
     public RIntVector access(VirtualFrame frame, RIntVector left, RNull right) {
         return doInt(frame, left, RDataFactory.createEmptyIntVector());
     }
 
-    @Specialization(order = 201)
+    @Specialization
     public RIntVector access(VirtualFrame frame, RIntVector left, byte right) {
         return doInt(frame, left, rightNACheck.convertLogicalToInt(right));
     }
 
-    @Specialization(order = 202)
+    @Specialization
     public RIntVector access(VirtualFrame frame, RIntVector left, int right) {
         return doInt(frame, left, right);
     }
 
-    @Specialization(order = 203)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RIntVector left, double right) {
         return doDouble(frame, RClosures.createIntToDoubleVector(left, leftNACheck).materialize(), right);
     }
 
-    @Specialization(order = 204)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RIntVector left, RComplex right) {
         return doComplex(frame, RClosures.createIntToComplexVector(left, leftNACheck).materialize(), right);
     }
 
-    @Specialization(order = 205)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RIntVector left, String right) {
         return doString(frame, left.toStringVector(), right);
     }
 
-    @Specialization(order = 206)
+    @Specialization
     public RIntVector access(VirtualFrame frame, RIntVector left, RLogicalVector right) {
         return doInt(frame, left, RClosures.createLogicalToIntVector(right, rightNACheck).materialize());
     }
 
-    @Specialization(order = 207)
+    @Specialization
     public RIntVector access(VirtualFrame frame, RIntVector left, RIntVector right) {
         return doInt(frame, left, right);
     }
 
-    @Specialization(order = 208)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RIntVector left, RDoubleVector right) {
         return doDouble(frame, RClosures.createIntToDoubleVector(left, leftNACheck).materialize(), right);
     }
 
-    @Specialization(order = 209)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RIntVector left, RComplexVector right) {
         return doComplex(frame, RClosures.createIntToComplexVector(left, leftNACheck).materialize(), right);
     }
 
-    @Specialization(order = 210)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RIntVector left, RStringVector right) {
         return doString(frame, left.toStringVector(), right);
     }
 
     // Left side is RDoubleVector
 
-    @Specialization(order = 300)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RDoubleVector left, RNull right) {
         return doDouble(frame, left, RDataFactory.createEmptyDoubleVector());
     }
 
-    @Specialization(order = 301)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RDoubleVector left, byte right) {
         return doDouble(frame, left, rightNACheck.convertLogicalToDouble(right));
     }
 
-    @Specialization(order = 302)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RDoubleVector left, int right) {
         return doDouble(frame, left, rightNACheck.convertIntToDouble(right));
     }
 
-    @Specialization(order = 303)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RDoubleVector left, double right) {
         return doDouble(frame, left, right);
     }
 
-    @Specialization(order = 304)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RDoubleVector left, RComplex right) {
         return doComplex(frame, RClosures.createDoubleToComplexVector(left, leftNACheck).materialize(), right);
     }
 
-    @Specialization(order = 305)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RDoubleVector left, String right) {
         return doString(frame, left.toStringVector(), right);
     }
 
-    @Specialization(order = 306)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RDoubleVector left, RLogicalVector right) {
         return doDouble(frame, left, RClosures.createLogicalToDoubleVector(right, rightNACheck).materialize());
     }
 
-    @Specialization(order = 307)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RDoubleVector left, RIntVector right) {
         return doDouble(frame, left, RClosures.createIntToDoubleVector(right, rightNACheck).materialize());
     }
 
-    @Specialization(order = 308)
+    @Specialization
     public RDoubleVector access(VirtualFrame frame, RDoubleVector left, RDoubleVector right) {
         return doDouble(frame, left, right);
     }
 
-    @Specialization(order = 309)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RDoubleVector left, RComplexVector right) {
         return doComplex(frame, RClosures.createDoubleToComplexVector(left, leftNACheck).materialize(), right);
     }
 
-    @Specialization(order = 310)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RDoubleVector left, RStringVector right) {
         return doString(frame, left.toStringVector(), right);
     }
 
     // Left side is RComplexVector
 
-    @Specialization(order = 400)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RComplexVector left, RNull right) {
         return doComplex(frame, left, RDataFactory.createEmptyComplexVector());
     }
 
-    @Specialization(order = 401)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RComplexVector left, byte right) {
         return doComplex(frame, left, rightNACheck.convertLogicalToComplex(right));
     }
 
-    @Specialization(order = 402)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RComplexVector left, int right) {
         return doComplex(frame, left, rightNACheck.convertIntToComplex(right));
     }
 
-    @Specialization(order = 403)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RComplexVector left, double right) {
         return doComplex(frame, left, rightNACheck.convertDoubleToComplex(right));
     }
 
-    @Specialization(order = 404)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RComplexVector left, RComplex right) {
         return doComplex(frame, left, right);
     }
 
-    @Specialization(order = 405)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RComplexVector left, String right) {
         return doString(frame, left.toStringVector(), right);
     }
 
-    @Specialization(order = 406)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RComplexVector left, RLogicalVector right) {
         return doComplex(frame, left, RClosures.createLogicalToComplexVector(right, rightNACheck).materialize());
     }
 
-    @Specialization(order = 407)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RComplexVector left, RIntVector right) {
         return doComplex(frame, left, RClosures.createIntToComplexVector(right, rightNACheck).materialize());
     }
 
-    @Specialization(order = 408)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RComplexVector left, RDoubleVector right) {
         return doComplex(frame, left, RClosures.createDoubleToComplexVector(right, rightNACheck).materialize());
     }
 
-    @Specialization(order = 409)
+    @Specialization
     public RComplexVector access(VirtualFrame frame, RComplexVector left, RComplexVector right) {
         return doComplex(frame, left, right);
     }
 
-    @Specialization(order = 410)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RComplexVector left, RStringVector right) {
         return doString(frame, left.toStringVector(), right);
     }
 
     // Left side is RStringVector
 
-    @Specialization(order = 500)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RStringVector left, RNull right) {
         return doString(frame, left, RDataFactory.createEmptyStringVector());
     }
 
-    @Specialization(order = 501)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RStringVector left, byte right) {
         return doString(frame, left, rightNACheck.convertLogicalToString(right));
     }
 
-    @Specialization(order = 502)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RStringVector left, int right) {
         return doString(frame, left, rightNACheck.convertIntToString(right));
     }
 
-    @Specialization(order = 503)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RStringVector left, double right) {
         return doString(frame, left, rightNACheck.convertDoubleToString(right));
     }
 
-    @Specialization(order = 504)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RStringVector left, RComplex right) {
         return doString(frame, left, rightNACheck.convertComplexToString(right));
     }
 
-    @Specialization(order = 505)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RStringVector left, String right) {
         return doString(frame, left.toStringVector(), right);
     }
 
-    @Specialization(order = 506)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RStringVector left, RLogicalVector right) {
         return doString(frame, left, right.toStringVector());
     }
 
-    @Specialization(order = 507)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RStringVector left, RIntVector right) {
         return doString(frame, left, right.toStringVector());
     }
 
-    @Specialization(order = 508)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RStringVector left, RDoubleVector right) {
         return doString(frame, left, right.toStringVector());
     }
 
-    @Specialization(order = 509)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RStringVector left, RComplexVector right) {
         return doString(frame, left, right.toStringVector());
     }
 
-    @Specialization(order = 510)
+    @Specialization
     public RStringVector access(VirtualFrame frame, RStringVector left, RStringVector right) {
         return doString(frame, left, right);
     }
 
     // left side is RList
 
-    @Specialization(order = 600)
+    @Specialization
     public RAbstractVector access(VirtualFrame frame, RList left, RAbstractVector right) {
         return doList(frame, left, right);
     }
 
-    @Specialization(order = 601)
+    @Specialization
     public RAbstractVector access(VirtualFrame frame, RList left, RNull right) {
         return doList(frame, left, right);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateArrayHelperNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateArrayHelperNode.java
index 2f9e7620b7..7df3ddc012 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateArrayHelperNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateArrayHelperNode.java
@@ -167,7 +167,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return CastToContainerNodeFactory.create(child, false, false, false, true);
     }
 
-    @Specialization(order = 5, guards = "emptyValue")
+    @Specialization(guards = "emptyValue")
     RAbstractVector update(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, Object[] positions, RAbstractVector vector) {
         if (isSubset) {
             int replacementLength = getReplacementLength(frame, positions, value, false);
@@ -178,12 +178,12 @@ public abstract class UpdateArrayHelperNode extends RNode {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
     }
 
-    @Specialization(order = 7)
+    @Specialization
     RNull accessFunction(VirtualFrame frame, Object v, Object value, int recLevel, Object position, RFunction vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.OBJECT_NOT_SUBSETTABLE, "closure");
     }
 
-    @Specialization(order = 8)
+    @Specialization
     RAbstractVector update(VirtualFrame frame, Object v, RNull value, int recLevel, Object[] positions, RList vector) {
         if (isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.NOT_MULTIPLE_REPLACEMENT);
@@ -192,7 +192,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 9, guards = "isPosZero")
+    @Specialization(guards = "isPosZero")
     RAbstractVector updateNAOrZero(VirtualFrame frame, Object v, RNull value, int recLevel, int position, RList vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -201,7 +201,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 11)
+    @Specialization
     RAbstractVector update(VirtualFrame frame, Object v, RNull value, int recLevel, Object[] positions, RAbstractVector vector) {
         if (isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.NOT_MULTIPLE_REPLACEMENT);
@@ -210,7 +210,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 12, guards = {"emptyValue", "isPosZero"})
+    @Specialization(guards = {"emptyValue", "isPosZero"})
     RAbstractVector updatePosZero(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -218,27 +218,27 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return vector;
     }
 
-    @Specialization(order = 13, guards = {"emptyValue", "!isPosZero", "!isPosNA", "!isVectorList"})
+    @Specialization(guards = {"emptyValue", "!isPosZero", "!isPosNA", "!isVectorList"})
     RAbstractVector update(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
     }
 
-    @Specialization(order = 14, guards = "!isVectorLongerThanOne")
+    @Specialization(guards = "!isVectorLongerThanOne")
     RAbstractVector updateVectorLongerThanOne(VirtualFrame frame, Object v, RNull value, int recLevel, RNull position, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
     }
 
-    @Specialization(order = 15, guards = "isVectorLongerThanOne")
+    @Specialization(guards = "isVectorLongerThanOne")
     RAbstractVector update(VirtualFrame frame, Object v, RNull value, int recLevel, RNull position, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
 
-    @Specialization(order = 16)
+    @Specialization
     RAbstractVector update(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RNull position, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
 
-    @Specialization(order = 17, guards = {"isPosNA", "isValueLengthOne", "isVectorLongerThanOne"})
+    @Specialization(guards = {"isPosNA", "isValueLengthOne", "isVectorLongerThanOne"})
     RAbstractVector updateNAValueLengthOneLongVector(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
@@ -247,7 +247,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 18, guards = {"isPosNA", "isValueLengthOne", "!isVectorLongerThanOne"})
+    @Specialization(guards = {"isPosNA", "isValueLengthOne", "!isVectorLongerThanOne"})
     RAbstractVector updateNAValueLengthOne(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -256,7 +256,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 19, guards = {"isPosNA", "!isValueLengthOne"})
+    @Specialization(guards = {"isPosNA", "!isValueLengthOne"})
     RAbstractVector updateNA(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RAbstractVector vector) {
         if (isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.NA_SUBSCRIPTED);
@@ -265,7 +265,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 20, guards = {"isPosZero", "isValueLengthOne"})
+    @Specialization(guards = {"isPosZero", "isValueLengthOne"})
     RAbstractVector updateZeroValueLengthOne(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -274,7 +274,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 21, guards = {"isPosZero", "!isValueLengthOne"})
+    @Specialization(guards = {"isPosZero", "!isValueLengthOne"})
     RAbstractVector updateZero(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -283,7 +283,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-// @Specialization(order = 22, guards = "isPosZero")
+// @Specialization(guards = "isPosZero")
 // RAbstractVector updateZero(VirtualFrame frame, Object v, RNull value, int recLevel, int position,
 // RAbstractVector vector) {
 // if (!isSubset) {
@@ -388,17 +388,17 @@ public abstract class UpdateArrayHelperNode extends RNode {
 
     // null
 
-    @Specialization(order = 45)
+    @Specialization
     RNull updateWrongDimensions(Object v, RNull value, int recLevel, Object[] positions, RNull vector) {
         return vector;
     }
 
-    @Specialization(order = 46, guards = {"!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"!wrongDimensionsMatrix", "!wrongDimensions"})
     RNull updateWrongDimensions(Object v, RAbstractVector value, int recLevel, Object[] positions, RNull vector) {
         return vector;
     }
 
-    @Specialization(order = 48, guards = "emptyValue")
+    @Specialization(guards = "emptyValue")
     RNull updatePosZero(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RNull vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -406,7 +406,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return vector;
     }
 
-    @Specialization(order = 49, guards = "emptyValue")
+    @Specialization(guards = "emptyValue")
     RNull updatePosZero(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RIntVector positions, RNull vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -414,7 +414,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return vector;
     }
 
-    @Specialization(order = 50, guards = "!emptyValue")
+    @Specialization(guards = "!emptyValue")
     RIntVector update(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RNull vector) {
         int highestPos = getHighestPos(positions);
         int[] data = new int[highestPos];
@@ -422,7 +422,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return updateSingleDimVector(frame, value, 0, RDataFactory.createIntVector(data, RDataFactory.INCOMPLETE_VECTOR), positions);
     }
 
-    @Specialization(order = 51, guards = {"!emptyValue", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!emptyValue", "!isPosNA", "!isPosZero"})
     RIntVector update(Object v, RAbstractIntVector value, int recLevel, int position, RNull vector) {
         if (position > 1) {
             int[] data = new int[position];
@@ -433,7 +433,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 55, guards = "!emptyValue")
+    @Specialization(guards = "!emptyValue")
     RDoubleVector update(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, RIntVector positions, RNull vector) {
         int highestPos = getHighestPos(positions);
         double[] data = new double[highestPos];
@@ -441,7 +441,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return updateSingleDimVector(frame, value, 0, RDataFactory.createDoubleVector(data, RDataFactory.INCOMPLETE_VECTOR), positions);
     }
 
-    @Specialization(order = 56, guards = {"!emptyValue", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!emptyValue", "!isPosNA", "!isPosZero"})
     RDoubleVector update(Object v, RAbstractDoubleVector value, int recLevel, int position, RNull vector) {
         if (position > 1) {
             double[] data = new double[position];
@@ -452,7 +452,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 60, guards = "!emptyValue")
+    @Specialization(guards = "!emptyValue")
     RLogicalVector update(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RNull vector) {
         int highestPos = getHighestPos(positions);
         byte[] data = new byte[highestPos];
@@ -460,7 +460,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return updateSingleDimVector(frame, value, 0, RDataFactory.createLogicalVector(data, RDataFactory.INCOMPLETE_VECTOR), positions);
     }
 
-    @Specialization(order = 61, guards = {"!emptyValue", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!emptyValue", "!isPosNA", "!isPosZero"})
     RLogicalVector update(Object v, RAbstractLogicalVector value, int recLevel, int position, RNull vector) {
         if (position > 1) {
             byte[] data = new byte[position];
@@ -471,7 +471,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 65, guards = "!emptyValue")
+    @Specialization(guards = "!emptyValue")
     RStringVector update(VirtualFrame frame, Object v, RAbstractStringVector value, int recLevel, RIntVector positions, RNull vector) {
         int highestPos = getHighestPos(positions);
         String[] data = new String[highestPos];
@@ -479,7 +479,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return updateSingleDimVector(frame, value, 0, RDataFactory.createStringVector(data, RDataFactory.INCOMPLETE_VECTOR), positions);
     }
 
-    @Specialization(order = 66, guards = {"!emptyValue", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!emptyValue", "!isPosNA", "!isPosZero"})
     RStringVector update(Object v, RAbstractStringVector value, int recLevel, int position, RNull vector) {
         if (position > 1) {
             String[] data = new String[position];
@@ -490,7 +490,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 70, guards = "!emptyValue")
+    @Specialization(guards = "!emptyValue")
     RComplexVector update(VirtualFrame frame, Object v, RAbstractComplexVector value, int recLevel, RIntVector positions, RNull vector) {
         int highestPos = getHighestPos(positions);
         double[] data = new double[highestPos << 1];
@@ -502,7 +502,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return updateSingleDimVector(frame, value, 0, RDataFactory.createComplexVector(data, RDataFactory.INCOMPLETE_VECTOR), positions);
     }
 
-    @Specialization(order = 71, guards = {"!emptyValue", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!emptyValue", "!isPosNA", "!isPosZero"})
     RComplexVector update(VirtualFrame frame, Object v, RAbstractComplexVector value, int recLevel, int position, RNull vector) {
         if (position > 1) {
             double[] data = new double[position << 1];
@@ -517,47 +517,47 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 75, guards = "!emptyValue")
+    @Specialization(guards = "!emptyValue")
     RRawVector update(VirtualFrame frame, Object v, RAbstractRawVector value, int recLevel, RIntVector positions, RNull vector) {
         return updateSingleDimVector(frame, value, 0, RDataFactory.createRawVector(getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 76, guards = {"!emptyValue", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!emptyValue", "!isPosNA", "!isPosZero"})
     RRawVector update(Object v, RAbstractRawVector value, int recLevel, int position, RNull vector) {
         return updateSingleDim(value, RDataFactory.createRawVector(position), position);
     }
 
-    @Specialization(order = 80, guards = {"!isPosNA", "isPositionNegative", "!isVectorList"})
+    @Specialization(guards = {"!isPosNA", "isPositionNegative", "!isVectorList"})
     RList updateNegativeNull(VirtualFrame frame, Object v, RNull value, int recLevel, int position, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
     }
 
-    @Specialization(order = 81, guards = {"!isPosNA", "isPositionNegative", "!outOfBoundsNegative"})
+    @Specialization(guards = {"!isPosNA", "isPositionNegative", "!outOfBoundsNegative"})
     RList updateNegativeNull(VirtualFrame frame, Object v, RNull value, int recLevel, int position, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
 
-    @Specialization(order = 82, guards = {"!isPosNA", "isPositionNegative", "outOfBoundsNegative", "oneElemVector"})
+    @Specialization(guards = {"!isPosNA", "isPositionNegative", "outOfBoundsNegative", "oneElemVector"})
     RList updateNegativeOutOfBoundsOneElemNull(VirtualFrame frame, Object v, RNull value, int recLevel, int position, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
     }
 
-    @Specialization(order = 83, guards = {"!isPosNA", "isPositionNegative", "outOfBoundsNegative", "!oneElemVector"})
+    @Specialization(guards = {"!isPosNA", "isPositionNegative", "outOfBoundsNegative", "!oneElemVector"})
     RList updateNegativeOutOfBoundsNull(VirtualFrame frame, Object v, RNull value, int recLevel, int position, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
 
-    @Specialization(order = 85, guards = {"!isPosNA", "isPositionNegative", "!outOfBoundsNegative"})
+    @Specialization(guards = {"!isPosNA", "isPositionNegative", "!outOfBoundsNegative"})
     RList updateNegative(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
 
-    @Specialization(order = 86, guards = {"!isPosNA", "isPositionNegative", "outOfBoundsNegative", "oneElemVector"})
+    @Specialization(guards = {"!isPosNA", "isPositionNegative", "outOfBoundsNegative", "oneElemVector"})
     RList updateNegativeOneElem(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
     }
 
-    @Specialization(order = 87, guards = {"!isPosNA", "isPositionNegative", "outOfBoundsNegative", "!oneElemVector"})
+    @Specialization(guards = {"!isPosNA", "isPositionNegative", "outOfBoundsNegative", "!oneElemVector"})
     RList updateOutOfBoundsNegative(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
@@ -710,60 +710,60 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return resultList;
     }
 
-    @Specialization(order = 100, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RList update(VirtualFrame frame, Object v, RAbstractContainer value, int recLevel, Object[] positions, RList vector) {
         return updateVector(frame, value, vector, positions);
     }
 
-    @Specialization(order = 102)
+    @Specialization
     Object updateString(VirtualFrame frame, Object v, RNull value, int recLevel, RStringVector positions, RList vector) {
         return updateListRecursive(frame, v, value, vector, recLevel, positions);
     }
 
-    @Specialization(order = 103)
+    @Specialization
     Object updateString(VirtualFrame frame, Object v, RAbstractContainer value, int recLevel, RStringVector positions, RList vector) {
         return updateListRecursive(frame, v, value, vector, recLevel, positions);
     }
 
-    @Specialization(order = 105, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RList update(VirtualFrame frame, Object v, RAbstractContainer value, int recLevel, RIntVector positions, RList vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions), false), positions);
     }
 
-    @Specialization(order = 106, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateOne(VirtualFrame frame, Object v, RAbstractContainer value, int recLevel, RIntVector positions, RList vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 107, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RList updateNames(VirtualFrame frame, Object v, RAbstractContainer value, int recLevel, RIntVector positions, RList vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions), false), positions);
     }
 
-    @Specialization(order = 111, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero", "!isPositionNegative"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero", "!isPositionNegative"})
     RList updateTooManyValuesSubset(Object v, RAbstractContainer value, int recLevel, int position, RList vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim(value, getResultVector(vector, position, false), position);
     }
 
-    @Specialization(order = 112, guards = {"isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero", "!isPositionNegative"})
+    @Specialization(guards = {"isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero", "!isPositionNegative"})
     RList update(Object v, RAbstractContainer value, int recLevel, int position, RList vector) {
         return updateSingleDim(value, getResultVector(vector, position, false), position);
     }
 
-    @Specialization(order = 113, guards = {"!isSubset", "!isPosNA", "!isPosZero", "!isPositionNegative"})
+    @Specialization(guards = {"!isSubset", "!isPosNA", "!isPosZero", "!isPositionNegative"})
     RList updateTooManyValuesSubscript(Object v, RAbstractContainer value, int recLevel, int position, RList vector) {
         RList resultVector = getResultVector(vector, position, false);
         resultVector.updateDataAt(position - 1, adjustRhsStateOnAssignment(value), null);
         return resultVector;
     }
 
-    @Specialization(order = 118, guards = "isPosNA")
+    @Specialization(guards = "isPosNA")
     RList updateListNullValue(Object v, RNull value, int recLevel, int position, RList vector) {
         return vector;
     }
 
-    @Specialization(order = 119, guards = {"!isPosZero", "emptyList", "!isPosNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPosZero", "emptyList", "!isPosNA", "!isPositionNegative"})
     RList updateEmptyList(Object v, RNull value, int recLevel, int position, RList vector) {
         return vector;
     }
@@ -809,19 +809,19 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 120, guards = {"!isPosZero", "!emptyList", "!isPosNA", "!isPositionNegative"})
+    @Specialization(guards = {"!isPosZero", "!emptyList", "!isPosNA", "!isPositionNegative"})
     RList update(Object v, RNull value, int recLevel, int position, RList vector) {
         return removeElement(vector, position, false, isSubset);
     }
 
     private static final Object DELETE_MARKER = new Object();
 
-    @Specialization(order = 121, guards = {"isSubset", "noPosition"})
+    @Specialization(guards = {"isSubset", "noPosition"})
     RList updateEmptyPos(Object v, RNull value, int recLevel, RIntVector positions, RList vector) {
         return vector;
     }
 
-    @Specialization(order = 122, guards = {"isSubset", "!noPosition"})
+    @Specialization(guards = {"isSubset", "!noPosition"})
     RList update(VirtualFrame frame, Object v, RNull value, int recLevel, RIntVector positions, RList vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -911,53 +911,53 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return resultList;
     }
 
-    @Specialization(order = 150, guards = {"!isSubset", "multiPos"})
+    @Specialization(guards = {"!isSubset", "multiPos"})
     Object access(VirtualFrame frame, Object v, RNull value, int recLevel, RIntVector p, RList vector) {
         return updateListRecursive(frame, v, value, vector, recLevel, p);
     }
 
-    @Specialization(order = 151, guards = {"!isSubset", "multiPos"})
+    @Specialization(guards = {"!isSubset", "multiPos"})
     Object access(VirtualFrame frame, Object v, RAbstractContainer value, int recLevel, RIntVector p, RList vector) {
         return updateListRecursive(frame, v, value, vector, recLevel, p);
     }
 
-    @Specialization(order = 160, guards = {"!isSubset", "inRecursion", "multiPos"})
+    @Specialization(guards = {"!isSubset", "inRecursion", "multiPos"})
     Object accessRecFailed(VirtualFrame frame, Object v, RAbstractContainer value, int recLevel, RIntVector p, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.RECURSIVE_INDEXING_FAILED, recLevel + 1);
     }
 
-    @Specialization(order = 170, guards = {"!isSubset", "!multiPos"})
+    @Specialization(guards = {"!isSubset", "!multiPos"})
     Object accessSubscriptListValue(VirtualFrame frame, Object v, RList value, int recLevel, RIntVector p, RList vector) {
         int position = getPositionInRecursion(frame, vector, p.getDataAt(0), recLevel, true);
         return updateSingleDimRec(frame, value, getResultVector(vector, position, false), p, recLevel);
     }
 
-    @Specialization(order = 171, guards = {"!isSubset", "inRecursion", "!multiPos"})
+    @Specialization(guards = {"!isSubset", "inRecursion", "!multiPos"})
     Object accessSubscriptNullValueInRecursion(VirtualFrame frame, Object v, RNull value, int recLevel, RIntVector p, RList vector) {
         int position = getPositionInRecursion(frame, vector, p.getDataAt(0), recLevel, true);
         return removeElement(vector, position, true, false);
     }
 
-    @Specialization(order = 172, guards = {"!isSubset", "!inRecursion", "!multiPos"})
+    @Specialization(guards = {"!isSubset", "!inRecursion", "!multiPos"})
     Object accessSubscriptNullValue(VirtualFrame frame, Object v, RNull value, int recLevel, RIntVector p, RList vector) {
         int position = getPositionInRecursion(frame, vector, p.getDataAt(0), recLevel, true);
         return removeElement(vector, position, false, false);
     }
 
-    @Specialization(order = 173, guards = {"!isSubset", "!multiPos"})
+    @Specialization(guards = {"!isSubset", "!multiPos"})
     Object accessSubscript(VirtualFrame frame, Object v, RAbstractContainer value, int recLevel, RIntVector p, RList vector) {
         int position = getPositionInRecursion(frame, vector, p.getDataAt(0), recLevel, true);
         return updateSingleDimRec(frame, value, getResultVector(vector, position, false), p, recLevel);
     }
 
-    @Specialization(order = 180, guards = {"!isValueLengthOne", "!emptyValue", "!isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "!emptyValue", "!isSubset", "!isPosNA", "!isPosZero"})
     RAbstractVector updateTooManyValues(VirtualFrame frame, Object v, RAbstractContainer value, int recLevel, int position, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
     }
 
     // null value (with vectors)
 
-    @Specialization(order = 185, guards = {"isPosZero", "!isVectorList"})
+    @Specialization(guards = {"isPosZero", "!isVectorList"})
     RAbstractVector updatePosZero(VirtualFrame frame, Object v, RNull value, int recLevel, int position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -965,7 +965,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return vector;
     }
 
-    @Specialization(order = 186, guards = {"!isPosZero", "!isPosNA", "!isVectorList"})
+    @Specialization(guards = {"!isPosZero", "!isPosNA", "!isVectorList"})
     RAbstractVector update(VirtualFrame frame, Object v, RNull value, int recLevel, int position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -974,37 +974,37 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 188, guards = {"isSubset", "!isVectorList", "noPosition"})
+    @Specialization(guards = {"isSubset", "!isVectorList", "noPosition"})
     RAbstractVector updateNullSubsetNoPos(Object v, RNull value, int recLevel, RIntVector positions, RAbstractVector vector) {
         return vector;
     }
 
-    @Specialization(order = 189, guards = {"isSubset", "!isVectorList", "!noPosition"})
+    @Specialization(guards = {"isSubset", "!isVectorList", "!noPosition"})
     RAbstractVector updateNullSubset(VirtualFrame frame, Object v, RNull value, int recLevel, RIntVector positions, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
     }
 
-    @Specialization(order = 190, guards = {"!isSubset", "!isVectorList", "noPosition"})
+    @Specialization(guards = {"!isSubset", "!isVectorList", "noPosition"})
     RAbstractVector updateNullNoPos(VirtualFrame frame, Object v, RNull value, int recLevel, RIntVector positions, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
     }
 
-    @Specialization(order = 191, guards = {"!isSubset", "!isVectorList", "onePosition"})
+    @Specialization(guards = {"!isSubset", "!isVectorList", "onePosition"})
     RAbstractVector updateNullOnePos(VirtualFrame frame, Object v, RNull value, int recLevel, RIntVector positions, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
     }
 
-    @Specialization(order = 192, guards = {"!isSubset", "!isVectorList", "twoPositions", "firstPosZero"})
+    @Specialization(guards = {"!isSubset", "!isVectorList", "twoPositions", "firstPosZero"})
     RAbstractVector updateNullTwoElemsZero(VirtualFrame frame, Object v, RNull value, int recLevel, RIntVector positions, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
     }
 
-    @Specialization(order = 193, guards = {"!isSubset", "!isVectorList", "twoPositions", "!firstPosZero"})
+    @Specialization(guards = {"!isSubset", "!isVectorList", "twoPositions", "!firstPosZero"})
     RAbstractVector updateNullTwoElems(VirtualFrame frame, Object v, RNull value, int recLevel, RIntVector positions, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
 
-    @Specialization(order = 194, guards = {"!isSubset", "!isVectorList", "multiPos"})
+    @Specialization(guards = {"!isSubset", "!isVectorList", "multiPos"})
     RAbstractVector updateNull(VirtualFrame frame, Object v, RNull value, int recLevel, RIntVector positions, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
@@ -1123,89 +1123,89 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return resultVector;
     }
 
-    @Specialization(order = 195, guards = {"!isSubset", "!isVectorList", "!posNames", "!twoPositions"})
+    @Specialization(guards = {"!isSubset", "!isVectorList", "!posNames", "!twoPositions"})
     Object update(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RIntVector positions, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
 
-    @Specialization(order = 196, guards = {"!isSubset", "!isVectorList", "!posNames", "twoPositions", "firstPosZero"})
+    @Specialization(guards = {"!isSubset", "!isVectorList", "!posNames", "twoPositions", "firstPosZero"})
     RList updateTwoElemsZero(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RIntVector positions, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
     }
 
-    @Specialization(order = 197, guards = {"!isSubset", "!isVectorList", "!posNames", "twoPositions", "!firstPosZero"})
+    @Specialization(guards = {"!isSubset", "!isVectorList", "!posNames", "twoPositions", "!firstPosZero"})
     RList updateTwoElems(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RIntVector positions, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
     }
 
-    @Specialization(order = 200, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RIntVector update(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, Object[] positions, RAbstractIntVector vector) {
         return updateVector(frame, value, vector, positions);
     }
 
-    @Specialization(order = 202, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RIntVector update(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, Object[] positions, RAbstractIntVector vector) {
         return updateVector(frame, (RIntVector) castInteger(frame, value), vector, positions);
     }
 
-    @Specialization(order = 220, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractIntVector updateSubset(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RAbstractIntVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 221, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RAbstractIntVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 222, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractIntVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RAbstractIntVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 223, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractIntVector update(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RAbstractIntVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 224, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RIntVector updateTooManyValuesSubset(Object v, RAbstractIntVector value, int recLevel, int position, RAbstractIntVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim(value, getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 225, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RIntVector update(Object v, RAbstractIntVector value, int recLevel, int position, RAbstractIntVector vector) {
         return updateSingleDim(value, getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 240, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractIntVector updateSubset(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RAbstractIntVector vector) {
         return updateSingleDimVector(frame, (RIntVector) castInteger(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 241, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RAbstractIntVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 242, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractIntVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RAbstractIntVector vector) {
         return updateSingleDimVector(frame, (RIntVector) castInteger(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 243, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractIntVector update(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RAbstractIntVector vector) {
         return updateSingleDimVector(frame, (RIntVector) castInteger(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 244, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RIntVector updateTooManyValuesSubset(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, int position, RAbstractIntVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim((RIntVector) castInteger(frame, value), getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 245, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RIntVector update(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, int position, RAbstractIntVector vector) {
         return updateSingleDim((RIntVector) castInteger(frame, value), getResultVector(vector, position), position);
     }
@@ -1288,110 +1288,110 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return resultVector;
     }
 
-    @Specialization(order = 300, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RDoubleVector update(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, Object[] positions, RAbstractDoubleVector vector) {
         return updateVector(frame, (RDoubleVector) castDouble(frame, value), vector, positions);
     }
 
-    @Specialization(order = 301, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RDoubleVector update(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, Object[] positions, RAbstractDoubleVector vector) {
         return updateVector(frame, value, vector, positions);
     }
 
-    @Specialization(order = 302, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RDoubleVector update(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, Object[] positions, RAbstractDoubleVector vector) {
         return updateVector(frame, (RDoubleVector) castDouble(frame, value), vector, positions);
     }
 
-    @Specialization(order = 320, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractDoubleVector updateSubset(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RAbstractDoubleVector vector) {
         return updateSingleDimVector(frame, (RDoubleVector) castDouble(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 321, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RAbstractDoubleVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 322, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractDoubleVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RAbstractDoubleVector vector) {
         return updateSingleDimVector(frame, (RDoubleVector) castDouble(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 323, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractDoubleVector update(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RAbstractDoubleVector vector) {
         return updateSingleDimVector(frame, (RDoubleVector) castDouble(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 324, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RDoubleVector updateTooManyValuesSubset(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, int position, RAbstractDoubleVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim((RDoubleVector) castDouble(frame, value), getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 325, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RDoubleVector update(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, int position, RAbstractDoubleVector vector) {
         return updateSingleDim((RDoubleVector) castDouble(frame, value), getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 330, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractDoubleVector updateSubset(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, RIntVector positions, RAbstractDoubleVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 331, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, RIntVector positions, RAbstractDoubleVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 332, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractDoubleVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, RIntVector positions, RAbstractDoubleVector vector) {
         return updateSingleDimVector(frame, (RDoubleVector) castDouble(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 333, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractDoubleVector update(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, RIntVector positions, RAbstractDoubleVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 334, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RDoubleVector updateTooManyValuesSubset(Object v, RAbstractDoubleVector value, int recLevel, int position, RAbstractDoubleVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim(value, getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 335, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RDoubleVector update(Object v, RAbstractDoubleVector value, int recLevel, int position, RAbstractDoubleVector vector) {
         return updateSingleDim(value, getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 340, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractDoubleVector updateSubset(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RAbstractDoubleVector vector) {
         return updateSingleDimVector(frame, (RDoubleVector) castDouble(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 341, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RAbstractDoubleVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 342, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractDoubleVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RAbstractDoubleVector vector) {
         return updateSingleDimVector(frame, (RDoubleVector) castDouble(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 343, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractDoubleVector update(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RAbstractDoubleVector vector) {
         return updateSingleDimVector(frame, (RDoubleVector) castDouble(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 344, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RDoubleVector updateTooManyValuesSubset(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, int position, RAbstractDoubleVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim((RDoubleVector) castDouble(frame, value), getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 345, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RDoubleVector update(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, int position, RAbstractDoubleVector vector) {
         return updateSingleDim((RDoubleVector) castDouble(frame, value), getResultVector(vector, position), position);
     }
@@ -1471,38 +1471,38 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return resultVector;
     }
 
-    @Specialization(order = 402, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RLogicalVector update(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, Object[] positions, RLogicalVector vector) {
         return updateVector(frame, value, vector, positions);
     }
 
-    @Specialization(order = 440, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractLogicalVector updateSubset(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RLogicalVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 441, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RLogicalVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 442, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractLogicalVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RLogicalVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 443, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractLogicalVector update(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RLogicalVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 444, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RLogicalVector updateTooManyValuesSubset(Object v, RAbstractLogicalVector value, int recLevel, int position, RLogicalVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim(value, getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 445, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RLogicalVector update(Object v, RAbstractLogicalVector value, int recLevel, int position, RLogicalVector vector) {
         return updateSingleDim(value, getResultVector(vector, position), position);
     }
@@ -1582,74 +1582,74 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return resultVector;
     }
 
-    @Specialization(order = 503, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RStringVector update(VirtualFrame frame, Object v, RAbstractStringVector value, int recLevel, Object[] positions, RStringVector vector) {
         return updateVector(frame, value, vector, positions);
     }
 
-    @Specialization(order = 507, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RStringVector update(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, Object[] positions, RStringVector vector) {
         return updateVector(frame, (RStringVector) castString(frame, value), vector, positions);
     }
 
-    @Specialization(order = 550, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractStringVector updateSubset(VirtualFrame frame, Object v, RAbstractStringVector value, int recLevel, RIntVector positions, RStringVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 551, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractStringVector value, int recLevel, RIntVector positions, RStringVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 552, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractStringVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractStringVector value, int recLevel, RIntVector positions, RStringVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 553, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractStringVector update(VirtualFrame frame, Object v, RAbstractStringVector value, int recLevel, RIntVector positions, RStringVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 554, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RStringVector updateTooManyValuesSubset(Object v, RAbstractStringVector value, int recLevel, int position, RStringVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim(value, getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 555, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RStringVector update(Object v, RAbstractStringVector value, int recLevel, int position, RStringVector vector) {
         return updateSingleDim(value, getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 590, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractStringVector updateSubset(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RIntVector positions, RStringVector vector) {
         return updateSingleDimVector(frame, (RStringVector) castString(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 591, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RIntVector positions, RStringVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 592, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractStringVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RIntVector positions, RStringVector vector) {
         return updateSingleDimVector(frame, (RStringVector) castString(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 593, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractStringVector update(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RIntVector positions, RStringVector vector) {
         return updateSingleDimVector(frame, (RStringVector) castString(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 594, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RStringVector updateTooManyValuesSubset(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RStringVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim((RStringVector) castString(frame, value), getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 595, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RStringVector update(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, int position, RStringVector vector) {
         return updateSingleDim((RStringVector) castString(frame, value), getResultVector(vector, position), position);
     }
@@ -1729,146 +1729,146 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return resultVector;
     }
 
-    @Specialization(order = 600, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RComplexVector update(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, Object[] positions, RComplexVector vector) {
         return updateVector(frame, (RComplexVector) castComplex(frame, value), vector, positions);
     }
 
-    @Specialization(order = 601, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RComplexVector update(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, Object[] positions, RComplexVector vector) {
         return updateVector(frame, (RComplexVector) castComplex(frame, value), vector, positions);
     }
 
-    @Specialization(order = 602, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RComplexVector update(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, Object[] positions, RComplexVector vector) {
         return updateVector(frame, (RComplexVector) castComplex(frame, value), vector, positions);
     }
 
-    @Specialization(order = 603, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RComplexVector update(VirtualFrame frame, Object v, RAbstractComplexVector value, int recLevel, Object[] positions, RComplexVector vector) {
         return updateVector(frame, value, vector, positions);
     }
 
-    @Specialization(order = 620, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractComplexVector updateSubset(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateSingleDimVector(frame, (RComplexVector) castComplex(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 621, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 622, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractComplexVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateSingleDimVector(frame, (RComplexVector) castComplex(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 623, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractComplexVector update(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateSingleDimVector(frame, (RComplexVector) castComplex(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 624, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RComplexVector updateTooManyValuesSubset(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, int position, RComplexVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim(frame, (RComplexVector) castComplex(frame, value), getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 625, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RComplexVector update(VirtualFrame frame, Object v, RAbstractIntVector value, int recLevel, int position, RComplexVector vector) {
         return updateSingleDim(frame, (RComplexVector) castComplex(frame, value), getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 630, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractComplexVector updateSubset(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateSingleDimVector(frame, (RComplexVector) castComplex(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 631, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 632, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractComplexVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateSingleDimVector(frame, (RComplexVector) castComplex(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 633, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractComplexVector update(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateSingleDimVector(frame, (RComplexVector) castComplex(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 634, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RComplexVector updateTooManyValuesSubset(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, int position, RComplexVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim(frame, (RComplexVector) castComplex(frame, value), getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 635, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RComplexVector update(VirtualFrame frame, Object v, RAbstractDoubleVector value, int recLevel, int position, RComplexVector vector) {
         return updateSingleDim(frame, (RComplexVector) castComplex(frame, value), getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 640, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractComplexVector updateSubset(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateSingleDimVector(frame, (RComplexVector) castComplex(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 641, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 642, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractComplexVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateSingleDimVector(frame, (RComplexVector) castComplex(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 643, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractComplexVector update(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateSingleDimVector(frame, (RComplexVector) castComplex(frame, value), vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 644, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RComplexVector updateTooManyValuesSubset(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, int position, RComplexVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim(frame, (RComplexVector) castComplex(frame, value), getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 645, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RComplexVector update(VirtualFrame frame, Object v, RAbstractLogicalVector value, int recLevel, int position, RComplexVector vector) {
         return updateSingleDim(frame, (RComplexVector) castComplex(frame, value), getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 650, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractComplexVector updateSubset(VirtualFrame frame, Object v, RAbstractComplexVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 651, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractComplexVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 652, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractComplexVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractComplexVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 653, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractComplexVector update(VirtualFrame frame, Object v, RAbstractComplexVector value, int recLevel, RIntVector positions, RComplexVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 654, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RComplexVector updateTooManyValuesSubset(VirtualFrame frame, Object v, RAbstractComplexVector value, int recLevel, int position, RComplexVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim(frame, value, getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 655, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RComplexVector update(VirtualFrame frame, Object v, RAbstractComplexVector value, int recLevel, int position, RComplexVector vector) {
         return updateSingleDim(frame, value, getResultVector(vector, position), position);
     }
@@ -1946,43 +1946,43 @@ public abstract class UpdateArrayHelperNode extends RNode {
         return resultVector;
     }
 
-    @Specialization(order = 706, guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
+    @Specialization(guards = {"multiDim", "!wrongDimensionsMatrix", "!wrongDimensions"})
     RRawVector update(VirtualFrame frame, Object v, RAbstractRawVector value, int recLevel, Object[] positions, RRawVector vector) {
         return updateVector(frame, value, vector, positions);
     }
 
-    @Specialization(order = 780, guards = {"isSubset", "!posNames", "multiPos"})
+    @Specialization(guards = {"isSubset", "!posNames", "multiPos"})
     RAbstractRawVector updateSubset(VirtualFrame frame, Object v, RAbstractRawVector value, int recLevel, RIntVector positions, RRawVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 781, guards = {"isSubset", "!posNames", "onePosition"})
+    @Specialization(guards = {"isSubset", "!posNames", "onePosition"})
     Object updateSubsetOne(VirtualFrame frame, Object v, RAbstractRawVector value, int recLevel, RIntVector positions, RRawVector vector) {
         return updateRecursive(frame, v, value, vector, positions.getDataAt(0), recLevel);
     }
 
-    @Specialization(order = 782, guards = {"isSubset", "posNames"})
+    @Specialization(guards = {"isSubset", "posNames"})
     RAbstractRawVector updateSubsetNames(VirtualFrame frame, Object v, RAbstractRawVector value, int recLevel, RIntVector positions, RRawVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 783, guards = {"!isSubset", "posNames"})
+    @Specialization(guards = {"!isSubset", "posNames"})
     RAbstractRawVector update(VirtualFrame frame, Object v, RAbstractRawVector value, int recLevel, RIntVector positions, RRawVector vector) {
         return updateSingleDimVector(frame, value, vector.getLength(), getResultVector(vector, getHighestPos(positions)), positions);
     }
 
-    @Specialization(order = 784, guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"!isValueLengthOne", "isSubset", "!isPosNA", "!isPosZero"})
     RRawVector updateTooManyValuesSubset(Object v, RAbstractRawVector value, int recLevel, int position, RRawVector vector) {
         RError.warning(RError.Message.NOT_MULTIPLE_REPLACEMENT);
         return updateSingleDim(value, getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 785, guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
+    @Specialization(guards = {"isValueLengthOne", "!isPosNA", "!isPosZero"})
     RRawVector update(Object v, RAbstractRawVector value, int recLevel, int position, RRawVector vector) {
         return updateSingleDim(value, getResultVector(vector, position), position);
     }
 
-    @Specialization(order = 1000, guards = {"noPosition", "emptyValue"})
+    @Specialization(guards = {"noPosition", "emptyValue"})
     Object accessListEmptyPosEmptyValueList(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RList vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -1991,7 +1991,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1001, guards = {"noPosition", "emptyValue", "!isVectorList"})
+    @Specialization(guards = {"noPosition", "emptyValue", "!isVectorList"})
     Object accessListEmptyPosEmptyValue(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -2000,7 +2000,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1002, guards = {"noPosition", "valueLengthOne"})
+    @Specialization(guards = {"noPosition", "valueLengthOne"})
     Object accessListEmptyPosValueLengthOne(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -2009,7 +2009,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1003, guards = {"noPosition", "valueLongerThanOne"})
+    @Specialization(guards = {"noPosition", "valueLongerThanOne"})
     Object accessListEmptyPosValueLongerThanOne(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2018,7 +2018,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1004, guards = "noPosition")
+    @Specialization(guards = "noPosition")
     Object accessListEmptyPosValueNullList(VirtualFrame frame, Object v, RNull value, int recLevel, RList positions, RList vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -2027,7 +2027,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1005, guards = {"noPosition", "!isVectorList"})
+    @Specialization(guards = {"noPosition", "!isVectorList"})
     Object accessListEmptyPosValueNull(VirtualFrame frame, Object v, RNull value, int recLevel, RList positions, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2036,12 +2036,12 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1010, guards = {"onePosition", "emptyValue"})
+    @Specialization(guards = {"onePosition", "emptyValue"})
     Object accessListOnePosEmptyValueList(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
     }
 
-    @Specialization(order = 1011, guards = {"onePosition", "emptyValue", "!isVectorList"})
+    @Specialization(guards = {"onePosition", "emptyValue", "!isVectorList"})
     Object accessListOnePosEmptyValue(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -2050,12 +2050,12 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1012, guards = {"onePosition", "valueLengthOne"})
+    @Specialization(guards = {"onePosition", "valueLengthOne"})
     Object accessListOnePosValueLengthOne(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
     }
 
-    @Specialization(order = 1013, guards = {"onePosition", "valueLongerThanOne"})
+    @Specialization(guards = {"onePosition", "valueLongerThanOne"})
     Object accessListOnePosValueLongerThanTwo(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2064,12 +2064,12 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1014, guards = "onePosition")
+    @Specialization(guards = "onePosition")
     Object accessListOnePosValueNullList(VirtualFrame frame, Object v, RNull value, int recLevel, RList positions, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
     }
 
-    @Specialization(order = 1015, guards = {"onePosition", "!isVectorList"})
+    @Specialization(guards = {"onePosition", "!isVectorList"})
     Object accessListOnePosValueNull(VirtualFrame frame, Object v, RNull value, int recLevel, RList positions, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2078,22 +2078,22 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1020, guards = "twoPositions")
+    @Specialization(guards = "twoPositions")
     Object accessListTwoPos(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
     }
 
-    @Specialization(order = 1021, guards = "twoPositions")
+    @Specialization(guards = "twoPositions")
     Object accessListTwoPosValueNull(VirtualFrame frame, Object v, RNull value, int recLevel, RList positions, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
     }
 
-    @Specialization(order = 1030, guards = {"moreThanTwoPos", "emptyValue"})
+    @Specialization(guards = {"moreThanTwoPos", "emptyValue"})
     Object accessListMultiPosEmptyValueList(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
     }
 
-    @Specialization(order = 1031, guards = {"moreThanTwoPos", "emptyValue", "!isVectorList"})
+    @Specialization(guards = {"moreThanTwoPos", "emptyValue", "!isVectorList"})
     Object accessListMultiPosEmptyValue(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
@@ -2102,12 +2102,12 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1032, guards = {"moreThanTwoPos", "valueLengthOne"})
+    @Specialization(guards = {"moreThanTwoPos", "valueLengthOne"})
     Object accessListMultiPosValueLengthOneList(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
     }
 
-    @Specialization(order = 1033, guards = {"moreThanTwoPos", "valueLengthOne", "!isVectorList"})
+    @Specialization(guards = {"moreThanTwoPos", "valueLengthOne", "!isVectorList"})
     Object accessListMultiPosValueLengthOne(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
@@ -2116,7 +2116,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1034, guards = {"moreThanTwoPos", "valueLongerThanOne"})
+    @Specialization(guards = {"moreThanTwoPos", "valueLongerThanOne"})
     Object accessListMultiPos(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RList positions, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
@@ -2125,12 +2125,12 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1035, guards = "moreThanTwoPos")
+    @Specialization(guards = "moreThanTwoPos")
     Object accessListMultiPosValueNullList(VirtualFrame frame, Object v, RNull value, int recLevel, RList positions, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
     }
 
-    @Specialization(order = 1036, guards = {"moreThanTwoPos", "!isVectorList"})
+    @Specialization(guards = {"moreThanTwoPos", "!isVectorList"})
     Object accessListMultiPosValueNull(VirtualFrame frame, Object v, RNull value, int recLevel, RList positions, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
@@ -2139,7 +2139,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1100, guards = {"emptyValue", "!isVectorList"})
+    @Specialization(guards = {"emptyValue", "!isVectorList"})
     Object accessComplexEmptyValue(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RComplex position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -2148,7 +2148,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1101, guards = {"valueLongerThanOne", "!isVectorList"})
+    @Specialization(guards = {"valueLongerThanOne", "!isVectorList"})
     Object accessComplexValueLongerThanOne(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RComplex position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2157,17 +2157,17 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1102, guards = {"!valueLongerThanOne", "!emptyValue", "!isVectorList"})
+    @Specialization(guards = {"!valueLongerThanOne", "!emptyValue", "!isVectorList"})
     Object accessComplex(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RComplex position, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "complex");
     }
 
-    @Specialization(order = 1103)
+    @Specialization
     Object accessComplexList(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RComplex position, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "complex");
     }
 
-    @Specialization(order = 1104, guards = "!isVectorList")
+    @Specialization(guards = "!isVectorList")
     Object accessComplex(VirtualFrame frame, Object v, RNull value, int recLevel, RComplex position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2176,12 +2176,12 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1105)
+    @Specialization
     Object accessComplexList(VirtualFrame frame, Object v, RNull value, int recLevel, RComplex position, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "complex");
     }
 
-    @Specialization(order = 1200, guards = {"emptyValue", "!isVectorList"})
+    @Specialization(guards = {"emptyValue", "!isVectorList"})
     Object accessRawEmptyValue(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RRaw position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -2190,7 +2190,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1201, guards = {"valueLongerThanOne", "!isVectorList"})
+    @Specialization(guards = {"valueLongerThanOne", "!isVectorList"})
     Object accessRawValueLongerThanOne(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RRaw position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2199,17 +2199,17 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1202, guards = {"!valueLongerThanOne", "!emptyValue", "!isVectorList"})
+    @Specialization(guards = {"!valueLongerThanOne", "!emptyValue", "!isVectorList"})
     Object accessRaw(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RRaw position, RAbstractVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "raw");
     }
 
-    @Specialization(order = 1203)
+    @Specialization
     Object accessRawList(VirtualFrame frame, Object v, RAbstractVector value, int recLevel, RRaw position, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "raw");
     }
 
-    @Specialization(order = 1204, guards = "!isVectorList")
+    @Specialization(guards = "!isVectorList")
     Object accessRaw(VirtualFrame frame, Object v, RNull value, int recLevel, RRaw position, RAbstractVector vector) {
         if (!isSubset) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2218,7 +2218,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
         }
     }
 
-    @Specialization(order = 1205)
+    @Specialization
     Object accessRawList(VirtualFrame frame, Object v, RNull value, int recLevel, RRaw position, RList vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "raw");
     }
@@ -2474,7 +2474,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             this.isSubset = other.isSubset;
         }
 
-        @Specialization(order = 1)
+        @Specialization
         RList setData(VirtualFrame frame, RAbstractVector value, RList vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions, int accDstDimensions) {
             int[] srcDimensions = vector.getDimensions();
             RIntVector p = (RIntVector) positions[currentDimLevel - 1];
@@ -2506,7 +2506,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             return vector;
         }
 
-        @Specialization(order = 2)
+        @Specialization
         RIntVector setData(VirtualFrame frame, RAbstractIntVector value, RIntVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions,
                         int accDstDimensions) {
             int[] srcDimensions = vector.getDimensions();
@@ -2539,7 +2539,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             return vector;
         }
 
-        @Specialization(order = 3)
+        @Specialization
         RDoubleVector setData(VirtualFrame frame, RAbstractDoubleVector value, RDoubleVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions,
                         int accDstDimensions) {
             int[] srcDimensions = vector.getDimensions();
@@ -2572,7 +2572,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             return vector;
         }
 
-        @Specialization(order = 4)
+        @Specialization
         RLogicalVector setData(VirtualFrame frame, RAbstractLogicalVector value, RLogicalVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase,
                         int accSrcDimensions, int accDstDimensions) {
             int[] srcDimensions = vector.getDimensions();
@@ -2605,7 +2605,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             return vector;
         }
 
-        @Specialization(order = 5)
+        @Specialization
         RStringVector setData(VirtualFrame frame, RAbstractStringVector value, RStringVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions,
                         int accDstDimensions) {
             int[] srcDimensions = vector.getDimensions();
@@ -2638,7 +2638,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             return vector;
         }
 
-        @Specialization(order = 6)
+        @Specialization
         RComplexVector setData(VirtualFrame frame, RAbstractComplexVector value, RComplexVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase,
                         int accSrcDimensions, int accDstDimensions) {
             int[] srcDimensions = vector.getDimensions();
@@ -2671,7 +2671,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             return vector;
         }
 
-        @Specialization(order = 7)
+        @Specialization
         RRawVector setData(VirtualFrame frame, RAbstractRawVector value, RRawVector vector, Object[] positions, int currentDimLevel, int srcArrayBase, int dstArrayBase, int accSrcDimensions,
                         int accDstDimensions) {
             int[] srcDimensions = vector.getDimensions();
@@ -2739,17 +2739,17 @@ public abstract class UpdateArrayHelperNode extends RNode {
             this.isSubset = other.isSubset;
         }
 
-        @Specialization(order = 1, guards = {"!singlePosNegative", "!multiPos"})
+        @Specialization(guards = {"!singlePosNegative", "!multiPos"})
         public RAbstractIntVector doIntVector(RNull vector, RNull value, RAbstractIntVector positions) {
             return positions;
         }
 
-        @Specialization(order = 2, guards = {"!isPosVectorInt", "!multiPos"})
+        @Specialization(guards = {"!isPosVectorInt", "!multiPos"})
         public RAbstractVector doIntVector(RNull vector, RNull value, RAbstractVector positions) {
             return positions;
         }
 
-        @Specialization(order = 3, guards = {"!singlePosNegative", "multiPos"})
+        @Specialization(guards = {"!singlePosNegative", "multiPos"})
         public RAbstractIntVector doIntVectorMultiPos(VirtualFrame frame, RNull vector, RNull value, RAbstractIntVector positions) {
             if (isSubset) {
                 return positions;
@@ -2758,7 +2758,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 4, guards = {"!isPosVectorInt", "multiPos"})
+        @Specialization(guards = {"!isPosVectorInt", "multiPos"})
         public RAbstractVector doIntVectorMultiPos(VirtualFrame frame, RNull vector, RNull value, RAbstractVector positions) {
             if (isSubset) {
                 return positions;
@@ -2767,17 +2767,17 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 5, guards = {"!emptyValue", "!singlePosNegative", "!multiPos"})
+        @Specialization(guards = {"!emptyValue", "!singlePosNegative", "!multiPos"})
         public RAbstractIntVector doIntVector(RNull vector, RAbstractVector value, RAbstractIntVector positions) {
             return positions;
         }
 
-        @Specialization(order = 6, guards = {"!emptyValue", "!isPosVectorInt", "!multiPos"})
+        @Specialization(guards = {"!emptyValue", "!isPosVectorInt", "!multiPos"})
         public RAbstractVector doIntVector(RNull vector, RAbstractVector value, RAbstractVector positions) {
             return positions;
         }
 
-        @Specialization(order = 7, guards = {"!emptyValue", "!singlePosNegative", "multiPos"})
+        @Specialization(guards = {"!emptyValue", "!singlePosNegative", "multiPos"})
         public RAbstractIntVector doIntVectorMultiPos(VirtualFrame frame, RNull vector, RAbstractVector value, RAbstractIntVector positions) {
             if (isSubset) {
                 return positions;
@@ -2786,7 +2786,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 8, guards = {"!emptyValue", "!isPosVectorInt", "multiPos"})
+        @Specialization(guards = {"!emptyValue", "!isPosVectorInt", "multiPos"})
         public RAbstractVector doIntVectorMultiPos(VirtualFrame frame, RNull vector, RAbstractVector value, RAbstractVector positions) {
             if (isSubset) {
                 return positions;
@@ -2795,12 +2795,12 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 9, guards = {"!emptyValue", "singlePosNegative"})
+        @Specialization(guards = {"!emptyValue", "singlePosNegative"})
         public RAbstractIntVector doIntVectorNegative(VirtualFrame frame, RNull vector, RAbstractVector value, RAbstractIntVector positions) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
         }
 
-        @Specialization(order = 10, guards = "emptyValue")
+        @Specialization(guards = "emptyValue")
         public RAbstractVector doIntVectorEmptyValue(VirtualFrame frame, RNull vector, RAbstractVector value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -2809,7 +2809,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 20, guards = {"emptyValue", "!isVectorList"})
+        @Specialization(guards = {"emptyValue", "!isVectorList"})
         Object accessComplexEmptyValue(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RComplex position) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -2818,7 +2818,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 21, guards = {"valueLongerThanOne", "!isVectorList"})
+        @Specialization(guards = {"valueLongerThanOne", "!isVectorList"})
         Object accessComplexValueLongerThanOne(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RComplex position) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2827,22 +2827,22 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 22, guards = {"!valueLongerThanOne", "!emptyValue", "!isVectorList"})
+        @Specialization(guards = {"!valueLongerThanOne", "!emptyValue", "!isVectorList"})
         Object accessComplex(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RComplex position) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "complex");
         }
 
-        @Specialization(order = 23)
+        @Specialization
         Object accessComplexList(VirtualFrame frame, RList vector, RAbstractVector value, RComplex position) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "complex");
         }
 
-        @Specialization(order = 24)
+        @Specialization
         Object accessComplexList(VirtualFrame frame, RList vector, RNull value, RComplex position) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "complex");
         }
 
-        @Specialization(order = 25, guards = "!isVectorList")
+        @Specialization(guards = "!isVectorList")
         Object accessComplex(VirtualFrame frame, RAbstractVector vector, RNull value, RComplex position) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2851,7 +2851,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 30, guards = {"emptyValue", "!isVectorList"})
+        @Specialization(guards = {"emptyValue", "!isVectorList"})
         Object accessRawEmptyValue(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RRaw position) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -2860,7 +2860,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 31, guards = {"valueLongerThanOne", "!isVectorList"})
+        @Specialization(guards = {"valueLongerThanOne", "!isVectorList"})
         Object accessRawValueLongerThanOne(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RRaw position) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2869,22 +2869,22 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 32, guards = {"!valueLongerThanOne", "!emptyValue", "!isVectorList"})
+        @Specialization(guards = {"!valueLongerThanOne", "!emptyValue", "!isVectorList"})
         Object accessRaw(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RRaw position) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "raw");
         }
 
-        @Specialization(order = 33)
+        @Specialization
         Object accessRawList(VirtualFrame frame, RList vector, RAbstractVector value, RRaw position) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "raw");
         }
 
-        @Specialization(order = 34)
+        @Specialization
         Object accessRawList(VirtualFrame frame, RList vector, RNull value, RRaw position) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "raw");
         }
 
-        @Specialization(order = 35, guards = "!isVectorList")
+        @Specialization(guards = "!isVectorList")
         Object accessRaw(VirtualFrame frame, RAbstractVector vector, RNull value, RRaw position) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2893,7 +2893,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 100, guards = {"noPosition", "emptyValue"})
+        @Specialization(guards = {"noPosition", "emptyValue"})
         RAbstractVector accessListEmptyPosEmptyValueList(VirtualFrame frame, RList vector, RAbstractVector value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -2904,7 +2904,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 101, guards = {"noPosition", "emptyValue", "!isVectorList"})
+        @Specialization(guards = {"noPosition", "emptyValue", "!isVectorList"})
         RAbstractVector accessListEmptyPosEmptyValue(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -2915,7 +2915,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 102, guards = {"noPosition", "valueLengthOne"})
+        @Specialization(guards = {"noPosition", "valueLengthOne"})
         RAbstractVector accessListEmptyPosValueLengthOne(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -2926,7 +2926,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 103, guards = {"noPosition", "valueLongerThanOne"})
+        @Specialization(guards = {"noPosition", "valueLongerThanOne"})
         RAbstractVector accessListEmptyPosValueLongerThanOneList(VirtualFrame frame, RList vector, RAbstractVector value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -2937,7 +2937,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 104, guards = {"noPosition", "valueLongerThanOne", "!isVectorList"})
+        @Specialization(guards = {"noPosition", "valueLongerThanOne", "!isVectorList"})
         RAbstractVector accessListEmptyPosValueLongerThanOne(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2948,7 +2948,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 105, guards = "noPosition")
+        @Specialization(guards = "noPosition")
         RAbstractVector accessListEmptyPosEmptyValueList(VirtualFrame frame, RList vector, RNull value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -2959,7 +2959,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 106, guards = {"noPosition", "!isVectorList"})
+        @Specialization(guards = {"noPosition", "!isVectorList"})
         RAbstractVector accessListEmptyPosEmptyValue(VirtualFrame frame, RAbstractVector vector, RNull value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -2970,7 +2970,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 110, guards = {"onePosition", "emptyValue", "!isPosVectorInt"})
+        @Specialization(guards = {"onePosition", "emptyValue", "!isPosVectorInt"})
         RAbstractVector accessListOnePosEmptyValueList(VirtualFrame frame, RList vector, RAbstractVector value, RAbstractVector positions) {
             if (positions.getElementClass() == Object.class) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
@@ -2979,7 +2979,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 111, guards = {"onePosition", "emptyValue", "!firstPosZero"})
+        @Specialization(guards = {"onePosition", "emptyValue", "!firstPosZero"})
         RAbstractVector accessListOnePosEmptyValueList(VirtualFrame frame, RList vector, RAbstractVector value, RAbstractIntVector positions) {
             if (positions.getElementClass() == Object.class) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
@@ -2988,7 +2988,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 112, guards = {"onePosition", "emptyValue", "firstPosZero"})
+        @Specialization(guards = {"onePosition", "emptyValue", "firstPosZero"})
         RAbstractVector accessListOnePosZeroEmptyValueList(VirtualFrame frame, RList vector, RAbstractVector value, RAbstractIntVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -2997,7 +2997,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 113, guards = {"onePosition", "emptyValue", "!isVectorList", "!isPosVectorInt"})
+        @Specialization(guards = {"onePosition", "emptyValue", "!isVectorList", "!isPosVectorInt"})
         RAbstractVector accessListOnePosEmptyValue(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -3008,7 +3008,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 114, guards = {"onePosition", "emptyValue", "!isVectorList", "!firstPosZero"})
+        @Specialization(guards = {"onePosition", "emptyValue", "!isVectorList", "!firstPosZero"})
         RAbstractVector accessListOnePosEmptyValue(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractIntVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -3017,7 +3017,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 115, guards = {"onePosition", "emptyValue", "!isVectorList", "firstPosZero"})
+        @Specialization(guards = {"onePosition", "emptyValue", "!isVectorList", "firstPosZero"})
         RAbstractVector accessListOnePosZeroEmptyValue(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractIntVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -3026,7 +3026,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 116, guards = {"onePosition", "valueLengthOne", "!isPosVectorInt"})
+        @Specialization(guards = {"onePosition", "valueLengthOne", "!isPosVectorInt"})
         RAbstractVector accessListOnePosValueLengthOne(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractVector positions) {
             if (positions.getElementClass() == Object.class) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
@@ -3035,12 +3035,12 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 117, guards = {"onePosition", "valueLengthOne", "!firstPosZero"})
+        @Specialization(guards = {"onePosition", "valueLengthOne", "!firstPosZero"})
         RAbstractVector accessListOnePosValueLengthOne(RAbstractVector vector, RAbstractVector value, RAbstractIntVector positions) {
             return positions;
         }
 
-        @Specialization(order = 118, guards = {"onePosition", "valueLengthOne", "firstPosZero"})
+        @Specialization(guards = {"onePosition", "valueLengthOne", "firstPosZero"})
         RAbstractVector accessListOnePosZeroValueLengthOne(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractIntVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -3049,7 +3049,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 119, guards = {"onePosition", "valueLongerThanOne", "!isPosVectorInt"})
+        @Specialization(guards = {"onePosition", "valueLongerThanOne", "!isPosVectorInt"})
         RAbstractVector accessListOnePosValueLongerThanOneList(VirtualFrame frame, RList vector, RAbstractVector value, RAbstractVector positions) {
             if (positions.getElementClass() == Object.class) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
@@ -3058,7 +3058,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 120, guards = {"onePosition", "valueLongerThanOne", "!firstPosZero"})
+        @Specialization(guards = {"onePosition", "valueLongerThanOne", "!firstPosZero"})
         RAbstractVector accessListOnePosValueLongerThanOneList(VirtualFrame frame, RList vector, RAbstractVector value, RAbstractIntVector positions) {
             if (positions.getElementClass() == Object.class) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
@@ -3067,7 +3067,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 121, guards = {"onePosition", "valueLongerThanOne", "firstPosZero"})
+        @Specialization(guards = {"onePosition", "valueLongerThanOne", "firstPosZero"})
         RAbstractVector accessListOnePosZeroValueLongerThanOneList(VirtualFrame frame, RList vector, RAbstractVector value, RAbstractIntVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -3076,7 +3076,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 122, guards = {"onePosition", "valueLongerThanOne", "!isVectorList", "!isPosVectorInt"})
+        @Specialization(guards = {"onePosition", "valueLongerThanOne", "!isVectorList", "!isPosVectorInt"})
         RAbstractVector accessListOnePosValueLongerThanOne(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -3087,7 +3087,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 123, guards = {"onePosition", "valueLongerThanOne", "!isVectorList", "!firstPosZero"})
+        @Specialization(guards = {"onePosition", "valueLongerThanOne", "!isVectorList", "!firstPosZero"})
         RAbstractVector accessListOnePosValueLongerThanOne(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractIntVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -3096,7 +3096,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 124, guards = {"onePosition", "valueLongerThanOne", "!isVectorList", "firstPosZero"})
+        @Specialization(guards = {"onePosition", "valueLongerThanOne", "!isVectorList", "firstPosZero"})
         RAbstractVector accessListOnePosZeroValueLongerThanOne(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractIntVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -3105,7 +3105,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 125, guards = {"onePosition", "!isPosVectorInt"})
+        @Specialization(guards = {"onePosition", "!isPosVectorInt"})
         RAbstractVector accessListOnePosEmptyValueList(VirtualFrame frame, RList vector, RNull value, RAbstractVector positions) {
             if (positions.getElementClass() == Object.class) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
@@ -3114,7 +3114,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 126, guards = {"onePosition", "!firstPosZero"})
+        @Specialization(guards = {"onePosition", "!firstPosZero"})
         RAbstractVector accessListOnePosEmptyValueList(VirtualFrame frame, RList vector, RNull value, RAbstractIntVector positions) {
             if (positions.getElementClass() == Object.class) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_SUBSCRIPT_TYPE, "list");
@@ -3123,7 +3123,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 127, guards = {"onePosition", "firstPosZero"})
+        @Specialization(guards = {"onePosition", "firstPosZero"})
         RAbstractVector accessListOnePosZeroEmptyValueList(VirtualFrame frame, RList vector, RNull value, RAbstractIntVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_LESS_1);
@@ -3132,7 +3132,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 128, guards = {"onePosition", "!isVectorList", "!isPosVectorInt"})
+        @Specialization(guards = {"onePosition", "!isVectorList", "!isPosVectorInt"})
         RAbstractVector accessListOnePosValueLongerThanOne(VirtualFrame frame, RAbstractVector vector, RNull value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -3143,7 +3143,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 129, guards = {"onePosition", "!isVectorList", "!firstPosZero"})
+        @Specialization(guards = {"onePosition", "!isVectorList", "!firstPosZero"})
         RAbstractVector accessListOnePosValueLongerThanOne(VirtualFrame frame, RAbstractVector vector, RNull value, RAbstractIntVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -3152,7 +3152,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 130, guards = {"onePosition", "!isVectorList", "firstPosZero"})
+        @Specialization(guards = {"onePosition", "!isVectorList", "firstPosZero"})
         RAbstractVector accessListOnePosZeroValueLongerThanOne(VirtualFrame frame, RAbstractVector vector, RNull value, RAbstractIntVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -3161,7 +3161,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 140, guards = "multiPos")
+        @Specialization(guards = "multiPos")
         RAbstractVector accessListTwoPosEmptyValueList(VirtualFrame frame, RList vector, RAbstractVector value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
@@ -3172,7 +3172,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 141, guards = {"multiPos", "emptyValue", "!isVectorList"})
+        @Specialization(guards = {"multiPos", "emptyValue", "!isVectorList"})
         RAbstractVector accessListTwoPosEmptyValue(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.REPLACEMENT_0);
@@ -3183,7 +3183,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 142, guards = {"multiPos", "valueLengthOne", "!isVectorList"})
+        @Specialization(guards = {"multiPos", "valueLengthOne", "!isVectorList"})
         RAbstractVector accessListTwoPosValueLengthOne(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
@@ -3194,7 +3194,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 143, guards = {"multiPos", "valueLongerThanOne", "!isVectorList"})
+        @Specialization(guards = {"multiPos", "valueLongerThanOne", "!isVectorList"})
         RAbstractVector accessListTwoPosValueLongerThanOne(VirtualFrame frame, RAbstractVector vector, RAbstractVector value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -3205,7 +3205,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 144, guards = "multiPos")
+        @Specialization(guards = "multiPos")
         RAbstractVector accessListTwoPosEmptyValueList(VirtualFrame frame, RList vector, RNull value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SELECT_MORE_1);
@@ -3216,7 +3216,7 @@ public abstract class UpdateArrayHelperNode extends RNode {
             }
         }
 
-        @Specialization(order = 145, guards = {"multiPos", "!isVectorList"})
+        @Specialization(guards = {"multiPos", "!isVectorList"})
         RAbstractVector accessListTwoPosValueLongerThanOne(VirtualFrame frame, RAbstractVector vector, RNull value, RAbstractVector positions) {
             if (!isSubset) {
                 throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.MORE_SUPPLIED_REPLACE);
@@ -3390,257 +3390,257 @@ public abstract class UpdateArrayHelperNode extends RNode {
             return castList.executeCast(frame, vector);
         }
 
-        @Specialization(order = 10)
+        @Specialization
         RFunction coerce(VirtualFrame frame, Object value, RFunction vector, Object operand) {
             return vector;
         }
 
         // int vector value
 
-        @Specialization(order = 100)
+        @Specialization
         RAbstractIntVector coerce(VirtualFrame frame, RAbstractIntVector value, RAbstractIntVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 101)
+        @Specialization
         RAbstractDoubleVector coerce(VirtualFrame frame, RAbstractIntVector value, RAbstractDoubleVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 102)
+        @Specialization
         RAbstractIntVector coerce(VirtualFrame frame, RAbstractIntVector value, RAbstractLogicalVector vector, Object operand) {
             return (RIntVector) castInteger(frame, vector);
         }
 
-        @Specialization(order = 103)
+        @Specialization
         RAbstractStringVector coerce(VirtualFrame frame, RAbstractIntVector value, RAbstractStringVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 104)
+        @Specialization
         RAbstractComplexVector coerce(VirtualFrame frame, RAbstractIntVector value, RAbstractComplexVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 105)
+        @Specialization
         RIntVector coerce(VirtualFrame frame, RAbstractIntVector value, RAbstractRawVector vector, Object operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBASSIGN_TYPE_FIX, "integer", "raw");
         }
 
-        @Specialization(order = 107)
+        @Specialization
         RList coerce(VirtualFrame frame, RAbstractIntVector value, RList vector, Object operand) {
             return vector;
         }
 
         // double vector value
 
-        @Specialization(order = 200)
+        @Specialization
         RDoubleVector coerce(VirtualFrame frame, RAbstractDoubleVector value, RAbstractIntVector vector, Object operand) {
             return (RDoubleVector) castDouble(frame, vector);
         }
 
-        @Specialization(order = 201)
+        @Specialization
         RAbstractDoubleVector coerce(VirtualFrame frame, RAbstractDoubleVector value, RAbstractDoubleVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 202)
+        @Specialization
         RDoubleVector coerce(VirtualFrame frame, RAbstractDoubleVector value, RAbstractLogicalVector vector, Object operand) {
             return (RDoubleVector) castDouble(frame, vector);
         }
 
-        @Specialization(order = 203)
+        @Specialization
         RAbstractStringVector coerce(VirtualFrame frame, RAbstractDoubleVector value, RAbstractStringVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 204)
+        @Specialization
         RAbstractComplexVector coerce(VirtualFrame frame, RAbstractDoubleVector value, RAbstractComplexVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 205)
+        @Specialization
         RDoubleVector coerce(VirtualFrame frame, RAbstractDoubleVector value, RAbstractRawVector vector, Object operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBASSIGN_TYPE_FIX, "double", "raw");
         }
 
-        @Specialization(order = 207)
+        @Specialization
         RList coerce(VirtualFrame frame, RAbstractDoubleVector value, RList vector, Object operand) {
             return vector;
         }
 
         // logical vector value
 
-        @Specialization(order = 300)
+        @Specialization
         RAbstractIntVector coerce(VirtualFrame frame, RAbstractLogicalVector value, RAbstractIntVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 301)
+        @Specialization
         RAbstractDoubleVector coerce(VirtualFrame frame, RAbstractLogicalVector value, RAbstractDoubleVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 302)
+        @Specialization
         RAbstractLogicalVector coerce(VirtualFrame frame, RAbstractLogicalVector value, RAbstractLogicalVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 303)
+        @Specialization
         RAbstractStringVector coerce(VirtualFrame frame, RAbstractLogicalVector value, RAbstractStringVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 304)
+        @Specialization
         RAbstractComplexVector coerce(VirtualFrame frame, RAbstractLogicalVector value, RAbstractComplexVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 305)
+        @Specialization
         RLogicalVector coerce(VirtualFrame frame, RAbstractLogicalVector value, RAbstractRawVector vector, Object operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBASSIGN_TYPE_FIX, "logical", "raw");
         }
 
-        @Specialization(order = 307)
+        @Specialization
         RList coerce(VirtualFrame frame, RAbstractLogicalVector value, RList vector, Object operand) {
             return vector;
         }
 
         // string vector value
 
-        @Specialization(order = 400)
+        @Specialization
         RStringVector coerce(VirtualFrame frame, RAbstractStringVector value, RAbstractIntVector vector, Object operand) {
             return (RStringVector) castString(frame, vector);
         }
 
-        @Specialization(order = 401)
+        @Specialization
         RStringVector coerce(VirtualFrame frame, RAbstractStringVector value, RAbstractDoubleVector vector, Object operand) {
             return (RStringVector) castString(frame, vector);
         }
 
-        @Specialization(order = 402)
+        @Specialization
         RStringVector coerce(VirtualFrame frame, RAbstractStringVector value, RAbstractLogicalVector vector, Object operand) {
             return (RStringVector) castString(frame, vector);
         }
 
-        @Specialization(order = 403)
+        @Specialization
         RAbstractStringVector coerce(VirtualFrame frame, RAbstractStringVector value, RAbstractStringVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 404)
+        @Specialization
         RStringVector coerce(VirtualFrame frame, RAbstractStringVector value, RAbstractComplexVector vector, Object operand) {
             return (RStringVector) castString(frame, vector);
         }
 
-        @Specialization(order = 405)
+        @Specialization
         RStringVector coerce(VirtualFrame frame, RAbstractStringVector value, RAbstractRawVector vector, Object operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBASSIGN_TYPE_FIX, "character", "raw");
         }
 
-        @Specialization(order = 407)
+        @Specialization
         RList coerce(VirtualFrame frame, RAbstractStringVector value, RList vector, Object operand) {
             return vector;
         }
 
         // complex vector value
 
-        @Specialization(order = 500)
+        @Specialization
         RComplexVector coerce(VirtualFrame frame, RAbstractComplexVector value, RAbstractIntVector vector, Object operand) {
             return (RComplexVector) castComplex(frame, vector);
         }
 
-        @Specialization(order = 501)
+        @Specialization
         RComplexVector coerce(VirtualFrame frame, RAbstractComplexVector value, RAbstractDoubleVector vector, Object operand) {
             return (RComplexVector) castComplex(frame, vector);
         }
 
-        @Specialization(order = 502)
+        @Specialization
         RComplexVector coerce(VirtualFrame frame, RAbstractComplexVector value, RAbstractLogicalVector vector, Object operand) {
             return (RComplexVector) castComplex(frame, vector);
         }
 
-        @Specialization(order = 503)
+        @Specialization
         RAbstractStringVector coerce(VirtualFrame frame, RAbstractComplexVector value, RAbstractStringVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 504)
+        @Specialization
         RAbstractComplexVector coerce(VirtualFrame frame, RAbstractComplexVector value, RAbstractComplexVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 505)
+        @Specialization
         RComplexVector coerce(VirtualFrame frame, RAbstractComplexVector value, RAbstractRawVector vector, Object operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBASSIGN_TYPE_FIX, "complex", "raw");
         }
 
-        @Specialization(order = 507)
+        @Specialization
         RList coerce(VirtualFrame frame, RAbstractComplexVector value, RList vector, Object operand) {
             return vector;
         }
 
         // raw vector value
 
-        @Specialization(order = 605)
+        @Specialization
         RAbstractRawVector coerce(VirtualFrame frame, RAbstractRawVector value, RAbstractRawVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 606, guards = "!isVectorList")
+        @Specialization(guards = "!isVectorList")
         RRawVector coerce(VirtualFrame frame, RAbstractRawVector value, RAbstractVector vector, Object operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBASSIGN_TYPE_FIX, "raw", RRuntime.classToString(vector.getElementClass(), false));
         }
 
-        @Specialization(order = 607)
+        @Specialization
         RList coerce(VirtualFrame frame, RAbstractRawVector value, RList vector, Object operand) {
             return vector;
         }
 
         // list vector value
 
-        @Specialization(order = 707)
+        @Specialization
         RList coerce(VirtualFrame frame, RList value, RList vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 708, guards = "!isVectorList")
+        @Specialization(guards = "!isVectorList")
         RList coerce(VirtualFrame frame, RList value, RAbstractVector vector, Object operand) {
             return (RList) castList(frame, vector);
         }
 
         // data frame value
 
-        @Specialization(order = 809)
+        @Specialization
         RList coerce(VirtualFrame frame, RDataFrame value, RAbstractVector vector, Object operand) {
             return (RList) castList(frame, vector);
         }
 
         // function vector value
 
-        @Specialization(order = 906)
+        @Specialization
         RFunction coerce(VirtualFrame frame, RFunction value, RAbstractVector vector, Object operand) {
             throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.SUBASSIGN_TYPE_FIX, "closure", RRuntime.classToString(vector.getElementClass(), false));
         }
 
         // in all other cases, simply return the vector (no coercion)
 
-        @Specialization(order = 1000)
+        @Specialization
         RNull coerce(RNull value, RNull vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 1001)
+        @Specialization
         RNull coerce(RAbstractVector value, RNull vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 1002)
+        @Specialization
         RAbstractVector coerce(RNull value, RAbstractVector vector, Object operand) {
             return vector;
         }
 
-        @Specialization(order = 1003)
+        @Specialization
         RAbstractVector coerce(RList value, RAbstractVector vector, Object operand) {
             return vector;
         }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateFieldNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateFieldNode.java
index b1341bda12..8cb69e43d3 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateFieldNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/UpdateFieldNode.java
@@ -45,7 +45,7 @@ public abstract class UpdateFieldNode extends RNode {
 
     @Child private CastListNode castList;
 
-    @Specialization(order = 1)
+    @Specialization
     public Object updateField(RList object, Object value) {
         int index = object.getElementIndexByName(getField());
         if (index == -1) {
@@ -81,7 +81,7 @@ public abstract class UpdateFieldNode extends RNode {
         return result;
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public Object updateField(VirtualFrame frame, REnvironment env, Object value) {
         // reference semantics for environments
         try {
@@ -92,7 +92,7 @@ public abstract class UpdateFieldNode extends RNode {
         return env;
     }
 
-    @Specialization(order = 1000)
+    @Specialization
     public Object updateField(VirtualFrame frame, RAbstractVector object, Object value) {
         if (castList == null) {
             CompilerDirectives.transferToInterpreterAndInvalidate();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/VectorPositionCast.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/VectorPositionCast.java
index 17fa76e15d..f83bf9d618 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/VectorPositionCast.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/VectorPositionCast.java
@@ -42,7 +42,7 @@ public abstract class VectorPositionCast extends RNode {
 
     private final NACheck positionNACheck;
 
-    @Specialization(order = 1)
+    @Specialization
     public int doDoublePosition(double operand) {
         positionNACheck.enable(operand);
         if (positionNACheck.check(operand)) {
@@ -51,13 +51,13 @@ public abstract class VectorPositionCast extends RNode {
         return (int) operand;
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public int doInt(int operand) {
         positionNACheck.enable(operand);
         return operand;
     }
 
-    @Specialization(order = 4)
+    @Specialization
     public byte doBoolean(byte operand) {
         positionNACheck.enable(operand);
         return operand;
@@ -87,27 +87,27 @@ public abstract class VectorPositionCast extends RNode {
         return operand.getStart() == 0 && operand.getStride() > 0;
     }
 
-    @Specialization(order = 5, guards = "greaterEqualOneSequence")
+    @Specialization(guards = "greaterEqualOneSequence")
     public RIntSequence doIntVectorPositiveSequence(RIntSequence operand) {
         return operand;
     }
 
-    @Specialization(order = 6, guards = "startingZeroSequence")
+    @Specialization(guards = "startingZeroSequence")
     public RIntSequence doIntVectorPositiveIncludingZeroSequence(RIntSequence operand) {
         return operand.removeFirst();
     }
 
-    @Specialization(order = 7, guards = {"!greaterEqualOneSequence", "!startingZeroSequence"})
+    @Specialization(guards = {"!greaterEqualOneSequence", "!startingZeroSequence"})
     public RIntVector doIntVector(RIntSequence operand) {
         return (RIntVector) operand.createVector();
     }
 
-    @Specialization(order = 8, guards = "canConvertIntSequence")
+    @Specialization(guards = "canConvertIntSequence")
     public RIntSequence doDoubleSequenceToIntConverstion(RDoubleSequence operand) {
         return RDataFactory.createIntSequence((int) operand.getStart(), (int) operand.getStride(), operand.getLength());
     }
 
-    @Specialization(order = 9, guards = "!canConvertIntSequence")
+    @Specialization(guards = "!canConvertIntSequence")
     public RIntVector doDoubleSequence(@SuppressWarnings("unused") RDoubleSequence operand) {
         throw Utils.nyi();
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryArithmeticNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryArithmeticNode.java
index e71e828377..94ee877645 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryArithmeticNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryArithmeticNode.java
@@ -80,79 +80,79 @@ public abstract class BinaryArithmeticNode extends BinaryNode {
         return BinaryArithmeticNodeFactory.create(arithmetic, null, new RNode[2], null, null);
     }
 
-    @Specialization(order = 0)
+    @Specialization
     public Object doUnary(VirtualFrame frame, Object left, @SuppressWarnings("unused") RMissing right) {
         return doUnaryOp(frame, left);
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public RDoubleVector doLeftNull(RNull left, RAbstractIntVector right) {
         return doRightNull(right, left);
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public RDoubleVector doLeftNull(RNull left, RAbstractDoubleVector right) {
         return doRightNull(right, left);
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public RDoubleVector doLeftNull(RNull left, RAbstractLogicalVector right) {
         return doRightNull(right, left);
     }
 
-    @Specialization(order = 4)
+    @Specialization
     public RComplexVector doLeftNull(RNull left, RAbstractComplexVector right) {
         return doRightNull(right, left);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 5)
+    @Specialization
     public RDoubleVector doRightNull(RAbstractIntVector left, RNull right) {
         return RDataFactory.createEmptyDoubleVector();
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 6)
+    @Specialization
     public RDoubleVector doRightNull(RAbstractDoubleVector left, RNull right) {
         return RDataFactory.createEmptyDoubleVector();
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 7)
+    @Specialization
     public RDoubleVector doRightNull(RAbstractLogicalVector left, RNull right) {
         return RDataFactory.createEmptyDoubleVector();
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 8)
+    @Specialization
     public RComplexVector doRightNull(RAbstractComplexVector left, RNull right) {
         return RDataFactory.createEmptyComplexVector();
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 9)
+    @Specialization
     public RDoubleVector doRightNull(RNull left, RNull right) {
         return RDataFactory.createEmptyDoubleVector();
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public Object doLeftString(VirtualFrame frame, RAbstractStringVector left, Object right) {
         return doRightString(frame, right, left);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 11)
+    @Specialization
     public Object doRightString(VirtualFrame frame, Object left, RAbstractStringVector right) {
         throw RError.error(frame, this.getSourceSection(), RError.Message.NON_NUMERIC_BINARY);
     }
 
-    @Specialization(order = 15)
+    @Specialization
     public Object doLeftRaw(VirtualFrame frame, RAbstractRawVector left, Object right) {
         return doRightRaw(frame, right, left);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 16)
+    @Specialization
     public Object doRightRaw(VirtualFrame frame, Object left, RAbstractRawVector right) {
         throw RError.error(frame, this.getSourceSection(), RError.Message.NON_NUMERIC_BINARY);
     }
@@ -163,108 +163,108 @@ public abstract class BinaryArithmeticNode extends BinaryNode {
 
     // int
 
-    @Specialization(order = 20, guards = {"supportsIntResult"})
+    @Specialization(guards = {"supportsIntResult"})
     public int doInt(int left, int right) {
         return performArithmeticEnableNACheck(left, right);
     }
 
-    @Specialization(order = 21)
+    @Specialization
     public double doInt(int left, double right) {
         return performArithmeticDoubleEnableNACheck(RRuntime.int2double(left), right);
     }
 
-    @Specialization(order = 22)
+    @Specialization
     public double doInt(double left, int right) {
         return performArithmeticDoubleEnableNACheck(left, RRuntime.int2double(right));
     }
 
-    @Specialization(order = 23, guards = {"supportsIntResult"})
+    @Specialization(guards = {"supportsIntResult"})
     public int doInt(int left, byte right) {
         return performArithmeticEnableNACheck(left, RRuntime.logical2int(right));
     }
 
-    @Specialization(order = 24, guards = {"supportsIntResult"})
+    @Specialization(guards = {"supportsIntResult"})
     public int doInt(byte left, int right) {
         return performArithmeticEnableNACheck(RRuntime.logical2int(left), right);
     }
 
-    @Specialization(order = 27)
+    @Specialization
     public RComplex doInt(VirtualFrame frame, int left, RComplex right) {
         return performArithmeticComplexEnableNACheck(frame, RRuntime.int2complex(left), right);
     }
 
-    @Specialization(order = 28)
+    @Specialization
     public RComplex doInt(VirtualFrame frame, RComplex left, int right) {
         return performArithmeticComplexEnableNACheck(frame, left, RRuntime.int2complex(right));
     }
 
-    @Specialization(order = 30, guards = {"!supportsIntResult"})
+    @Specialization(guards = {"!supportsIntResult"})
     public double doIntDouble(int left, int right) {
         return performArithmeticIntIntDoubleEnableNACheck(left, right);
     }
 
-    @Specialization(order = 33, guards = {"!supportsIntResult"})
+    @Specialization(guards = {"!supportsIntResult"})
     public double doIntDouble(int left, byte right) {
         return performArithmeticIntIntDoubleEnableNACheck(left, RRuntime.logical2int(right));
     }
 
-    @Specialization(order = 34, guards = {"!supportsIntResult"})
+    @Specialization(guards = {"!supportsIntResult"})
     public double doIntDouble(byte left, int right) {
         return performArithmeticIntIntDoubleEnableNACheck(RRuntime.logical2int(left), right);
     }
 
     // double
 
-    @Specialization(order = 40)
+    @Specialization
     public double doDouble(double left, double right) {
         return performArithmeticDoubleEnableNACheck(left, right);
     }
 
-    @Specialization(order = 42)
+    @Specialization
     public double doDouble(double left, byte right) {
         return performArithmeticDoubleEnableNACheck(left, RRuntime.logical2double(right));
     }
 
-    @Specialization(order = 44)
+    @Specialization
     public double doDouble(byte left, double right) {
         return performArithmeticDoubleEnableNACheck(RRuntime.logical2double(left), right);
     }
 
-    @Specialization(order = 50)
+    @Specialization
     public RComplex doDouble(VirtualFrame frame, double left, RComplex right) {
         return performArithmeticComplexEnableNACheck(frame, RRuntime.double2complex(left), right);
     }
 
-    @Specialization(order = 52)
+    @Specialization
     public RComplex doDouble(VirtualFrame frame, RComplex left, double right) {
         return performArithmeticComplexEnableNACheck(frame, left, RRuntime.double2complex(right));
     }
 
     // logical
 
-    @Specialization(order = 60, guards = {"supportsIntResult"})
+    @Specialization(guards = {"supportsIntResult"})
     public int doLogical(byte left, byte right) {
         return performArithmeticEnableNACheck(RRuntime.logical2int(left), RRuntime.logical2int(right));
     }
 
-    @Specialization(order = 66)
+    @Specialization
     public RComplex doLogical(VirtualFrame frame, byte left, RComplex right) {
         return performArithmeticComplexEnableNACheck(frame, RRuntime.logical2complex(left), right);
     }
 
-    @Specialization(order = 68)
+    @Specialization
     public RComplex doLogical(VirtualFrame frame, RComplex left, byte right) {
         return performArithmeticComplexEnableNACheck(frame, left, RRuntime.logical2complex(right));
     }
 
-    @Specialization(order = 70, guards = {"!supportsIntResult"})
+    @Specialization(guards = {"!supportsIntResult"})
     public double doLogicalDouble(byte left, byte right) {
         return performArithmeticIntIntDoubleEnableNACheck(RRuntime.logical2int(left), RRuntime.logical2int(right));
     }
 
     // complex
 
-    @Specialization(order = 150)
+    @Specialization
     public RComplex doComplex(VirtualFrame frame, RComplex left, RComplex right) {
         return performArithmeticComplexEnableNACheck(frame, left, right);
     }
@@ -274,215 +274,215 @@ public abstract class BinaryArithmeticNode extends BinaryNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1000, guards = "differentDimensions")
+    @Specialization(guards = "differentDimensions")
     public RLogicalVector doIntVectorDifferentLength(VirtualFrame frame, RAbstractVector left, RAbstractVector right) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.NON_CONFORMABLE_ARRAYS);
     }
 
     // int vector and vectors
 
-    @Specialization(order = 1001, guards = {"!areSameLength", "supportsIntResult"})
+    @Specialization(guards = {"!areSameLength", "supportsIntResult"})
     public RIntVector doIntVectorDifferentLength(RAbstractIntVector left, RAbstractIntVector right) {
         return performIntVectorOpDifferentLength(left, right);
     }
 
-    @Specialization(order = 1002, guards = {"areSameLength", "supportsIntResult"})
+    @Specialization(guards = {"areSameLength", "supportsIntResult"})
     public RIntVector doIntVectorSameLength(RAbstractIntVector left, RAbstractIntVector right) {
         return performIntVectorOpSameLength(left, right);
     }
 
-    @Specialization(order = 1003, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RDoubleVector doIntVectorDifferentLength(RAbstractIntVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpDifferentLength(RClosures.createIntToDoubleVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1004, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RDoubleVector doIntVectorSameLength(RAbstractIntVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpSameLength(RClosures.createIntToDoubleVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1005, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RDoubleVector doIntVectorDifferentLength(RAbstractDoubleVector left, RAbstractIntVector right) {
         return performDoubleVectorOpDifferentLength(left, RClosures.createIntToDoubleVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1006, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RDoubleVector doIntVectorIntVectorSameLength(RAbstractDoubleVector left, RAbstractIntVector right) {
         return performDoubleVectorOpSameLength(left, RClosures.createIntToDoubleVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1007, guards = {"!areSameLength", "supportsIntResult"})
+    @Specialization(guards = {"!areSameLength", "supportsIntResult"})
     public RIntVector doIntVectorDifferentLength(RAbstractIntVector left, RAbstractLogicalVector right) {
         return performIntVectorOpDifferentLength(left, RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1008, guards = {"areSameLength", "supportsIntResult"})
+    @Specialization(guards = {"areSameLength", "supportsIntResult"})
     public RIntVector doIntVectorSameLength(RAbstractIntVector left, RAbstractLogicalVector right) {
         return performIntVectorOpSameLength(left, RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1009, guards = {"!areSameLength", "supportsIntResult"})
+    @Specialization(guards = {"!areSameLength", "supportsIntResult"})
     public RIntVector doIntVectorDifferentLength(RAbstractLogicalVector left, RAbstractIntVector right) {
         return performIntVectorOpDifferentLength(RClosures.createLogicalToIntVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1010, guards = {"areSameLength", "supportsIntResult"})
+    @Specialization(guards = {"areSameLength", "supportsIntResult"})
     public RIntVector doIntVectorSameLength(RAbstractLogicalVector left, RAbstractIntVector right) {
         return performIntVectorOpSameLength(RClosures.createLogicalToIntVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1015, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RComplexVector doIntVectorDifferentLength(VirtualFrame frame, RAbstractIntVector left, RAbstractComplexVector right) {
         return performComplexVectorOpDifferentLength(frame, RClosures.createIntToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1016, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RComplexVector doIntVectorSameLength(VirtualFrame frame, RAbstractIntVector left, RAbstractComplexVector right) {
         return performComplexVectorOpSameLength(frame, RClosures.createIntToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1017, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RComplexVector doIntVectorDifferentLength(VirtualFrame frame, RAbstractComplexVector left, RAbstractIntVector right) {
         return performComplexVectorOpDifferentLength(frame, left, RClosures.createIntToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1018, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RComplexVector doIntVectorSameLength(VirtualFrame frame, RAbstractComplexVector left, RAbstractIntVector right) {
         return performComplexVectorOpSameLength(frame, left, RClosures.createIntToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1021, guards = {"!areSameLength", "!supportsIntResult"})
+    @Specialization(guards = {"!areSameLength", "!supportsIntResult"})
     public RDoubleVector doIntVectorDoubleDifferentLength(RAbstractIntVector left, RAbstractIntVector right) {
         return performIntVectorOpDoubleDifferentLength(left, right);
     }
 
-    @Specialization(order = 1022, guards = {"areSameLength", "!supportsIntResult"})
+    @Specialization(guards = {"areSameLength", "!supportsIntResult"})
     public RDoubleVector doIntVectorDoubleSameLength(RAbstractIntVector left, RAbstractIntVector right) {
         return performIntVectorOpDoubleSameLength(left, right);
     }
 
-    @Specialization(order = 1027, guards = {"!areSameLength", "!supportsIntResult"})
+    @Specialization(guards = {"!areSameLength", "!supportsIntResult"})
     public RDoubleVector doIntVectorDoubleDifferentLength(RAbstractIntVector left, RAbstractLogicalVector right) {
         return performIntVectorOpDoubleDifferentLength(left, RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1028, guards = {"areSameLength", "!supportsIntResult"})
+    @Specialization(guards = {"areSameLength", "!supportsIntResult"})
     public RDoubleVector doIntVectorDoubleSameLength(RAbstractIntVector left, RAbstractLogicalVector right) {
         return performIntVectorOpDoubleSameLength(left, RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1029, guards = {"!areSameLength", "!supportsIntResult"})
+    @Specialization(guards = {"!areSameLength", "!supportsIntResult"})
     public RDoubleVector doIntVectorDoubleDifferentLength(RAbstractLogicalVector left, RAbstractIntVector right) {
         return performIntVectorOpDoubleDifferentLength(RClosures.createLogicalToIntVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1030, guards = {"areSameLength", "!supportsIntResult"})
+    @Specialization(guards = {"areSameLength", "!supportsIntResult"})
     public RDoubleVector doIntVectorDoubleSameLength(RAbstractLogicalVector left, RAbstractIntVector right) {
         return performIntVectorOpDoubleSameLength(RClosures.createLogicalToIntVector(left, leftNACheck), right);
     }
 
     // double vector and vectors
 
-    @Specialization(order = 1100, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RDoubleVector doDoubleVectorDifferentLength(RAbstractDoubleVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpDifferentLength(left, right);
     }
 
-    @Specialization(order = 1101, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RDoubleVector doDoubleVectorSameLength(RAbstractDoubleVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpSameLength(left, right);
     }
 
-    @Specialization(order = 1102, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RDoubleVector doDoubleVectorDifferentLength(RAbstractDoubleVector left, RAbstractLogicalVector right) {
         return performDoubleVectorOpDifferentLength(left, RClosures.createLogicalToDoubleVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1103, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RDoubleVector doDoubleVectorSameLength(RAbstractDoubleVector left, RAbstractLogicalVector right) {
         return performDoubleVectorOpSameLength(left, RClosures.createLogicalToDoubleVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1104, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RDoubleVector doDoubleVectorDifferentLength(RAbstractLogicalVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpDifferentLength(RClosures.createLogicalToDoubleVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1105, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RDoubleVector doDoubleVectorSameLength(RAbstractLogicalVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpSameLength(RClosures.createLogicalToDoubleVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1110, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RComplexVector doDoubleVectorDifferentLength(VirtualFrame frame, RAbstractDoubleVector left, RAbstractComplexVector right) {
         return performComplexVectorOpDifferentLength(frame, RClosures.createDoubleToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1111, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RComplexVector doDoubleVectorSameLength(VirtualFrame frame, RAbstractDoubleVector left, RAbstractComplexVector right) {
         return performComplexVectorOpSameLength(frame, RClosures.createDoubleToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1112, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RComplexVector doDoubleVectorDifferentLength(VirtualFrame frame, RAbstractComplexVector left, RAbstractDoubleVector right) {
         return performComplexVectorOpDifferentLength(frame, left, RClosures.createDoubleToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1113, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RComplexVector doDoubleVectorSameLength(VirtualFrame frame, RAbstractComplexVector left, RAbstractDoubleVector right) {
         return performComplexVectorOpSameLength(frame, left, RClosures.createDoubleToComplexVector(right, rightNACheck));
     }
 
     // logical vector and vectors
 
-    @Specialization(order = 1200, guards = {"!areSameLength", "supportsIntResult"})
+    @Specialization(guards = {"!areSameLength", "supportsIntResult"})
     public RIntVector doLogicalVectorDifferentLength(RAbstractLogicalVector left, RAbstractLogicalVector right) {
         return performIntVectorOpDifferentLength(RClosures.createLogicalToIntVector(left, leftNACheck), RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1201, guards = {"areSameLength", "supportsIntResult"})
+    @Specialization(guards = {"areSameLength", "supportsIntResult"})
     public RIntVector doLogicalVectorSameLength(RAbstractLogicalVector left, RAbstractLogicalVector right) {
         return performIntVectorOpSameLength(RClosures.createLogicalToIntVector(left, leftNACheck), RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1206, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RComplexVector doLogicalVectorDifferentLength(VirtualFrame frame, RAbstractLogicalVector left, RAbstractComplexVector right) {
         return performComplexVectorOpDifferentLength(frame, RClosures.createLogicalToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1207, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RComplexVector doLogicalVectorSameLength(VirtualFrame frame, RAbstractLogicalVector left, RAbstractComplexVector right) {
         return performComplexVectorOpSameLength(frame, RClosures.createLogicalToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1208, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RComplexVector doLogicalVectorDifferentLength(VirtualFrame frame, RAbstractComplexVector left, RAbstractLogicalVector right) {
         return performComplexVectorOpDifferentLength(frame, left, RClosures.createLogicalToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1209, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RComplexVector doLogicalVectorSameLength(VirtualFrame frame, RAbstractComplexVector left, RAbstractLogicalVector right) {
         return performComplexVectorOpSameLength(frame, left, RClosures.createLogicalToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1210, guards = {"!areSameLength", "!supportsIntResult"})
+    @Specialization(guards = {"!areSameLength", "!supportsIntResult"})
     public RDoubleVector doLogicalVectorDoubleDifferentLength(RAbstractLogicalVector left, RAbstractLogicalVector right) {
         return performIntVectorOpDoubleDifferentLength(RClosures.createLogicalToIntVector(left, leftNACheck), RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1211, guards = {"areSameLength", "!supportsIntResult"})
+    @Specialization(guards = {"areSameLength", "!supportsIntResult"})
     public RDoubleVector doLogicalVectorDoubleSameLength(RAbstractLogicalVector left, RAbstractLogicalVector right) {
         return performIntVectorOpDoubleSameLength(RClosures.createLogicalToIntVector(left, leftNACheck), RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
     // complex vector and vectors
 
-    @Specialization(order = 1400, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RComplexVector doComplexVectorDifferentLength(VirtualFrame frame, RAbstractComplexVector left, RAbstractComplexVector right) {
         return performComplexVectorOpDifferentLength(frame, left, right);
     }
 
-    @Specialization(order = 1401, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RComplexVector doComplexVectorSameLength(VirtualFrame frame, RAbstractComplexVector left, RAbstractComplexVector right) {
         return performComplexVectorOpSameLength(frame, left, right);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
index 7f1d53f671..ec8dcb36f6 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java
@@ -60,630 +60,630 @@ public abstract class BinaryBooleanNode extends BinaryNode {
 
     // empty raw vectors
 
-    @Specialization(order = 1, guards = {"isEmpty", "expectLogical"})
+    @Specialization(guards = {"isEmpty", "expectLogical"})
     public RLogicalVector doEmptyLogical(RRawVector left, RRaw right) {
         return RDataFactory.createLogicalVector(0);
     }
 
-    @Specialization(order = 2, guards = {"isEmpty", "expectLogical"})
+    @Specialization(guards = {"isEmpty", "expectLogical"})
     public RLogicalVector doEmptyLogical(RRaw left, RRawVector right) {
         return RDataFactory.createLogicalVector(0);
     }
 
-    @Specialization(order = 3, guards = {"isEmpty", "!expectLogical"})
+    @Specialization(guards = {"isEmpty", "!expectLogical"})
     public RRawVector doEmptyRaw(RRawVector left, RRaw right) {
         return RDataFactory.createRawVector(0);
     }
 
-    @Specialization(order = 4, guards = {"isEmpty", "!expectLogical"})
+    @Specialization(guards = {"isEmpty", "!expectLogical"})
     public RRawVector doEmptyRaw(RRaw left, RRawVector right) {
         return RDataFactory.createRawVector(0);
     }
 
-    @Specialization(order = 5, guards = {"isEmpty", "expectLogical"})
+    @Specialization(guards = {"isEmpty", "expectLogical"})
     public RLogicalVector doEmptyLogical(RRawVector left, RRawVector right) {
         return RDataFactory.createLogicalVector(0);
     }
 
-    @Specialization(order = 6, guards = {"isEmpty", "!expectLogical"})
+    @Specialization(guards = {"isEmpty", "!expectLogical"})
     public RRawVector doEmptyRaw(RRawVector left, RRawVector right) {
         return RDataFactory.createRawVector(0);
     }
 
     // int
 
-    @Specialization(order = 20)
+    @Specialization
     public byte doInt(int left, int right) {
         return logic.op(left, right);
     }
 
-    @Specialization(order = 21)
+    @Specialization
     public byte doInt(int left, double right) {
         return logic.op(RRuntime.int2double(left), right);
     }
 
-    @Specialization(order = 22)
+    @Specialization
     public byte doInt(double left, int right) {
         return logic.op(left, RRuntime.int2double(right));
     }
 
-    @Specialization(order = 23)
+    @Specialization
     public byte doInt(int left, byte right) {
         return logic.op(left, RRuntime.logical2int(right));
     }
 
-    @Specialization(order = 24)
+    @Specialization
     public byte doInt(byte left, int right) {
         return logic.op(RRuntime.logical2int(left), right);
     }
 
-    @Specialization(order = 25)
+    @Specialization
     public byte doInt(int left, String right) {
         return logic.op(RRuntime.intToString(left, false), right);
     }
 
-    @Specialization(order = 26)
+    @Specialization
     public byte doInt(String left, int right) {
         return logic.op(left, RRuntime.intToString(right, false));
     }
 
-    @Specialization(order = 27)
+    @Specialization
     public byte doInt(int left, RComplex right) {
         return logic.op(RRuntime.int2complex(left), right);
     }
 
-    @Specialization(order = 28)
+    @Specialization
     public byte doInt(RComplex left, int right) {
         return logic.op(left, RRuntime.int2complex(right));
     }
 
     // double
 
-    @Specialization(order = 30)
+    @Specialization
     public byte doDouble(double left, double right) {
         return logic.op(left, right);
     }
 
-    @Specialization(order = 32)
+    @Specialization
     public byte doDouble(double left, byte right) {
         return logic.op(left, RRuntime.logical2double(right));
     }
 
-    @Specialization(order = 34)
+    @Specialization
     public byte doDouble(byte left, double right) {
         return logic.op(RRuntime.logical2double(left), right);
     }
 
-    @Specialization(order = 36)
+    @Specialization
     public byte doDouble(double left, String right) {
         return logic.op(RRuntime.doubleToString(left), right);
     }
 
-    @Specialization(order = 38)
+    @Specialization
     public byte doDouble(String left, double right) {
         return logic.op(left, RRuntime.doubleToString(right));
     }
 
-    @Specialization(order = 40)
+    @Specialization
     public byte doDouble(double left, RComplex right) {
         return logic.op(RRuntime.double2complex(left), right);
     }
 
-    @Specialization(order = 42)
+    @Specialization
     public byte doDouble(RComplex left, double right) {
         return logic.op(left, RRuntime.double2complex(right));
     }
 
-    @Specialization(order = 44, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public byte doDouble(double left, RRaw right) {
         return logic.op(left, RRuntime.raw2double(right));
     }
 
-    @Specialization(order = 46, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public byte doDouble(RRaw left, double right) {
         return logic.op(RRuntime.raw2double(left), right);
     }
 
     // logical
 
-    @Specialization(order = 50)
+    @Specialization
     public byte doLogical(byte left, byte right) {
         return logic.op(RRuntime.logical2int(left), RRuntime.logical2int(right));
     }
 
-    @Specialization(order = 52)
+    @Specialization
     public byte doBoolean(byte left, String right) {
         return logic.op(RRuntime.logicalToString(left), right);
     }
 
-    @Specialization(order = 54)
+    @Specialization
     public byte doBoolean(String left, byte right) {
         return logic.op(left, RRuntime.logicalToString(right));
     }
 
-    @Specialization(order = 56)
+    @Specialization
     public byte doLogical(byte left, RComplex right) {
         return logic.op(RRuntime.logical2complex(left), right);
     }
 
-    @Specialization(order = 58)
+    @Specialization
     public byte doLogical(RComplex left, byte right) {
         return logic.op(left, RRuntime.logical2complex(right));
     }
 
-    @Specialization(order = 60, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public byte doLogical(byte left, RRaw right) {
         return logic.op(left, RRuntime.raw2int(right));
     }
 
-    @Specialization(order = 62, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public byte doLogical(RRaw left, byte right) {
         return logic.op(RRuntime.raw2int(left), right);
     }
 
     // string
 
-    @Specialization(order = 100)
+    @Specialization
     public byte doString(String left, String right) {
         return logic.op(left, right);
     }
 
-    @Specialization(order = 102)
+    @Specialization
     public byte doString(String left, RComplex right) {
         return logic.op(left, RRuntime.complexToString(right));
     }
 
-    @Specialization(order = 104)
+    @Specialization
     public byte doString(RComplex left, String right) {
         return logic.op(RRuntime.complexToString(left), right);
     }
 
-    @Specialization(order = 106, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public byte doString(String left, RRaw right) {
         return logic.op(left, RRuntime.rawToString(right));
     }
 
-    @Specialization(order = 108, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public byte doString(RRaw left, String right) {
         return logic.op(RRuntime.rawToString(left), right);
     }
 
     // complex
 
-    @Specialization(order = 150)
+    @Specialization
     public byte doComplex(RComplex left, RComplex right) {
         return logic.op(left, right);
     }
 
-    @Specialization(order = 152, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public byte doComplex(RComplex left, RRaw right) {
         return logic.op(left, RRuntime.raw2complex(right));
     }
 
-    @Specialization(order = 154, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public byte doComplex(RRaw left, RComplex right) {
         return logic.op(RRuntime.raw2complex(left), right);
     }
 
     // raw
 
-    @Specialization(order = 200, guards = "!convertRawToNumeric")
+    @Specialization(guards = "!convertRawToNumeric")
     public RRaw doRawRaw(RRaw left, RRaw right) {
         return logic.op(left, right);
     }
 
-    @Specialization(order = 201, guards = "convertRawToNumeric")
+    @Specialization(guards = "convertRawToNumeric")
     public byte doRawLogical(RRaw left, RRaw right) {
         return logic.op(RRuntime.raw2int(left), RRuntime.raw2int(right));
     }
 
     // null
 
-    @Specialization(order = 250)
+    @Specialization
     public RLogicalVector doNull(RNull left, Object right) {
         return RDataFactory.createLogicalVector(0);
     }
 
-    @Specialization(order = 251)
+    @Specialization
     public RLogicalVector doNull(Object left, RNull right) {
         return RDataFactory.createLogicalVector(0);
     }
 
     // empty vectors
 
-    @Specialization(order = 280, guards = "isEmpty")
+    @Specialization(guards = "isEmpty")
     public RLogicalVector doEmpty(RAbstractVector left, Object right) {
         return RDataFactory.createLogicalVector(0);
     }
 
-    @Specialization(order = 281, guards = "isEmpty")
+    @Specialization(guards = "isEmpty")
     public RLogicalVector doEmpty(Object left, RAbstractVector right) {
         return RDataFactory.createLogicalVector(0);
     }
 
     // int vector and scalar
 
-    @Specialization(order = 300)
+    @Specialization
     public RLogicalVector doIntVectorOp(RAbstractIntVector left, int right) {
         return performIntVectorOp(left, RRuntime.int2double(right), false);
     }
 
-    @Specialization(order = 301)
+    @Specialization
     public RLogicalVector doIntVectorOp(int left, RAbstractIntVector right) {
         return performIntVectorOp(right, RRuntime.int2double(left), true);
     }
 
-    @Specialization(order = 302)
+    @Specialization
     public RLogicalVector doIntVectorOp(RAbstractIntVector left, double right) {
         return performIntVectorOp(left, right, false);
     }
 
-    @Specialization(order = 303)
+    @Specialization
     public RLogicalVector doIntVectorOp(double left, RAbstractIntVector right) {
         return performIntVectorOp(right, left, true);
     }
 
-    @Specialization(order = 304)
+    @Specialization
     public RLogicalVector doIntVectorOp(RAbstractIntVector left, byte right) {
         return performIntVectorOp(left, RRuntime.logical2double(right), false);
     }
 
-    @Specialization(order = 305)
+    @Specialization
     public RLogicalVector doIntVectorOp(byte left, RAbstractIntVector right) {
         return performIntVectorOp(right, RRuntime.logical2double(left), true);
     }
 
-    @Specialization(order = 306)
+    @Specialization
     public RLogicalVector doIntVectorOp(RAbstractIntVector left, String right) {
         return performIntVectorOp(left, right, false);
     }
 
-    @Specialization(order = 307)
+    @Specialization
     public RLogicalVector doIntVectorOp(String left, RAbstractIntVector right) {
         return performIntVectorOp(right, left, true);
     }
 
-    @Specialization(order = 308)
+    @Specialization
     public RLogicalVector doIntVectorOp(RAbstractIntVector left, RComplex right) {
         return performIntVectorOp(left, right, false);
     }
 
-    @Specialization(order = 309)
+    @Specialization
     public RLogicalVector doIntVectorOp(RComplex left, RAbstractIntVector right) {
         return performIntVectorOp(right, left, true);
     }
 
-    @Specialization(order = 310, guards = "convertRawToNumericVector")
+    @Specialization(guards = "convertRawToNumericVector")
     public RLogicalVector doIntVectorOp(RAbstractIntVector left, RRaw right) {
         return performIntVectorOp(left, RRuntime.raw2double(right), false);
     }
 
-    @Specialization(order = 311, guards = "convertRawToNumericVector")
+    @Specialization(guards = "convertRawToNumericVector")
     public RLogicalVector doIntVectorOp(RRaw left, RAbstractIntVector right) {
         return performIntVectorOp(right, RRuntime.raw2double(left), true);
     }
 
     // double vector and scalar
 
-    @Specialization(order = 400)
+    @Specialization
     public RLogicalVector doDoubleVectorOp(RAbstractDoubleVector left, int right) {
         return performDoubleVectorOp(left, RRuntime.int2double(right), false);
     }
 
-    @Specialization(order = 401)
+    @Specialization
     public RLogicalVector doDoubleVectorOp(int left, RAbstractDoubleVector right) {
         return performDoubleVectorOp(right, RRuntime.int2double(left), true);
     }
 
-    @Specialization(order = 402)
+    @Specialization
     public RLogicalVector doDoubleVectorOp(RAbstractDoubleVector left, double right) {
         return performDoubleVectorOp(left, right, false);
     }
 
-    @Specialization(order = 403)
+    @Specialization
     public RLogicalVector doDoubleVectorOp(double left, RAbstractDoubleVector right) {
         return performDoubleVectorOp(right, left, true);
     }
 
-    @Specialization(order = 404)
+    @Specialization
     public RLogicalVector doDoubleVectorOp(RAbstractDoubleVector left, byte right) {
         return performDoubleVectorOp(left, RRuntime.logical2double(right), false);
     }
 
-    @Specialization(order = 405)
+    @Specialization
     public RLogicalVector doDoubleVectorOp(byte left, RAbstractDoubleVector right) {
         return performDoubleVectorOp(right, RRuntime.logical2double(left), true);
     }
 
-    @Specialization(order = 406)
+    @Specialization
     public RLogicalVector doDoubleVectorOp(RAbstractDoubleVector left, String right) {
         return performDoubleVectorOp(left, right, false);
     }
 
-    @Specialization(order = 407)
+    @Specialization
     public RLogicalVector doDoubleVectorOp(String left, RAbstractDoubleVector right) {
         return performDoubleVectorOp(right, left, true);
     }
 
-    @Specialization(order = 408)
+    @Specialization
     public RLogicalVector doDoubleVectorOp(RAbstractDoubleVector left, RComplex right) {
         return performDoubleVectorOp(left, right, false);
     }
 
-    @Specialization(order = 409)
+    @Specialization
     public RLogicalVector doDoubleVectorOp(RComplex left, RAbstractDoubleVector right) {
         return performDoubleVectorOp(right, left, true);
     }
 
-    @Specialization(order = 410, guards = "convertRawToNumericVector")
+    @Specialization(guards = "convertRawToNumericVector")
     public RLogicalVector doDoubleVectorOp(RAbstractDoubleVector left, RRaw right) {
         return performDoubleVectorOp(left, RRuntime.raw2double(right), false);
     }
 
-    @Specialization(order = 411, guards = "convertRawToNumericVector")
+    @Specialization(guards = "convertRawToNumericVector")
     public RLogicalVector doDoubleVectorOp(RRaw left, RAbstractDoubleVector right) {
         return performDoubleVectorOp(right, RRuntime.raw2double(left), true);
     }
 
     // logical vector and scalar
 
-    @Specialization(order = 500)
+    @Specialization
     public RLogicalVector doLogicalVectorOp(RLogicalVector left, int right) {
         return performLogicalVectorOp(left, RRuntime.int2double(right), false);
     }
 
-    @Specialization(order = 501)
+    @Specialization
     public RLogicalVector doLogicalVectorOp(int left, RLogicalVector right) {
         return performLogicalVectorOp(right, RRuntime.int2double(left), true);
     }
 
-    @Specialization(order = 502)
+    @Specialization
     public RLogicalVector doLogicalVectorOp(RLogicalVector left, double right) {
         return performLogicalVectorOp(left, right, false);
     }
 
-    @Specialization(order = 503)
+    @Specialization
     public RLogicalVector doLogicalVectorOp(double left, RLogicalVector right) {
         return performLogicalVectorOp(right, left, true);
     }
 
-    @Specialization(order = 504)
+    @Specialization
     public RLogicalVector doLogicalVectorOp(RLogicalVector left, byte right) {
         return performLogicalVectorOp(left, RRuntime.logical2int(right), false);
     }
 
-    @Specialization(order = 505)
+    @Specialization
     public RLogicalVector doLogicalVectorOp(byte left, RLogicalVector right) {
         return performLogicalVectorOp(right, RRuntime.logical2double(left), true);
     }
 
-    @Specialization(order = 506)
+    @Specialization
     public RLogicalVector doLogicalVectorOp(RLogicalVector left, String right) {
         return performLogicalVectorOp(left, right, false);
     }
 
-    @Specialization(order = 507)
+    @Specialization
     public RLogicalVector doLogicalVectorOp(String left, RLogicalVector right) {
         return performLogicalVectorOp(right, left, true);
     }
 
-    @Specialization(order = 508)
+    @Specialization
     public RLogicalVector doLogicalVectorOp(RLogicalVector left, RComplex right) {
         return performLogicalVectorOp(left, right, false);
     }
 
-    @Specialization(order = 509)
+    @Specialization
     public RLogicalVector doLogicalVectorOp(RComplex left, RLogicalVector right) {
         return performLogicalVectorOp(right, left, true);
     }
 
-    @Specialization(order = 510, guards = "convertRawToNumericVector")
+    @Specialization(guards = "convertRawToNumericVector")
     public RLogicalVector doLogicalVectorOp(RLogicalVector left, RRaw right) {
         return performLogicalVectorOp(left, RRuntime.raw2double(right), false);
     }
 
-    @Specialization(order = 511, guards = "convertRawToNumericVector")
+    @Specialization(guards = "convertRawToNumericVector")
     public RLogicalVector doLogicalVectorOp(RRaw left, RLogicalVector right) {
         return performLogicalVectorOp(right, RRuntime.raw2double(left), true);
     }
 
     // string vector and scalar
 
-    @Specialization(order = 600)
+    @Specialization
     public RLogicalVector doStringVectorOp(RStringVector left, int right) {
         return performStringVectorOp(left, RRuntime.intToString(right, false), false);
     }
 
-    @Specialization(order = 601)
+    @Specialization
     public RLogicalVector doStringVectorOp(int left, RStringVector right) {
         return performStringVectorOp(right, RRuntime.intToString(left, false), true);
     }
 
-    @Specialization(order = 602)
+    @Specialization
     public RLogicalVector doStringVectorOp(RStringVector left, double right) {
         return performStringVectorOp(left, RRuntime.doubleToString(right), false);
     }
 
-    @Specialization(order = 603)
+    @Specialization
     public RLogicalVector doStringVectorOp(double left, RStringVector right) {
         return performStringVectorOp(right, RRuntime.doubleToString(left), true);
     }
 
-    @Specialization(order = 604)
+    @Specialization
     public RLogicalVector doStringVectorOp(RStringVector left, byte right) {
         return performStringVectorOp(left, RRuntime.logicalToString(right), false);
     }
 
-    @Specialization(order = 605)
+    @Specialization
     public RLogicalVector doStringVectorOp(byte left, RStringVector right) {
         return performStringVectorOp(right, RRuntime.logicalToString(left), false);
     }
 
-    @Specialization(order = 606)
+    @Specialization
     public RLogicalVector doStringVectorOp(RStringVector left, String right) {
         return performStringVectorOp(left, right, false);
     }
 
-    @Specialization(order = 607)
+    @Specialization
     public RLogicalVector doStringVectorOp(String left, RStringVector right) {
         return performStringVectorOp(right, left, true);
     }
 
-    @Specialization(order = 608)
+    @Specialization
     public RLogicalVector doStringVectorOp(RStringVector left, RComplex right) {
         return performStringVectorOp(left, RRuntime.complexToString(right), false);
     }
 
-    @Specialization(order = 609)
+    @Specialization
     public RLogicalVector doStringVectorOp(RComplex left, RStringVector right) {
         return performStringVectorOp(right, RRuntime.complexToString(left), true);
     }
 
-    @Specialization(order = 610, guards = "convertRawToNumericVector")
+    @Specialization(guards = "convertRawToNumericVector")
     public RLogicalVector doStringVectorOp(RStringVector left, RRaw right) {
         return performStringVectorOp(left, RRuntime.rawToString(right), false);
     }
 
-    @Specialization(order = 611, guards = "convertRawToNumericVector")
+    @Specialization(guards = "convertRawToNumericVector")
     public RLogicalVector doStringVectorOp(RRaw left, RStringVector right) {
         return performStringVectorOp(right, RRuntime.rawToString(left), true);
     }
 
     // complex vector and scalar
 
-    @Specialization(order = 700)
+    @Specialization
     public RLogicalVector doComplexVectorOp(RComplexVector left, int right) {
         return performComplexVectorOp(left, RRuntime.int2complex(right), false);
     }
 
-    @Specialization(order = 701)
+    @Specialization
     public RLogicalVector doComplexVectorOp(int left, RComplexVector right) {
         return performComplexVectorOp(right, RRuntime.int2complex(left), true);
     }
 
-    @Specialization(order = 702)
+    @Specialization
     public RLogicalVector doComplexVectorOp(RComplexVector left, double right) {
         return performComplexVectorOp(left, RRuntime.double2complex(right), false);
     }
 
-    @Specialization(order = 703)
+    @Specialization
     public RLogicalVector doComplexVectorOp(double left, RComplexVector right) {
         return performComplexVectorOp(right, RRuntime.double2complex(left), true);
     }
 
-    @Specialization(order = 704)
+    @Specialization
     public RLogicalVector doComplexVectorOp(RComplexVector left, byte right) {
         return performComplexVectorOp(left, RRuntime.logical2complex(right), false);
     }
 
-    @Specialization(order = 705)
+    @Specialization
     public RLogicalVector doComplexVectorOp(byte left, RComplexVector right) {
         return performComplexVectorOp(right, RRuntime.logical2complex(left), true);
     }
 
-    @Specialization(order = 706)
+    @Specialization
     public RLogicalVector doComplexVectorOp(RComplexVector left, String right) {
         return performComplexVectorOp(left, right, false);
     }
 
-    @Specialization(order = 707)
+    @Specialization
     public RLogicalVector doComplexVectorOp(String left, RComplexVector right) {
         return performComplexVectorOp(right, left, true);
     }
 
-    @Specialization(order = 708)
+    @Specialization
     public RLogicalVector doComplexVectorOp(RComplexVector left, RComplex right) {
         return performComplexVectorOp(left, right, false);
     }
 
-    @Specialization(order = 709)
+    @Specialization
     public RLogicalVector doComplexVectorOp(RComplex left, RComplexVector right) {
         return performComplexVectorOp(right, left, true);
     }
 
-    @Specialization(order = 710, guards = "convertRawToNumericVector")
+    @Specialization(guards = "convertRawToNumericVector")
     public RLogicalVector doComplexVectorOp(RComplexVector left, RRaw right) {
         return performComplexVectorOp(left, RRuntime.raw2complex(right), false);
     }
 
-    @Specialization(order = 711, guards = "convertRawToNumericVector")
+    @Specialization(guards = "convertRawToNumericVector")
     public RLogicalVector doComplexVectorOp(RRaw left, RComplexVector right) {
         return performComplexVectorOp(right, RRuntime.raw2complex(left), true);
     }
 
     // raw vector and scalar
 
-    @Specialization(order = 800, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public RLogicalVector doRawVectorOp(RRawVector left, int right) {
         return performRawVectorOp(left, RRuntime.int2double(right), false);
     }
 
-    @Specialization(order = 801, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public RLogicalVector doRawVectorOp(int left, RRawVector right) {
         return performRawVectorOp(right, RRuntime.int2double(left), true);
     }
 
-    @Specialization(order = 802, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public RLogicalVector doRawVectorOp(RRawVector left, double right) {
         return performRawVectorOp(left, right, false);
     }
 
-    @Specialization(order = 803, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public RLogicalVector doRawVectorOp(double left, RRawVector right) {
         return performRawVectorOp(right, left, true);
     }
 
-    @Specialization(order = 804, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public RLogicalVector doRawVectorOp(RRawVector left, byte right) {
         return performRawVectorOp(left, RRuntime.logical2int(right), false);
     }
 
-    @Specialization(order = 805, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public RLogicalVector doRawVectorOp(byte left, RRawVector right) {
         return performRawVectorOp(right, RRuntime.logical2int(left), true);
     }
 
-    @Specialization(order = 806, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public RLogicalVector doRawVectorOp(RRawVector left, String right) {
         return performRawVectorOp(left, right, false);
     }
 
-    @Specialization(order = 807, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public RLogicalVector doRawVectorOp(String left, RRawVector right) {
         return performRawVectorOp(right, left, true);
     }
 
-    @Specialization(order = 808, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public RLogicalVector doRawVectorOp(RRawVector left, RComplex right) {
         return performRawVectorOp(left, right, false);
     }
 
-    @Specialization(order = 809, guards = "convertRawToNumericObject")
+    @Specialization(guards = "convertRawToNumericObject")
     public RLogicalVector doRawVectorOp(RComplex left, RRawVector right) {
         return performRawVectorOp(right, left, true);
     }
 
-    @Specialization(order = 810, guards = "convertRawToNumeric")
+    @Specialization(guards = "convertRawToNumeric")
     public RLogicalVector doRawVectorOpLogical(RRawVector left, RRaw right) {
         return performRawVectorOp(left, RRuntime.raw2int(right), false);
     }
 
-    @Specialization(order = 811, guards = "convertRawToNumeric")
+    @Specialization(guards = "convertRawToNumeric")
     public RLogicalVector doRawVectorOpLogical(RRaw left, RRawVector right) {
         return performRawVectorOp(right, RRuntime.raw2int(left), true);
     }
 
-    @Specialization(order = 812, guards = "!convertRawToNumeric")
+    @Specialization(guards = "!convertRawToNumeric")
     public RRawVector doRawVectorOpRaw(RRawVector left, RRaw right) {
         return performRawVectorOp(left, right, false);
     }
 
-    @Specialization(order = 813, guards = "!convertRawToNumeric")
+    @Specialization(guards = "!convertRawToNumeric")
     public RRawVector doRawVectorOpRaw(RRaw left, RRawVector right) {
         return performRawVectorOp(right, left, true);
     }
 
-    @Specialization(order = 1000, guards = "differentDimensions")
+    @Specialization(guards = "differentDimensions")
     public RLogicalVector doIntVectorDifferentLength(VirtualFrame frame, RAbstractVector left, RAbstractVector right) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.NON_CONFORMABLE_ARRAYS);
     }
@@ -708,382 +708,382 @@ public abstract class BinaryBooleanNode extends BinaryNode {
 
     // int vector and vectors
 
-    @Specialization(order = 1001, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doIntVectorDifferentLength(RAbstractIntVector left, RAbstractIntVector right) {
         return performIntVectorOpDifferentLength(left, right);
     }
 
-    @Specialization(order = 1002, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doIntVectorSameLength(RAbstractIntVector left, RAbstractIntVector right) {
         return performIntVectorOpSameLength(left, right);
     }
 
-    @Specialization(order = 1003, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doIntVectorDifferentLength(RAbstractIntVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpDifferentLength(RClosures.createIntToDoubleVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1004, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doIntVectorSameLength(RAbstractIntVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpSameLength(RClosures.createIntToDoubleVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1005, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doIntVectorDifferentLength(RAbstractDoubleVector left, RAbstractIntVector right) {
         return performDoubleVectorOpDifferentLength(left, RClosures.createIntToDoubleVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1006, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doIntVectorIntVectorSameLength(RAbstractDoubleVector left, RAbstractIntVector right) {
         return performDoubleVectorOpSameLength(left, RClosures.createIntToDoubleVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1007, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doIntVectorDifferentLength(RAbstractIntVector left, RAbstractLogicalVector right) {
         return performIntVectorOpDifferentLength(left, RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1008, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doIntVectorSameLength(RAbstractIntVector left, RAbstractLogicalVector right) {
         return performIntVectorOpSameLength(left, RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1009, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doIntVectorDifferentLength(RAbstractLogicalVector left, RAbstractIntVector right) {
         return performIntVectorOpDifferentLength(RClosures.createLogicalToIntVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1010, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doIntVectorSameLength(RAbstractLogicalVector left, RAbstractIntVector right) {
         return performIntVectorOpSameLength(RClosures.createLogicalToIntVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1011, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doIntVectorDifferentLength(RAbstractIntVector left, RStringVector right) {
         return performStringVectorOpDifferentLength(RClosures.createIntToStringVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1012, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doIntVectorSameLength(RAbstractIntVector left, RStringVector right) {
         return performStringVectorOpSameLength(RClosures.createIntToStringVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1013, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doIntVectorDifferentLength(RStringVector left, RAbstractIntVector right) {
         return performStringVectorOpDifferentLength(left, RClosures.createIntToStringVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1014, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doIntVectorSameLength(RStringVector left, RAbstractIntVector right) {
         return performStringVectorOpSameLength(left, RClosures.createIntToStringVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1015, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doIntVectorDifferentLength(RAbstractIntVector left, RComplexVector right) {
         return performComplexVectorOpDifferentLength(RClosures.createIntToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1016, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doIntVectorSameLength(RAbstractIntVector left, RComplexVector right) {
         return performComplexVectorOpSameLength(RClosures.createIntToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1017, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doIntVectorDifferentLength(RComplexVector left, RAbstractIntVector right) {
         return performComplexVectorOpDifferentLength(left, RClosures.createIntToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1018, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doIntVectorSameLength(RComplexVector left, RAbstractIntVector right) {
         return performComplexVectorOpSameLength(left, RClosures.createIntToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1019, guards = {"!areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"!areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doIntVectorDifferentLength(RAbstractIntVector left, RRawVector right) {
         return performIntVectorOpDifferentLength(left, RClosures.createRawToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1020, guards = {"areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doIntVectorSameLength(RAbstractIntVector left, RRawVector right) {
         return performIntVectorOpSameLength(left, RClosures.createRawToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1021, guards = {"!areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"!areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doIntVectorDifferentLength(RRawVector left, RAbstractIntVector right) {
         return performIntVectorOpDifferentLength(RClosures.createRawToIntVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1023, guards = {"areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doIntVectorSameLength(RRawVector left, RAbstractIntVector right) {
         return performIntVectorOpSameLength(RClosures.createRawToIntVector(left, leftNACheck), right);
     }
 
     // double vector and vectors
 
-    @Specialization(order = 1100, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doDoubleVectorDifferentLength(RAbstractDoubleVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpDifferentLength(left, right);
     }
 
-    @Specialization(order = 1101, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doDoubleVectorSameLength(RAbstractDoubleVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpSameLength(left, right);
     }
 
-    @Specialization(order = 1102, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doDoubleVectorDifferentLength(RAbstractDoubleVector left, RAbstractLogicalVector right) {
         return performDoubleVectorOpDifferentLength(left, RClosures.createLogicalToDoubleVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1103, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doDoubleVectorSameLength(RAbstractDoubleVector left, RAbstractLogicalVector right) {
         return performDoubleVectorOpSameLength(left, RClosures.createLogicalToDoubleVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1104, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doDoubleVectorDifferentLength(RAbstractLogicalVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpDifferentLength(RClosures.createLogicalToDoubleVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1105, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doDoubleVectorSameLength(RAbstractLogicalVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpSameLength(RClosures.createLogicalToDoubleVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1106, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doDoubleVectorDifferentLength(RAbstractDoubleVector left, RStringVector right) {
         return performStringVectorOpDifferentLength(RClosures.createDoubleToStringVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1107, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doDoubleVectorSameLength(RAbstractDoubleVector left, RStringVector right) {
         return performStringVectorOpSameLength(RClosures.createDoubleToStringVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1108, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doDoubleVectorDifferentLength(RStringVector left, RAbstractDoubleVector right) {
         return performStringVectorOpDifferentLength(left, RClosures.createDoubleToStringVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1109, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doDoubleVectorSameLength(RStringVector left, RAbstractDoubleVector right) {
         return performStringVectorOpSameLength(left, RClosures.createDoubleToStringVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1110, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doDoubleVectorDifferentLength(RAbstractDoubleVector left, RComplexVector right) {
         return performComplexVectorOpDifferentLength(RClosures.createDoubleToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1111, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doDoubleVectorSameLength(RAbstractDoubleVector left, RComplexVector right) {
         return performComplexVectorOpSameLength(RClosures.createDoubleToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1112, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doDoubleVectorDifferentLength(RComplexVector left, RAbstractDoubleVector right) {
         return performComplexVectorOpDifferentLength(left, RClosures.createDoubleToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1113, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doDoubleVectorSameLength(RComplexVector left, RAbstractDoubleVector right) {
         return performComplexVectorOpSameLength(left, RClosures.createDoubleToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1114, guards = {"!areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"!areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doDoubleVectorDifferentLength(RAbstractDoubleVector left, RRawVector right) {
         return performDoubleVectorOpDifferentLength(left, RClosures.createRawToDoubleVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1115, guards = {"areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doDoubleVectorSameLength(RAbstractDoubleVector left, RRawVector right) {
         return performDoubleVectorOpSameLength(left, RClosures.createRawToDoubleVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1116, guards = {"!areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"!areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doDoubleVectorDifferentLength(RRawVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpDifferentLength(RClosures.createRawToDoubleVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1117, guards = {"areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doDoubleVectorSameLength(RRawVector left, RAbstractDoubleVector right) {
         return performDoubleVectorOpSameLength(RClosures.createRawToDoubleVector(left, leftNACheck), right);
     }
 
     // logical vector and vectors
 
-    @Specialization(order = 1200, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doLogicalVectorDifferentLength(RLogicalVector left, RLogicalVector right) {
         return performIntVectorOpDifferentLength(RClosures.createLogicalToIntVector(left, leftNACheck), RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1201, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doLogicalVectorSameLength(RLogicalVector left, RLogicalVector right) {
         return performIntVectorOpSameLength(RClosures.createLogicalToIntVector(left, leftNACheck), RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1202, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doLogicalVectorDifferentLength(RAbstractLogicalVector left, RStringVector right) {
         return performStringVectorOpDifferentLength(RClosures.createLogicalToStringVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1203, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doLogicalVectorSameLength(RAbstractLogicalVector left, RStringVector right) {
         return performStringVectorOpSameLength(RClosures.createLogicalToStringVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1204, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doLogicalVectorDifferentLength(RStringVector left, RAbstractLogicalVector right) {
         return performStringVectorOpDifferentLength(left, RClosures.createLogicalToStringVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1205, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doLogicalVectorSameLength(RStringVector left, RAbstractLogicalVector right) {
         return performStringVectorOpSameLength(left, RClosures.createLogicalToStringVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1206, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doLogicalVectorDifferentLength(RAbstractLogicalVector left, RComplexVector right) {
         return performComplexVectorOpDifferentLength(RClosures.createLogicalToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1207, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doLogicalVectorSameLength(RAbstractLogicalVector left, RComplexVector right) {
         return performComplexVectorOpSameLength(RClosures.createLogicalToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1208, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doLogicalVectorDifferentLength(RComplexVector left, RAbstractLogicalVector right) {
         return performComplexVectorOpDifferentLength(left, RClosures.createLogicalToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1209, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doLogicalVectorSameLength(RComplexVector left, RAbstractLogicalVector right) {
         return performComplexVectorOpSameLength(left, RClosures.createLogicalToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1210, guards = {"!areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"!areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doLogicalVectorDifferentLength(RAbstractLogicalVector left, RRawVector right) {
         return performIntVectorOpDifferentLength(RClosures.createLogicalToIntVector(left, leftNACheck), RClosures.createRawToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1211, guards = {"areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doLogicalVectorSameLength(RAbstractLogicalVector left, RRawVector right) {
         return performIntVectorOpSameLength(RClosures.createLogicalToIntVector(left, leftNACheck), RClosures.createRawToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1212, guards = {"!areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"!areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doLogicalVectorDifferentLength(RRawVector left, RAbstractLogicalVector right) {
         return performIntVectorOpDifferentLength(RClosures.createRawToIntVector(left, leftNACheck), RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1213, guards = {"areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doLogicalVectorSameLength(RRawVector left, RAbstractLogicalVector right) {
         return performIntVectorOpSameLength(RClosures.createRawToIntVector(left, leftNACheck), RClosures.createLogicalToIntVector(right, rightNACheck));
     }
 
     // string vector and vectors
 
-    @Specialization(order = 1300, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doStringVectorDifferentLength(RStringVector left, RStringVector right) {
         return performStringVectorOpDifferentLength(left, right);
     }
 
-    @Specialization(order = 1301, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doStringVectorSameLength(RStringVector left, RStringVector right) {
         return performStringVectorOpSameLength(left, right);
     }
 
-    @Specialization(order = 1302, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doStringVectorDifferentLength(RStringVector left, RAbstractComplexVector right) {
         return performStringVectorOpDifferentLength(left, RClosures.createComplexToStringVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1303, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doStringVectorSameLength(RStringVector left, RAbstractComplexVector right) {
         return performStringVectorOpSameLength(left, RClosures.createComplexToStringVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1304, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doStringVectorDifferentLength(RAbstractComplexVector left, RStringVector right) {
         return performStringVectorOpDifferentLength(RClosures.createComplexToStringVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1305, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doStringVectorSameLength(RAbstractComplexVector left, RStringVector right) {
         return performStringVectorOpSameLength(RClosures.createComplexToStringVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1306, guards = {"!areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"!areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doStringVectorDifferentLength(RStringVector left, RRawVector right) {
         return performStringVectorOpDifferentLength(left, RClosures.createRawToStringVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1307, guards = {"areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doStringVectorSameLength(RStringVector left, RRawVector right) {
         return performStringVectorOpSameLength(left, RClosures.createRawToStringVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1308, guards = {"!areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"!areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doStringVectorDifferentLengthRRawVector(RRawVector left, RStringVector right) {
         return performStringVectorOpDifferentLength(RClosures.createRawToStringVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1309, guards = {"areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doStringVectorSameLengthRRawVector(RRawVector left, RStringVector right) {
         return performStringVectorOpSameLength(RClosures.createRawToStringVector(left, leftNACheck), right);
     }
 
     // complex vector and vectors
 
-    @Specialization(order = 1400, guards = "!areSameLength")
+    @Specialization(guards = "!areSameLength")
     public RLogicalVector doComplexVectorDifferentLength(RComplexVector left, RComplexVector right) {
         return performComplexVectorOpDifferentLength(left, right);
     }
 
-    @Specialization(order = 1401, guards = "areSameLength")
+    @Specialization(guards = "areSameLength")
     public RLogicalVector doComplexVectorSameLength(RComplexVector left, RComplexVector right) {
         return performComplexVectorOpSameLength(left, right);
     }
 
-    @Specialization(order = 1402, guards = {"!areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"!areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doComplexVectorDifferentLength(RComplexVector left, RRawVector right) {
         return performComplexVectorOpDifferentLength(left, RClosures.createRawToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1403, guards = {"areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doComplexVectorSameLength(RComplexVector left, RRawVector right) {
         return performComplexVectorOpSameLength(left, RClosures.createRawToComplexVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1404, guards = {"!areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"!areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doComplexVectorDifferentLength(RRawVector left, RComplexVector right) {
         return performComplexVectorOpDifferentLength(RClosures.createRawToComplexVector(left, leftNACheck), right);
     }
 
-    @Specialization(order = 1405, guards = {"areSameLength", "convertRawToNumericVector"})
+    @Specialization(guards = {"areSameLength", "convertRawToNumericVector"})
     public RLogicalVector doComplexVectorSameLength(RRawVector left, RComplexVector right) {
         return performComplexVectorOpSameLength(RClosures.createRawToComplexVector(left, leftNACheck), right);
     }
 
     // raw vector and vectors
 
-    @Specialization(order = 1500, guards = {"!areSameLength", "convertRawToNumeric"})
+    @Specialization(guards = {"!areSameLength", "convertRawToNumeric"})
     public RLogicalVector doRawVectorDifferentLengthLogical(RRawVector left, RRawVector right) {
         return performIntVectorOpDifferentLength(RClosures.createRawToIntVector(left, leftNACheck), RClosures.createRawToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1501, guards = {"areSameLength", "convertRawToNumeric"})
+    @Specialization(guards = {"areSameLength", "convertRawToNumeric"})
     public RLogicalVector doRawVectorSameLengthLogical(RRawVector left, RRawVector right) {
         return performIntVectorOpSameLength(RClosures.createRawToIntVector(left, leftNACheck), RClosures.createRawToIntVector(right, rightNACheck));
     }
 
-    @Specialization(order = 1502, guards = {"!areSameLength", "!convertRawToNumeric"})
+    @Specialization(guards = {"!areSameLength", "!convertRawToNumeric"})
     public RRawVector doRawVectorDifferentLengthRaw(RRawVector left, RRawVector right) {
         return performRawVectorOpDifferentLength(left, right);
     }
 
-    @Specialization(order = 1503, guards = {"areSameLength", "!convertRawToNumeric"})
+    @Specialization(guards = {"areSameLength", "!convertRawToNumeric"})
     public RRawVector doRawVectorSameLengthRaw(RRawVector left, RRawVector right) {
         return performRawVectorOpSameLength(left, right);
     }
@@ -1091,17 +1091,17 @@ public abstract class BinaryBooleanNode extends BinaryNode {
     // non-convertible raw - other cases are guarded with convertRawToNumeric and
     // convertRawToNumericVector
 
-    @Specialization(order = 1600)
+    @Specialization
     public byte doRaw(RRaw left, Object right) {
         return logic.op(left, right);
     }
 
-    @Specialization(order = 1601)
+    @Specialization
     public byte doRaw(Object left, RRaw right) {
         return logic.op(left, right);
     }
 
-    @Specialization(order = 1602)
+    @Specialization
     public byte doRaw(RRawVector left, Object right) {
         // perhaps not the cleanest solution but others would be (unnecessarily) more verbose (e.g.
         // introduce another abstract method to BooleanOperation just to signal an error in one
@@ -1110,7 +1110,7 @@ public abstract class BinaryBooleanNode extends BinaryNode {
         return logic.op(left.getDataAt(0), right);
     }
 
-    @Specialization(order = 1603)
+    @Specialization
     public byte doRaw(Object left, RRawVector right) {
         // perhaps not the cleanest solution but others would be (unnecessarily) more verbose (e.g.
         // introduce another abstract method to BooleanOperation just to signal an error in one
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNonVectorizedNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNonVectorizedNode.java
index 5564927978..43df8604f8 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNonVectorizedNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNonVectorizedNode.java
@@ -70,162 +70,162 @@ public abstract class BinaryBooleanNonVectorizedNode extends BinaryNode {
         return logic.requiresRightOperand(RTypesGen.RTYPES.asByte(leftValue));
     }
 
-    @Specialization(order = 1, guards = "needsRightOperand")
+    @Specialization(guards = "needsRightOperand")
     public byte doLogical(byte left, boolean needsRightOperand, int right) {
         return logic.op(RRuntime.logical2int(left), right);
     }
 
-    @Specialization(order = 2, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, int right) {
         return left;
     }
 
-    @Specialization(order = 3, guards = "needsRightOperand")
+    @Specialization(guards = "needsRightOperand")
     public byte doLogical(byte left, boolean needsRightOperand, double right) {
         return logic.op(RRuntime.logical2double(left), right);
     }
 
-    @Specialization(order = 4, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, double right) {
         return left;
     }
 
-    @Specialization(order = 5, guards = "needsRightOperand")
+    @Specialization(guards = "needsRightOperand")
     public byte doLogical(byte left, boolean needsRightOperand, byte right) {
         return logic.op(RRuntime.logical2int(left), RRuntime.logical2int(right));
     }
 
-    @Specialization(order = 6, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, byte right) {
         return left;
     }
 
-    @Specialization(order = 7, guards = "needsRightOperand")
+    @Specialization(guards = "needsRightOperand")
     public byte doLogical(byte left, boolean needsRightOperand, String right) {
         return logic.op(RRuntime.logical2int(left), right);
     }
 
-    @Specialization(order = 8, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, String right) {
         return left;
     }
 
-    @Specialization(order = 9, guards = "needsRightOperand")
+    @Specialization(guards = "needsRightOperand")
     public byte doLogical(byte left, boolean needsRightOperand, RComplex right) {
         return logic.op(RRuntime.logical2complex(left), right);
     }
 
-    @Specialization(order = 10, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, RComplex right) {
         return left;
     }
 
-    @Specialization(order = 11, guards = "needsRightOperand")
+    @Specialization(guards = "needsRightOperand")
     public byte doLogical(Object left, boolean needsRightOperand, RRaw right) {
         return logic.op(left, right);
     }
 
-    @Specialization(order = 12, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, RRaw right) {
         return left;
     }
 
-    @Specialization(order = 13, guards = "needsRightOperand")
+    @Specialization(guards = "needsRightOperand")
     public byte doLogical(Object left, boolean needsRightOperand, RNull right) {
         return logic.op(left, right);
     }
 
-    @Specialization(order = 14, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, RNull right) {
         return left;
     }
 
-    @Specialization(order = 15, guards = {"needsRightOperand", "!isZeroLength"})
+    @Specialization(guards = {"needsRightOperand", "!isZeroLength"})
     public byte doLogical(byte left, boolean needsRightOperand, RAbstractIntVector right) {
         return logic.op(RRuntime.logical2int(left), right.getDataAt(0));
     }
 
-    @Specialization(order = 16, guards = {"needsRightOperand", "isZeroLength"})
+    @Specialization(guards = {"needsRightOperand", "isZeroLength"})
     public byte doLogicalEmpty(byte left, boolean needsRightOperand, RAbstractIntVector right) {
         return logic.op(RRuntime.logical2int(left), RRuntime.INT_NA);
     }
 
-    @Specialization(order = 17, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, RAbstractIntVector right) {
         return left;
     }
 
-    @Specialization(order = 18, guards = {"needsRightOperand", "!isZeroLength"})
+    @Specialization(guards = {"needsRightOperand", "!isZeroLength"})
     public byte doLogical(byte left, boolean needsRightOperand, RAbstractDoubleVector right) {
         return logic.op(RRuntime.logical2double(left), right.getDataAt(0));
     }
 
-    @Specialization(order = 19, guards = {"needsRightOperand", "isZeroLength"})
+    @Specialization(guards = {"needsRightOperand", "isZeroLength"})
     public byte doLogicalEmpty(byte left, boolean needsRightOperand, RAbstractDoubleVector right) {
         return logic.op(RRuntime.logical2double(left), RRuntime.DOUBLE_NA);
     }
 
-    @Specialization(order = 20, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, RAbstractDoubleVector right) {
         return left;
     }
 
-    @Specialization(order = 21, guards = {"needsRightOperand", "!isZeroLength"})
+    @Specialization(guards = {"needsRightOperand", "!isZeroLength"})
     public byte doLogical(byte left, boolean needsRightOperand, RAbstractLogicalVector right) {
         return logic.op(RRuntime.logical2int(left), RRuntime.logical2int(right.getDataAt(0)));
     }
 
-    @Specialization(order = 22, guards = {"needsRightOperand", "isZeroLength"})
+    @Specialization(guards = {"needsRightOperand", "isZeroLength"})
     public byte doLogicalEmpty(byte left, boolean needsRightOperand, RAbstractLogicalVector right) {
         return logic.op(RRuntime.logical2int(left), RRuntime.INT_NA);
     }
 
-    @Specialization(order = 23, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, RAbstractLogicalVector right) {
         return left;
     }
 
-    @Specialization(order = 24, guards = {"needsRightOperand", "!isZeroLength"})
+    @Specialization(guards = {"needsRightOperand", "!isZeroLength"})
     public byte doLogical(byte left, boolean needsRightOperand, RAbstractStringVector right) {
         return logic.op(RRuntime.logical2int(left), right.getDataAt(0));
     }
 
-    @Specialization(order = 25, guards = {"needsRightOperand", "isZeroLength"})
+    @Specialization(guards = {"needsRightOperand", "isZeroLength"})
     public byte doLogicalEmpty(byte left, boolean needsRightOperand, RAbstractStringVector right) {
         return logic.op(RRuntime.logical2int(left), RRuntime.STRING_NA);
     }
 
-    @Specialization(order = 26, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, RAbstractStringVector right) {
         return left;
     }
 
-    @Specialization(order = 27, guards = {"needsRightOperand", "!isZeroLength"})
+    @Specialization(guards = {"needsRightOperand", "!isZeroLength"})
     public byte doLogical(byte left, boolean needsRightOperand, RAbstractComplexVector right) {
         return logic.op(RRuntime.logical2complex(left), right.getDataAt(0));
     }
 
-    @Specialization(order = 28, guards = {"needsRightOperand", "isZeroLength"})
+    @Specialization(guards = {"needsRightOperand", "isZeroLength"})
     public byte doLogicalEmpty(byte left, boolean needsRightOperand, RAbstractComplexVector right) {
         return logic.op(RRuntime.logical2complex(left), RRuntime.createComplexNA());
     }
 
-    @Specialization(order = 29, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, RAbstractComplexVector right) {
         return left;
     }
 
-    @Specialization(order = 30, guards = {"needsRightOperand", "!isZeroLength"})
+    @Specialization(guards = {"needsRightOperand", "!isZeroLength"})
     public byte doLogical(Object left, boolean needsRightOperand, RAbstractRawVector right) {
         return logic.op(left, right.getDataAt(0));
     }
 
-    @Specialization(order = 31, guards = {"needsRightOperand", "isZeroLength"})
+    @Specialization(guards = {"needsRightOperand", "isZeroLength"})
     public byte doLogicalEmpty(VirtualFrame frame, Object left, boolean needsRightOperand, RAbstractRawVector right) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_TYPE_IN, "y", logic.opName());
     }
 
-    @Specialization(order = 32, guards = "!needsRightOperand")
+    @Specialization(guards = "!needsRightOperand")
     public byte doLogicalOnlyLeft(byte left, boolean needsRightOperand, RAbstractRawVector right) {
         return left;
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CastTypeNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CastTypeNode.java
index 9d6f9a1f11..44deb7ee8c 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CastTypeNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CastTypeNode.java
@@ -34,62 +34,62 @@ public abstract class CastTypeNode extends RInvisibleBuiltinNode {
     public abstract Object execute(VirtualFrame frame, final Object value, final String type);
 
     @SuppressWarnings("unused")
-    @Specialization(order = 0, guards = "isSameType")
+    @Specialization(guards = "isSameType")
     public RAbstractVector doCast(VirtualFrame frame, final RAbstractVector value, final String type) {
         return value;
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1, guards = {"!isSameType", "isString"})
+    @Specialization(guards = {"!isSameType", "isString"})
     public Object doCastString(VirtualFrame frame, final RAbstractVector value, final String type) {
         initCastString();
         return castStringNode.executeString(frame, value);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 2, guards = {"!isSameType", "isComplex"})
+    @Specialization(guards = {"!isSameType", "isComplex"})
     public Object doCastComplex(VirtualFrame frame, final RAbstractVector value, final String type) {
         initCastComplex();
         return castComplexNode.executeComplex(frame, value);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 4, guards = {"!isSameType", "isDouble"})
+    @Specialization(guards = {"!isSameType", "isDouble"})
     public Object doCastDouble(VirtualFrame frame, final RAbstractVector value, final String type) {
         initCastDouble();
         return castDoubleNode.executeDouble(frame, value);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 6, guards = {"!isSameType", "isInteger"})
+    @Specialization(guards = {"!isSameType", "isInteger"})
     public Object doCastInteger(VirtualFrame frame, final RAbstractVector value, final String type) {
         initCastInteger();
         return castIntegerNode.executeInt(frame, value);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 8, guards = {"!isSameType", "isLogical"})
+    @Specialization(guards = {"!isSameType", "isLogical"})
     public Object doCastLogical(VirtualFrame frame, final RAbstractVector value, final String type) {
         initCastLogical();
         return castLogicalNode.executeLogical(frame, value);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 10, guards = {"!isSameType", "isRaw"})
+    @Specialization(guards = {"!isSameType", "isRaw"})
     public Object doCastRaw(VirtualFrame frame, final RAbstractVector value, final String type) {
         initCastRaw();
         return castRawNode.executeRaw(frame, value);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 12, guards = {"!isSameType", "isList"})
+    @Specialization(guards = {"!isSameType", "isList"})
     public RList doCastList(VirtualFrame frame, final RAbstractVector value, final String type) {
         initCastList();
         return castListNode.executeList(frame, value);
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 14)
+    @Specialization
     public Object doCastUnknown(VirtualFrame frame, final RAbstractVector value, final String type) {
         return null;
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CbindBinaryNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CbindBinaryNode.java
index 444737a0f4..24eee9e0ca 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CbindBinaryNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CbindBinaryNode.java
@@ -39,18 +39,18 @@ public abstract class CbindBinaryNode extends CombineBinaryNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 3)
+    @Specialization
     public RAbstractVector cbind(RAbstractVector left, RNull right) {
         return left.copyWithNewDimensions(getDimensions(left));
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 4)
+    @Specialization
     public RAbstractVector cbind(RNull left, RAbstractVector right) {
         return right.copyWithNewDimensions(getDimensions(right));
     }
 
-    @Specialization(order = 100)
+    @Specialization
     public RAbstractVector cbind(RAbstractVector left, RAbstractVector right) {
         return genericCbind(left.materialize(), right.materialize());
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/ColonNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/ColonNode.java
index cbb6304aa9..4a6ba722bc 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/ColonNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/ColonNode.java
@@ -37,49 +37,49 @@ public abstract class ColonNode extends RNode implements VisibilityController {
         return ColonCastNodeFactory.create(child);
     }
 
-    @Specialization(order = 1, guards = "isSmaller")
+    @Specialization(guards = "isSmaller")
     public RIntSequence colonAscending(int left, int right) {
         controlVisibility();
         return RDataFactory.createAscendingRange(left, right);
     }
 
-    @Specialization(order = 2, guards = "!isSmaller")
+    @Specialization(guards = "!isSmaller")
     public RIntSequence colonDescending(int left, int right) {
         controlVisibility();
         return RDataFactory.createDescendingRange(left, right);
     }
 
-    @Specialization(order = 3, guards = "isSmaller")
+    @Specialization(guards = "isSmaller")
     public RIntSequence colonAscending(int left, double right) {
         controlVisibility();
         return RDataFactory.createAscendingRange(left, (int) right);
     }
 
-    @Specialization(order = 4, guards = "!isSmaller")
+    @Specialization(guards = "!isSmaller")
     public RIntSequence colonDescending(int left, double right) {
         controlVisibility();
         return RDataFactory.createDescendingRange(left, (int) right);
     }
 
-    @Specialization(order = 5, guards = "isSmaller")
+    @Specialization(guards = "isSmaller")
     public RDoubleSequence colonAscending(double left, int right) {
         controlVisibility();
         return RDataFactory.createAscendingRange(left, right);
     }
 
-    @Specialization(order = 6, guards = "!isSmaller")
+    @Specialization(guards = "!isSmaller")
     public RDoubleSequence colonDescending(double left, int right) {
         controlVisibility();
         return RDataFactory.createDescendingRange(left, right);
     }
 
-    @Specialization(order = 7, guards = "isSmaller")
+    @Specialization(guards = "isSmaller")
     public RDoubleSequence colonAscending(double left, double right) {
         controlVisibility();
         return RDataFactory.createAscendingRange(left, right);
     }
 
-    @Specialization(order = 8, guards = "!isSmaller")
+    @Specialization(guards = "!isSmaller")
     public RDoubleSequence colonDescending(double left, double right) {
         controlVisibility();
         return RDataFactory.createDescendingRange(left, right);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryComplexNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryComplexNode.java
index e8aa4167f9..728a327203 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryComplexNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryComplexNode.java
@@ -38,32 +38,32 @@ public abstract class CombineBinaryComplexNode extends CombineBinaryNode {
         return RNull.instance;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public RComplex combine(RNull left, RComplex right) {
         return right;
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public RComplex combine(RComplex left, RNull right) {
         return left;
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public RComplexVector combine(RComplexVector left, RNull right) {
         return left;
     }
 
-    @Specialization(order = 4)
+    @Specialization
     public RComplexVector combine(RNull left, RComplexVector right) {
         return right;
     }
 
-    @Specialization(order = 5)
+    @Specialization
     public RComplexVector combine(RComplex left, RComplex right) {
         return RDataFactory.createComplexVector(new double[]{left.getRealPart(), left.getImaginaryPart(), right.getRealPart(), right.getImaginaryPart()}, !left.isNA() && !right.isNA());
     }
 
-    @Specialization(order = 6)
+    @Specialization
     public RComplexVector combine(RComplexVector left, RComplex right) {
         int dataLength = left.getLength();
         double[] result = new double[(dataLength + 1) << 1];
@@ -78,7 +78,7 @@ public abstract class CombineBinaryComplexNode extends CombineBinaryNode {
         return RDataFactory.createComplexVector(result, left.isComplete() && !right.isNA(), combineNames(left, false));
     }
 
-    @Specialization(order = 7)
+    @Specialization
     public RComplexVector combine(RComplex left, RComplexVector right) {
         int dataLength = right.getLength();
         double[] result = new double[(1 + dataLength) << 1];
@@ -93,7 +93,7 @@ public abstract class CombineBinaryComplexNode extends CombineBinaryNode {
         return RDataFactory.createComplexVector(result, (!left.isNA()) && right.isComplete(), combineNames(right, true));
     }
 
-    @Specialization(order = 8)
+    @Specialization
     public RComplexVector combine(RComplexVector left, RComplexVector right) {
         return (RComplexVector) genericCombine(left, right);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryDoubleNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryDoubleNode.java
index 36717200b5..67c903f348 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryDoubleNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryDoubleNode.java
@@ -34,27 +34,27 @@ import com.oracle.truffle.r.runtime.data.model.*;
 /** Takes only RNull, double or RDoubleVector as arguments. Use CastDoubleNode to cast the operands. */
 public abstract class CombineBinaryDoubleNode extends CombineBinaryNode {
 
-    @Specialization(order = 0)
+    @Specialization
     public RNull combine(RNull left, RNull right) {
         return RNull.instance;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public RAbstractDoubleVector combine(RNull left, RAbstractDoubleVector right) {
         return right;
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public RAbstractDoubleVector combine(RAbstractDoubleVector left, RNull right) {
         return left;
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public RDoubleVector combine(double left, double right) {
         return RDataFactory.createDoubleVector(new double[]{left, right}, RRuntime.isComplete(left) && RRuntime.isComplete(right));
     }
 
-    @Specialization(order = 4)
+    @Specialization
     public RDoubleVector combine(RAbstractDoubleVector left, double right) {
         int dataLength = left.getLength();
         double[] result = new double[dataLength + 1];
@@ -65,7 +65,7 @@ public abstract class CombineBinaryDoubleNode extends CombineBinaryNode {
         return RDataFactory.createDoubleVector(result, left.isComplete() && RRuntime.isComplete(right), combineNames(left, false));
     }
 
-    @Specialization(order = 5)
+    @Specialization
     public RDoubleVector combine(double left, RAbstractDoubleVector right) {
         int dataLength = right.getLength();
         double[] result = new double[dataLength + 1];
@@ -76,7 +76,7 @@ public abstract class CombineBinaryDoubleNode extends CombineBinaryNode {
         return RDataFactory.createDoubleVector(result, RRuntime.isComplete(left) && right.isComplete(), combineNames(right, true));
     }
 
-    @Specialization(order = 6)
+    @Specialization
     public RDoubleVector combine(RAbstractDoubleVector left, RAbstractDoubleVector right) {
         int leftLength = left.getLength();
         int rightLength = right.getLength();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryIntegerNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryIntegerNode.java
index 7998e31b5b..6270c5bd80 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryIntegerNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryIntegerNode.java
@@ -31,27 +31,27 @@ import com.oracle.truffle.r.runtime.data.model.*;
 /** Takes only RNull, int or RIntVector as arguments. Use CastIntegerNode to cast the operands. */
 public abstract class CombineBinaryIntegerNode extends CombineBinaryNode {
 
-    @Specialization(order = 0)
+    @Specialization
     public RNull combine(RNull left, RNull right) {
         return RNull.instance;
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public RAbstractIntVector combine(RNull left, RAbstractIntVector right) {
         return right;
     }
 
-    @Specialization(order = 4)
+    @Specialization
     public RAbstractIntVector combine(RAbstractIntVector left, RNull right) {
         return left;
     }
 
-    @Specialization(order = 5)
+    @Specialization
     public RIntVector combine(int left, int right) {
         return RDataFactory.createIntVector(new int[]{left, right}, RRuntime.isComplete(left) && RRuntime.isComplete(right));
     }
 
-    @Specialization(order = 9)
+    @Specialization
     public RIntVector combine(RAbstractIntVector left, RAbstractIntVector right) {
         int leftLength = left.getLength();
         int rightLength = right.getLength();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryListNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryListNode.java
index 075077fdc6..34ec91aa4f 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryListNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryListNode.java
@@ -28,12 +28,12 @@ import com.oracle.truffle.r.runtime.data.model.*;
 
 public abstract class CombineBinaryListNode extends CombineBinaryNode {
 
-    @Specialization(order = 1)
+    @Specialization
     public RList combine(RList left, double right) {
         return extend(left, right);
     }
 
-    @Specialization(order = 100)
+    @Specialization
     public RList combine(RList left, RAbstractVector right) {
         Object[] data = left.getDataWithoutCopying();
         Object[] result = new Object[data.length + right.getLength()];
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryLogicalNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryLogicalNode.java
index 5a25322af7..d92f9ead16 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryLogicalNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryLogicalNode.java
@@ -36,27 +36,27 @@ public abstract class CombineBinaryLogicalNode extends CombineBinaryNode {
         return RNull.instance;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public byte combine(RNull left, byte right) {
         return right;
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public byte combine(byte left, RNull right) {
         return left;
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public RLogicalVector combine(RLogicalVector left, RNull right) {
         return left;
     }
 
-    @Specialization(order = 4)
+    @Specialization
     public RLogicalVector combine(RNull left, RLogicalVector right) {
         return right;
     }
 
-    @Specialization(order = 5)
+    @Specialization
     public RLogicalVector combine(byte left, byte right) {
         check.enable(true);
         check.check(left);
@@ -64,7 +64,7 @@ public abstract class CombineBinaryLogicalNode extends CombineBinaryNode {
         return RDataFactory.createLogicalVector(new byte[]{left, right}, check.neverSeenNA());
     }
 
-    @Specialization(order = 6)
+    @Specialization
     public RLogicalVector combine(RLogicalVector left, byte right) {
         check.enable(left);
         check.enable(right);
@@ -80,7 +80,7 @@ public abstract class CombineBinaryLogicalNode extends CombineBinaryNode {
         return RDataFactory.createLogicalVector(result, check.neverSeenNA(), combineNames(left, false));
     }
 
-    @Specialization(order = 7)
+    @Specialization
     public RLogicalVector combine(byte left, RLogicalVector right) {
         check.enable(right);
         check.enable(left);
@@ -96,7 +96,7 @@ public abstract class CombineBinaryLogicalNode extends CombineBinaryNode {
         return RDataFactory.createLogicalVector(result, check.neverSeenNA(), combineNames(right, true));
     }
 
-    @Specialization(order = 8)
+    @Specialization
     public RLogicalVector combine(RLogicalVector left, RLogicalVector right) {
         return (RLogicalVector) genericCombine(left, right);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryRawNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryRawNode.java
index 02495279bc..0ae9eb1681 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryRawNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryRawNode.java
@@ -37,32 +37,32 @@ public abstract class CombineBinaryRawNode extends CombineBinaryNode {
         return RNull.instance;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public RRaw combine(RNull left, RRaw right) {
         return right;
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public RRaw combine(RRaw left, RNull right) {
         return left;
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public RRawVector combine(RRawVector left, RNull right) {
         return left;
     }
 
-    @Specialization(order = 4)
+    @Specialization
     public RRawVector combine(RNull left, RRawVector right) {
         return right;
     }
 
-    @Specialization(order = 5)
+    @Specialization
     public RRawVector combine(RRaw left, RRaw right) {
         return RDataFactory.createRawVector(new byte[]{left.getValue(), right.getValue()});
     }
 
-    @Specialization(order = 6)
+    @Specialization
     public RRawVector combine(RRawVector left, RRaw right) {
         int dataLength = left.getLength();
         byte[] result = new byte[dataLength + 1];
@@ -73,7 +73,7 @@ public abstract class CombineBinaryRawNode extends CombineBinaryNode {
         return RDataFactory.createRawVector(result, combineNames(left, false));
     }
 
-    @Specialization(order = 7)
+    @Specialization
     public RRawVector combine(RRaw left, RRawVector right) {
         int dataLength = right.getLength();
         byte[] result = new byte[dataLength + 1];
@@ -84,7 +84,7 @@ public abstract class CombineBinaryRawNode extends CombineBinaryNode {
         return RDataFactory.createRawVector(result, combineNames(right, true));
     }
 
-    @Specialization(order = 8)
+    @Specialization
     public RRawVector combine(RRawVector left, RRawVector right) {
         return (RRawVector) genericCombine(left, right);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryStringNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryStringNode.java
index d83b8c9298..12743d0ba3 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryStringNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/CombineBinaryStringNode.java
@@ -35,32 +35,32 @@ public abstract class CombineBinaryStringNode extends CombineBinaryNode {
         return RNull.instance;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public String combine(RNull left, String right) {
         return right;
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public String combine(String left, RNull right) {
         return left;
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public RStringVector combine(RStringVector left, RNull right) {
         return left;
     }
 
-    @Specialization(order = 4)
+    @Specialization
     public RStringVector combine(RNull left, RStringVector right) {
         return right;
     }
 
-    @Specialization(order = 5)
+    @Specialization
     public RStringVector combine(String left, String right) {
         return RDataFactory.createStringVector(new String[]{left, right}, RDataFactory.INCOMPLETE_VECTOR);
     }
 
-    @Specialization(order = 6)
+    @Specialization
     public RStringVector combine(RStringVector left, String right) {
         int dataLength = left.getLength();
         String[] result = new String[dataLength + 1];
@@ -71,7 +71,7 @@ public abstract class CombineBinaryStringNode extends CombineBinaryNode {
         return RDataFactory.createStringVector(result, RDataFactory.INCOMPLETE_VECTOR, combineNames(left, false));
     }
 
-    @Specialization(order = 7)
+    @Specialization
     public RStringVector combine(String left, RStringVector right) {
         int dataLength = right.getLength();
         String[] result = new String[dataLength + 1];
@@ -82,7 +82,7 @@ public abstract class CombineBinaryStringNode extends CombineBinaryNode {
         return RDataFactory.createStringVector(result, RDataFactory.INCOMPLETE_VECTOR, combineNames(right, true));
     }
 
-    @Specialization(order = 8)
+    @Specialization
     public RStringVector combine(RStringVector left, RStringVector right) {
         return (RStringVector) genericCombine(left, right);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/RbindBinaryNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/RbindBinaryNode.java
index 040bb877f1..80d411dbe3 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/RbindBinaryNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/RbindBinaryNode.java
@@ -39,18 +39,18 @@ public abstract class RbindBinaryNode extends CombineBinaryNode {
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 3)
+    @Specialization
     public RAbstractVector rbind(RAbstractVector left, RNull right) {
         return left.copyWithNewDimensions(getDimensions(left));
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 4)
+    @Specialization
     public RAbstractVector rbind(RNull left, RAbstractVector right) {
         return right.copyWithNewDimensions(getDimensions(right));
     }
 
-    @Specialization(order = 100)
+    @Specialization
     public RAbstractVector rbind(RAbstractVector left, RAbstractVector right) {
         return genericRbind(left.materialize(), right.materialize());
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/UseMethodDispatchNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/UseMethodDispatchNode.java
index c09473df1f..41310f03a7 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/UseMethodDispatchNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/UseMethodDispatchNode.java
@@ -148,4 +148,4 @@ public class UseMethodDispatchNode extends S3DispatchNode {
         }
         findFunction(this.genericName, RRuntime.DEFAULT, callerFrame);
     }
-}
\ No newline at end of file
+}
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastComplexNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastComplexNode.java
index 86d0172935..c38dc59cb3 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastComplexNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastComplexNode.java
@@ -48,35 +48,35 @@ public abstract class CastComplexNode extends CastNode {
         return RNull.instance;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public RComplex doInt(int operand) {
         naCheck.enable(operand);
         return naCheck.convertIntToComplex(operand);
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public RComplex doDouble(double operand) {
         naCheck.enable(operand);
         return naCheck.convertDoubleToComplex(operand);
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public RComplex doLogical(byte operand) {
         naCheck.enable(operand);
         return naCheck.convertLogicalToComplex(operand);
     }
 
-    @Specialization(order = 4)
+    @Specialization
     public RComplex doComplex(RComplex operand) {
         return operand;
     }
 
-    @Specialization(order = 5)
+    @Specialization
     public RComplex doRaw(RRaw operand) {
         return RDataFactory.createComplex(operand.getValue(), 0);
     }
 
-    @Specialization(order = 6)
+    @Specialization
     public RComplex doCharacter(String operand) {
         naCheck.enable(operand);
         RComplex result = naCheck.convertStringToComplex(operand);
@@ -136,7 +136,7 @@ public abstract class CastComplexNode extends CastNode {
         return performAbstractIntVector(operand);
     }
 
-    @Specialization(order = 101, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RComplexVector doLogicalVectorDims(RLogicalVector operand) {
         double[] ddata = dataFromLogical(operand);
         RComplexVector ret = RDataFactory.createComplexVector(ddata, naCheck.neverSeenNA(), operand.getDimensions());
@@ -146,7 +146,7 @@ public abstract class CastComplexNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 102, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RComplexVector doLogicalVectorNames(RLogicalVector operand) {
         double[] ddata = dataFromLogical(operand);
         RComplexVector ret = RDataFactory.createComplexVector(ddata, naCheck.neverSeenNA(), operand.getNames());
@@ -156,7 +156,7 @@ public abstract class CastComplexNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 103, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RComplexVector doLogicalVectorDimsNames(RLogicalVector operand) {
         double[] ddata = dataFromLogical(operand);
         RComplexVector ret = RDataFactory.createComplexVector(ddata, naCheck.neverSeenNA(), operand.getDimensions(), operand.getNames());
@@ -166,7 +166,7 @@ public abstract class CastComplexNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 104, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RComplexVector doLogicalVector(RLogicalVector operand) {
         double[] ddata = dataFromLogical(operand);
         RComplexVector ret = RDataFactory.createComplexVector(ddata, naCheck.neverSeenNA());
@@ -176,7 +176,7 @@ public abstract class CastComplexNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 105, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RComplexVector doStringVectorDims(RStringVector operand) {
         double[] ddata = dataFromString(operand);
         RComplexVector ret = RDataFactory.createComplexVector(ddata, naCheck.neverSeenNA(), operand.getDimensions());
@@ -186,7 +186,7 @@ public abstract class CastComplexNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 106, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RComplexVector doStringVectorNames(RStringVector operand) {
         double[] ddata = dataFromString(operand);
         RComplexVector ret = RDataFactory.createComplexVector(ddata, naCheck.neverSeenNA(), operand.getNames());
@@ -196,7 +196,7 @@ public abstract class CastComplexNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 107, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RComplexVector doStringVectorDimsNames(RStringVector operand) {
         double[] ddata = dataFromString(operand);
         RComplexVector ret = RDataFactory.createComplexVector(ddata, naCheck.neverSeenNA(), operand.getDimensions(), operand.getNames());
@@ -206,7 +206,7 @@ public abstract class CastComplexNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 108, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RComplexVector doStringVector(RStringVector operand) {
         double[] ddata = dataFromString(operand);
         RComplexVector ret = RDataFactory.createComplexVector(ddata, naCheck.neverSeenNA());
@@ -231,7 +231,7 @@ public abstract class CastComplexNode extends CastNode {
         return vector;
     }
 
-    @Specialization(order = 109, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RComplexVector doRawVectorDims(RRawVector operand) {
         double[] ddata = dataFromRaw(operand);
         RComplexVector ret = RDataFactory.createComplexVector(ddata, RDataFactory.COMPLETE_VECTOR, operand.getDimensions());
@@ -241,7 +241,7 @@ public abstract class CastComplexNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 110, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RComplexVector doRawVectorNames(RRawVector operand) {
         double[] ddata = dataFromRaw(operand);
         RComplexVector ret = RDataFactory.createComplexVector(ddata, RDataFactory.COMPLETE_VECTOR, operand.getNames());
@@ -251,7 +251,7 @@ public abstract class CastComplexNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 111, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RComplexVector doRawVectorDimsNames(RRawVector operand) {
         double[] ddata = dataFromRaw(operand);
         RComplexVector ret = RDataFactory.createComplexVector(ddata, RDataFactory.COMPLETE_VECTOR, operand.getDimensions(), operand.getNames());
@@ -261,7 +261,7 @@ public abstract class CastComplexNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 112, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RComplexVector doRawVector(RRawVector operand) {
         double[] ddata = dataFromRaw(operand);
         RComplexVector ret = RDataFactory.createComplexVector(ddata, RDataFactory.COMPLETE_VECTOR);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java
index 770c776260..f44fadc292 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastDoubleNode.java
@@ -58,18 +58,18 @@ public abstract class CastDoubleNode extends CastNode {
         return RNull.instance;
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public double doInt(int operand) {
         naCheck.enable(operand);
         return naCheck.convertIntToDouble(operand);
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public double doDouble(double operand) {
         return operand;
     }
 
-    @Specialization(order = 20)
+    @Specialization
     public double doDouble(RComplex operand) {
         naCheck.enable(operand);
         double result = naCheck.convertComplexToDouble(operand);
@@ -79,13 +79,13 @@ public abstract class CastDoubleNode extends CastNode {
         return result;
     }
 
-    @Specialization(order = 30)
+    @Specialization
     public double doLogical(byte operand) {
         naCheck.enable(operand);
         return naCheck.convertLogicalToDouble(operand);
     }
 
-    @Specialization(order = 40)
+    @Specialization
     public double doString(String operand) {
         naCheck.enable(operand);
         double result = naCheck.convertStringToDouble(operand);
@@ -163,7 +163,7 @@ public abstract class CastDoubleNode extends CastNode {
         return performAbstractIntVector(operand);
     }
 
-    @Specialization(order = 101, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RDoubleVector doLogicalVectorDims(RLogicalVector operand) {
         double[] ddata = dataFromLogical(operand);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA(), operand.getDimensions());
@@ -173,7 +173,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 102, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RDoubleVector doLogicalVectorNames(RLogicalVector operand) {
         double[] ddata = dataFromLogical(operand);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA(), operand.getNames());
@@ -183,7 +183,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 103, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RDoubleVector doLogicalVectorDimsNames(RLogicalVector operand) {
         double[] ddata = dataFromLogical(operand);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA(), operand.getDimensions(), operand.getNames());
@@ -193,7 +193,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 104, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RDoubleVector doLogicalVector(RLogicalVector operand) {
         double[] ddata = dataFromLogical(operand);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA());
@@ -203,7 +203,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 105, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RDoubleVector doStringVectorDims(RStringVector operand) {
         double[] ddata = dataFromString(operand);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA(), operand.getDimensions());
@@ -213,7 +213,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 106, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RDoubleVector doStringVectorNames(RStringVector operand) {
         double[] ddata = dataFromString(operand);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA(), operand.getNames());
@@ -223,7 +223,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 107, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RDoubleVector doStringVectorDimsNames(RStringVector operand) {
         double[] ddata = dataFromString(operand);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA(), operand.getDimensions(), operand.getNames());
@@ -233,7 +233,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 108, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RDoubleVector doStringVector(RStringVector operand) {
         double[] ddata = dataFromString(operand);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA());
@@ -243,7 +243,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 109, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RDoubleVector doComplexVectorDims(RComplexVector operand) {
         double[] ddata = dataFromComplex(operand);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA(), operand.getDimensions());
@@ -253,7 +253,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 110, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RDoubleVector doComplexVectorNames(RComplexVector operand) {
         double[] ddata = dataFromComplex(operand);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA(), operand.getNames());
@@ -263,7 +263,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 111, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RDoubleVector doComplexVectorDimsNames(RComplexVector operand) {
         double[] ddata = dataFromComplex(operand);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA(), operand.getDimensions(), operand.getNames());
@@ -273,7 +273,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 112, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RDoubleVector doComplexVector(RComplexVector operand) {
         double[] ddata = dataFromComplex(operand);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA());
@@ -283,7 +283,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 113, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RDoubleVector doRawVectorDims(RRawVector vector) {
         double[] ddata = dataFromRaw(vector);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA(), vector.getDimensions());
@@ -293,7 +293,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 114, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RDoubleVector doRawVectorNames(RRawVector vector) {
         double[] ddata = dataFromRaw(vector);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA(), vector.getNames());
@@ -303,7 +303,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 115, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RDoubleVector doRawVectorDimsNames(RRawVector vector) {
         double[] ddata = dataFromRaw(vector);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA(), vector.getDimensions(), vector.getNames());
@@ -313,7 +313,7 @@ public abstract class CastDoubleNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 116, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RDoubleVector doRawVector(RRawVector vector) {
         double[] ddata = dataFromRaw(vector);
         RDoubleVector ret = RDataFactory.createDoubleVector(ddata, naCheck.neverSeenNA());
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java
index 1f3b633ff0..cd9ebd1d59 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastIntegerNode.java
@@ -174,7 +174,7 @@ public abstract class CastIntegerNode extends CastNode {
         return idata;
     }
 
-    @Specialization(order = 101, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RIntVector doComplexVectorDims(RComplexVector vector) {
         int[] result = dataFromComplex(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA(), vector.getDimensions());
@@ -184,7 +184,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 102, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RIntVector doComplexVectorNames(RComplexVector vector) {
         int[] result = dataFromComplex(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA(), vector.getNames());
@@ -194,7 +194,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 103, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RIntVector doComplexVectorDimsNames(RComplexVector vector) {
         int[] result = dataFromComplex(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA(), vector.getDimensions(), vector.getNames());
@@ -204,7 +204,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 104, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RIntVector doComplexVector(RComplexVector vector) {
         int[] result = dataFromComplex(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA());
@@ -214,7 +214,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 105, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RIntVector doStringVectorDims(RStringVector vector) {
         int[] result = dataFromString(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA(), vector.getDimensions());
@@ -224,7 +224,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 106, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RIntVector doStringVectorNames(RStringVector vector) {
         int[] result = dataFromString(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA(), vector.getNames());
@@ -234,7 +234,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 107, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RIntVector doStringVectorDimsNames(RStringVector vector) {
         int[] result = dataFromString(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA(), vector.getDimensions(), vector.getNames());
@@ -244,7 +244,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 108, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RIntVector doStringVector(RStringVector vector) {
         int[] result = dataFromString(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA());
@@ -254,7 +254,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 109, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RIntVector doLogicalVectorDims(RLogicalVector vector) {
         int[] result = dataFromLogical(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA(), vector.getDimensions());
@@ -264,7 +264,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 110, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RIntVector doLogicalVectorNames(RLogicalVector vector) {
         int[] result = dataFromLogical(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA(), vector.getNames());
@@ -274,7 +274,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 111, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RIntVector doLogicalVectorDimsNames(RLogicalVector vector) {
         int[] result = dataFromLogical(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA(), vector.getDimensions(), vector.getNames());
@@ -284,7 +284,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 112, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RIntVector doLogicalVector(RLogicalVector vector) {
         int[] result = dataFromLogical(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA());
@@ -294,7 +294,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 113, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RIntVector doDoubleVectorDims(RDoubleVector vector) {
         check.enable(vector);
         int[] result = check.convertDoubleVectorToIntData(vector);
@@ -305,7 +305,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 114, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RIntVector doDoubleVectorNames(RDoubleVector vector) {
         check.enable(vector);
         int[] result = check.convertDoubleVectorToIntData(vector);
@@ -316,7 +316,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 115, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RIntVector doDoubleVectorDimsNames(RDoubleVector vector) {
         check.enable(vector);
         int[] result = check.convertDoubleVectorToIntData(vector);
@@ -327,7 +327,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 116, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RIntVector doDoubleVector(RDoubleVector vector) {
         check.enable(vector);
         int[] result = check.convertDoubleVectorToIntData(vector);
@@ -338,7 +338,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 117, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RIntVector doRawVectorDims(RRawVector vector) {
         int[] result = dataFromRaw(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA(), vector.getDimensions());
@@ -348,7 +348,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 118, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RIntVector doRawVectorNames(RRawVector vector) {
         int[] result = dataFromRaw(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA(), vector.getNames());
@@ -358,7 +358,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 119, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RIntVector doRawVectorDimsNames(RRawVector vector) {
         int[] result = dataFromRaw(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA(), vector.getDimensions(), vector.getNames());
@@ -368,7 +368,7 @@ public abstract class CastIntegerNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 120, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RIntVector doRawVector(RRawVector vector) {
         int[] result = dataFromRaw(vector);
         RIntVector ret = RDataFactory.createIntVector(result, check.neverSeenNA());
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastListNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastListNode.java
index d6fb332eb4..5337a17776 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastListNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastListNode.java
@@ -31,23 +31,23 @@ public abstract class CastListNode extends CastNode {
 
     public abstract RList executeList(VirtualFrame frame, Object o);
 
-    @Specialization(order = 0)
+    @Specialization
     @SuppressWarnings("unused")
     public RList doNull(RNull operand) {
         return RDataFactory.createList();
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public RList doDouble(double operand) {
         return RDataFactory.createList(new Object[]{operand});
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public RList doInt(int operand) {
         return RDataFactory.createList(new Object[]{operand});
     }
 
-    @Specialization(order = 101)
+    @Specialization
     public RList doAbstractVector(RAbstractVector operand) {
         Object[] data = new Object[operand.getLength()];
         for (int i = 0; i < data.length; ++i) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java
index 8e3a4218b6..a0fa8c3af8 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastLogicalNode.java
@@ -142,7 +142,7 @@ public abstract class CastLogicalNode extends CastNode {
         return performAbstractDoubleVector(operand);
     }
 
-    @Specialization(order = 101, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RLogicalVector doStringVectorDims(RStringVector operand) {
         byte[] ldata = dataFromString(operand);
         RLogicalVector ret = RDataFactory.createLogicalVector(ldata, naCheck.neverSeenNA(), operand.getDimensions());
@@ -152,7 +152,7 @@ public abstract class CastLogicalNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 102, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RLogicalVector doStringVectorNames(RStringVector operand) {
         byte[] ldata = dataFromString(operand);
         RLogicalVector ret = RDataFactory.createLogicalVector(ldata, naCheck.neverSeenNA(), operand.getNames());
@@ -162,7 +162,7 @@ public abstract class CastLogicalNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 103, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RLogicalVector doStringVectorDimsNames(RStringVector operand) {
         byte[] ldata = dataFromString(operand);
         RLogicalVector ret = RDataFactory.createLogicalVector(ldata, naCheck.neverSeenNA(), operand.getDimensions(), operand.getNames());
@@ -172,7 +172,7 @@ public abstract class CastLogicalNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 104, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RLogicalVector doStringVector(RStringVector operand) {
         byte[] ldata = dataFromString(operand);
         RLogicalVector ret = RDataFactory.createLogicalVector(ldata, naCheck.neverSeenNA());
@@ -182,7 +182,7 @@ public abstract class CastLogicalNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 105, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RLogicalVector doComplexVectorDims(RComplexVector operand) {
         byte[] ldata = dataFromComplex(operand);
         RLogicalVector ret = RDataFactory.createLogicalVector(ldata, naCheck.neverSeenNA(), operand.getDimensions());
@@ -192,7 +192,7 @@ public abstract class CastLogicalNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 106, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RLogicalVector doComplexVectorNames(RComplexVector operand) {
         byte[] ldata = dataFromComplex(operand);
         RLogicalVector ret = RDataFactory.createLogicalVector(ldata, naCheck.neverSeenNA(), operand.getNames());
@@ -202,7 +202,7 @@ public abstract class CastLogicalNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 107, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RLogicalVector doComplexVectorDimsNames(RComplexVector operand) {
         byte[] ldata = dataFromComplex(operand);
         RLogicalVector ret = RDataFactory.createLogicalVector(ldata, naCheck.neverSeenNA(), operand.getDimensions(), operand.getNames());
@@ -212,7 +212,7 @@ public abstract class CastLogicalNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 108, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RLogicalVector doComplexVector(RComplexVector operand) {
         byte[] ldata = dataFromComplex(operand);
         RLogicalVector ret = RDataFactory.createLogicalVector(ldata, naCheck.neverSeenNA());
@@ -222,7 +222,7 @@ public abstract class CastLogicalNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 109, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RLogicalVector doRawVectorDims(RRawVector operand) {
         byte[] ldata = dataFromRaw(operand);
         RLogicalVector ret = RDataFactory.createLogicalVector(ldata, RDataFactory.COMPLETE_VECTOR, operand.getDimensions());
@@ -232,7 +232,7 @@ public abstract class CastLogicalNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 110, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RLogicalVector doRawVectorNames(RRawVector operand) {
         byte[] ldata = dataFromRaw(operand);
         RLogicalVector ret = RDataFactory.createLogicalVector(ldata, RDataFactory.COMPLETE_VECTOR, operand.getNames());
@@ -242,7 +242,7 @@ public abstract class CastLogicalNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 111, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RLogicalVector doRawVectorDimsNames(RRawVector operand) {
         byte[] ldata = dataFromRaw(operand);
         RLogicalVector ret = RDataFactory.createLogicalVector(ldata, RDataFactory.COMPLETE_VECTOR, operand.getDimensions(), operand.getNames());
@@ -252,7 +252,7 @@ public abstract class CastLogicalNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 112, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RLogicalVector doRawVector(RRawVector operand) {
         byte[] ldata = dataFromRaw(operand);
         RLogicalVector ret = RDataFactory.createLogicalVector(ldata, RDataFactory.COMPLETE_VECTOR);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java
index a981d48da7..7b6cb32830 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastRawNode.java
@@ -172,7 +172,7 @@ public abstract class CastRawNode extends CastNode {
         return performAbstractIntVector(value);
     }
 
-    @Specialization(order = 101, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RRawVector doLogicalVectorDims(RLogicalVector operand) {
         byte[] bdata = dataFromLogical(operand);
         RRawVector ret = RDataFactory.createRawVector(bdata, operand.getDimensions());
@@ -182,7 +182,7 @@ public abstract class CastRawNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 102, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RRawVector doLogicalVectorNames(RLogicalVector operand) {
         byte[] bdata = dataFromLogical(operand);
         RRawVector ret = RDataFactory.createRawVector(bdata, operand.getNames());
@@ -192,7 +192,7 @@ public abstract class CastRawNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 103, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RRawVector doLogicalVectorDimsNames(RLogicalVector operand) {
         byte[] bdata = dataFromLogical(operand);
         RRawVector ret = RDataFactory.createRawVector(bdata, operand.getDimensions(), operand.getNames());
@@ -202,7 +202,7 @@ public abstract class CastRawNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 104, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RRawVector doLogicalVector(RLogicalVector operand) {
         byte[] bdata = dataFromLogical(operand);
         RRawVector ret = RDataFactory.createRawVector(bdata);
@@ -212,7 +212,7 @@ public abstract class CastRawNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 105, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RRawVector doStringVectorDims(RStringVector operand) {
         byte[] bdata = dataFromString(operand);
         RRawVector ret = RDataFactory.createRawVector(bdata, operand.getDimensions());
@@ -222,7 +222,7 @@ public abstract class CastRawNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 106, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RRawVector doStringVectorNames(RStringVector operand) {
         byte[] bdata = dataFromString(operand);
         RRawVector ret = RDataFactory.createRawVector(bdata, operand.getNames());
@@ -232,7 +232,7 @@ public abstract class CastRawNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 107, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RRawVector doStringVectorDimsNames(RStringVector operand) {
         byte[] bdata = dataFromString(operand);
         RRawVector ret = RDataFactory.createRawVector(bdata, operand.getDimensions(), operand.getNames());
@@ -242,7 +242,7 @@ public abstract class CastRawNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 108, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RRawVector doStringVector(RStringVector operand) {
         byte[] bdata = dataFromString(operand);
         RRawVector ret = RDataFactory.createRawVector(bdata);
@@ -252,7 +252,7 @@ public abstract class CastRawNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 109, guards = {"!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "preserveDimensions"})
     public RRawVector doRawVectorDims(RComplexVector operand) {
         byte[] bdata = dataFromComplex(operand);
         RRawVector ret = RDataFactory.createRawVector(bdata, operand.getDimensions());
@@ -262,7 +262,7 @@ public abstract class CastRawNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 110, guards = {"preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "!preserveDimensions"})
     public RRawVector doComplexVectorNames(RComplexVector operand) {
         byte[] bdata = dataFromComplex(operand);
         RRawVector ret = RDataFactory.createRawVector(bdata, operand.getNames());
@@ -272,7 +272,7 @@ public abstract class CastRawNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 111, guards = {"preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"preserveNames", "preserveDimensions"})
     public RRawVector doComplexVectorDimsNames(RComplexVector operand) {
         byte[] bdata = dataFromComplex(operand);
         RRawVector ret = RDataFactory.createRawVector(bdata, operand.getDimensions(), operand.getNames());
@@ -282,7 +282,7 @@ public abstract class CastRawNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 112, guards = {"!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!preserveNames", "!preserveDimensions"})
     public RRawVector doComplexVector(RComplexVector operand) {
         byte[] bdata = dataFromComplex(operand);
         RRawVector ret = RDataFactory.createRawVector(bdata);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java
index 72ce6ec77e..1291001b22 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastStringNode.java
@@ -112,37 +112,37 @@ public abstract class CastStringNode extends CastNode {
         return sdata;
     }
 
-    @Specialization(order = 100, guards = "isZeroLength")
+    @Specialization(guards = "isZeroLength")
     public Object doEmptyVector(@SuppressWarnings("unused") RAbstractVector vector) {
         return isEmptyVectorConvertedToNull() ? RNull.instance : RDataFactory.createStringVector(0);
     }
 
-    @Specialization(order = 102, guards = "!isZeroLength")
+    @Specialization(guards = "!isZeroLength")
     public RStringVector doStringVector(RStringVector vector) {
         return vector;
     }
 
-    @Specialization(order = 103, guards = "!isZeroLength")
+    @Specialization(guards = "!isZeroLength")
     public RStringVector doIntVector(VirtualFrame frame, RIntVector vector) {
         return performAbstractIntVector(frame, vector);
     }
 
-    @Specialization(order = 104, guards = "!isZeroLength")
+    @Specialization(guards = "!isZeroLength")
     public RStringVector doDoubleVector(VirtualFrame frame, RDoubleVector vector) {
         return performAbstractDoubleVector(frame, vector);
     }
 
-    @Specialization(order = 105, guards = "!isZeroLength")
+    @Specialization(guards = "!isZeroLength")
     public RStringVector doIntSequence(VirtualFrame frame, RIntSequence vector) {
         return performAbstractIntVector(frame, vector);
     }
 
-    @Specialization(order = 106, guards = "!isZeroLength")
+    @Specialization(guards = "!isZeroLength")
     public RStringVector doDoubleSequence(VirtualFrame frame, RDoubleSequence vector) {
         return performAbstractDoubleVector(frame, vector);
     }
 
-    @Specialization(order = 107, guards = {"!isZeroLength", "!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "!preserveNames", "preserveDimensions"})
     public RStringVector doLogicalVectorDims(VirtualFrame frame, RLogicalVector vector) {
         String[] result = dataFromLogical(frame, vector);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR, vector.getDimensions());
@@ -152,7 +152,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 108, guards = {"!isZeroLength", "preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "preserveNames", "!preserveDimensions"})
     public RStringVector doLogicalVectorNames(VirtualFrame frame, RLogicalVector vector) {
         String[] result = dataFromLogical(frame, vector);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR, vector.getNames());
@@ -162,7 +162,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 109, guards = {"!isZeroLength", "preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "preserveNames", "preserveDimensions"})
     public RStringVector doLogicalVectorDimsNames(VirtualFrame frame, RLogicalVector vector) {
         String[] result = dataFromLogical(frame, vector);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR, vector.getDimensions(), vector.getNames());
@@ -172,7 +172,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 110, guards = {"!isZeroLength", "!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "!preserveNames", "!preserveDimensions"})
     public RStringVector doLogicalVector(VirtualFrame frame, RLogicalVector vector) {
         String[] result = dataFromLogical(frame, vector);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR);
@@ -182,7 +182,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 111, guards = {"!isZeroLength", "!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "!preserveNames", "preserveDimensions"})
     public RStringVector doComplexVectorDims(VirtualFrame frame, RComplexVector vector) {
         String[] result = dataFromComplex(frame, vector);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR, vector.getDimensions());
@@ -192,7 +192,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 112, guards = {"!isZeroLength", "preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "preserveNames", "!preserveDimensions"})
     public RStringVector doComplexVectorNames(VirtualFrame frame, RComplexVector vector) {
         String[] result = dataFromComplex(frame, vector);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR, vector.getNames());
@@ -202,7 +202,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 113, guards = {"!isZeroLength", "preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "preserveNames", "preserveDimensions"})
     public RStringVector doComplexVectorDimsNames(VirtualFrame frame, RComplexVector vector) {
         String[] result = dataFromComplex(frame, vector);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR, vector.getDimensions(), vector.getNames());
@@ -212,7 +212,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 114, guards = {"!isZeroLength", "!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "!preserveNames", "!preserveDimensions"})
     public RStringVector doComplexVector(VirtualFrame frame, RComplexVector vector) {
         String[] result = dataFromComplex(frame, vector);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR);
@@ -222,7 +222,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 115, guards = {"!isZeroLength", "!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "!preserveNames", "preserveDimensions"})
     public RStringVector doRawVectorDims(VirtualFrame frame, RRawVector vector) {
         String[] result = dataFromRaw(frame, vector);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR, vector.getDimensions());
@@ -232,7 +232,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 116, guards = {"!isZeroLength", "preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "preserveNames", "!preserveDimensions"})
     public RStringVector doRawVectorNames(VirtualFrame frame, RRawVector vector) {
         String[] result = dataFromRaw(frame, vector);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR, vector.getNames());
@@ -242,7 +242,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 117, guards = {"!isZeroLength", "preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "preserveNames", "preserveDimensions"})
     public RStringVector doRawVectorDimsNames(VirtualFrame frame, RRawVector vector) {
         String[] result = dataFromRaw(frame, vector);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR, vector.getDimensions(), vector.getNames());
@@ -252,7 +252,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 118, guards = {"!isZeroLength", "!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "!preserveNames", "!preserveDimensions"})
     public RStringVector doRawVector(VirtualFrame frame, RRawVector vector) {
         String[] result = dataFromRaw(frame, vector);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR);
@@ -262,7 +262,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 119, guards = {"!isZeroLength", "!preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "!preserveNames", "preserveDimensions"})
     public RStringVector doListDims(VirtualFrame frame, RList list) {
         String[] result = dataFromList(frame, list);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR, list.getDimensions());
@@ -272,7 +272,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 120, guards = {"!isZeroLength", "preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "preserveNames", "!preserveDimensions"})
     public RStringVector doListNames(VirtualFrame frame, RList list) {
         String[] result = dataFromList(frame, list);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR, list.getNames());
@@ -282,7 +282,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 121, guards = {"!isZeroLength", "preserveNames", "preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "preserveNames", "preserveDimensions"})
     public RStringVector doListDimsNames(VirtualFrame frame, RList list) {
         String[] result = dataFromList(frame, list);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR, list.getDimensions(), list.getNames());
@@ -292,7 +292,7 @@ public abstract class CastStringNode extends CastNode {
         return ret;
     }
 
-    @Specialization(order = 122, guards = {"!isZeroLength", "!preserveNames", "!preserveDimensions"})
+    @Specialization(guards = {"!isZeroLength", "!preserveNames", "!preserveDimensions"})
     public RStringVector doList(VirtualFrame frame, RList list) {
         String[] result = dataFromList(frame, list);
         RStringVector ret = RDataFactory.createStringVector(result, RDataFactory.COMPLETE_VECTOR);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastToContainerNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastToContainerNode.java
index cc282ed94d..a77dfb46c7 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastToContainerNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastToContainerNode.java
@@ -40,24 +40,24 @@ public abstract class CastToContainerNode extends CastNode {
         return isNonContainerPreserved();
     }
 
-    @Specialization(order = 1, guards = "preserveNonContainer")
+    @Specialization(guards = "preserveNonContainer")
     @SuppressWarnings("unused")
     public RNull castNull(RNull rnull) {
         return RNull.instance;
     }
 
-    @Specialization(order = 2, guards = "!preserveNonContainer")
+    @Specialization(guards = "!preserveNonContainer")
     @SuppressWarnings("unused")
     public RAbstractVector cast(RNull rnull) {
         return RDataFactory.createList();
     }
 
-    @Specialization(order = 3, guards = "preserveNonContainer")
+    @Specialization(guards = "preserveNonContainer")
     public RFunction castFunction(RFunction f) {
         return f;
     }
 
-    @Specialization(order = 4, guards = "!preserveNonContainer")
+    @Specialization(guards = "!preserveNonContainer")
     @SuppressWarnings("unused")
     public RAbstractVector cast(RFunction f) {
         return RDataFactory.createList();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastToVectorNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastToVectorNode.java
index 6c1db9910a..2ab4db4da8 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastToVectorNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastToVectorNode.java
@@ -38,24 +38,24 @@ public abstract class CastToVectorNode extends CastNode {
         return isNonVectorPreserved();
     }
 
-    @Specialization(order = 1, guards = "preserveNonVector")
+    @Specialization(guards = "preserveNonVector")
     @SuppressWarnings("unused")
     public RNull castNull(RNull rnull) {
         return RNull.instance;
     }
 
-    @Specialization(order = 2, guards = "!preserveNonVector")
+    @Specialization(guards = "!preserveNonVector")
     @SuppressWarnings("unused")
     public RAbstractVector cast(RNull rnull) {
         return RDataFactory.createList();
     }
 
-    @Specialization(order = 3, guards = "preserveNonVector")
+    @Specialization(guards = "preserveNonVector")
     public RFunction castFunction(RFunction f) {
         return f;
     }
 
-    @Specialization(order = 4, guards = "!preserveNonVector")
+    @Specialization(guards = "!preserveNonVector")
     @SuppressWarnings("unused")
     public RAbstractVector cast(RFunction f) {
         return RDataFactory.createList();
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/InheritsNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/InheritsNode.java
index 4475c803d3..e1a0c9bfe8 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/InheritsNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/InheritsNode.java
@@ -28,19 +28,19 @@ public abstract class InheritsNode extends RBuiltinNode {
     public abstract byte execute(VirtualFrame frame, Object x, Object what);
 
     @SuppressWarnings("unused")
-    @Specialization(order = 1)
+    @Specialization
     public Object doesInherit(RNull x, RAbstractStringVector what) {
         return RRuntime.LOGICAL_FALSE;
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 2)
+    @Specialization
     public Object doesInherit(REnvironment x, RAbstractStringVector what) {
         return RRuntime.LOGICAL_FALSE;
     }
 
     // map operations lead to recursion resulting in compilation failure
-    @Specialization(order = 0)
+    @Specialization
     public Object doesInherit(RAbstractVector x, RAbstractStringVector what) {
         Map<String, Integer> classToPos = initClassToPos(x);
         for (int i = 0; i < what.getLength(); ++i) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/PrecedenceNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/PrecedenceNode.java
index 823e47edc7..bf68965d8b 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/PrecedenceNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/PrecedenceNode.java
@@ -135,7 +135,7 @@ public abstract class PrecedenceNode extends UnaryNode {
         return STRING_PRECEDENCE;
     }
 
-    @Specialization(order = 100, guards = "isRecursive")
+    @Specialization(guards = "isRecursive")
     public int doListRecursive(VirtualFrame frame, RList val, byte recursive) {
         int precedence = -1;
         for (int i = 0; i < val.getLength(); ++i) {
@@ -145,7 +145,7 @@ public abstract class PrecedenceNode extends UnaryNode {
         return precedence;
     }
 
-    @Specialization(order = 110, guards = "!isRecursive")
+    @Specialization(guards = "!isRecursive")
     public int doList(RList val, byte recursive) {
         return LIST_PRECEDENCE;
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/ToStringNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/ToStringNode.java
index 19128d729f..958c3861af 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/ToStringNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/ToStringNode.java
@@ -129,7 +129,7 @@ public abstract class ToStringNode extends UnaryNode {
     }
 
     @SlowPath
-    @Specialization(order = 100)
+    @Specialization
     public String toString(RIntVector vector) {
         int length = vector.getLength();
         if (length == 0) {
@@ -146,7 +146,7 @@ public abstract class ToStringNode extends UnaryNode {
     }
 
     @SlowPath
-    @Specialization(order = 200)
+    @Specialization
     public String toString(RDoubleVector vector) {
         int length = vector.getLength();
         if (length == 0) {
@@ -180,7 +180,7 @@ public abstract class ToStringNode extends UnaryNode {
     }
 
     @SlowPath
-    @Specialization(order = 300)
+    @Specialization
     public String toString(RLogicalVector vector) {
         int length = vector.getLength();
         if (length == 0) {
@@ -214,7 +214,7 @@ public abstract class ToStringNode extends UnaryNode {
     }
 
     @SlowPath
-    @Specialization(order = 500)
+    @Specialization
     public String toString(RComplexVector vector) {
         int length = vector.getLength();
         if (length == 0) {
@@ -231,7 +231,7 @@ public abstract class ToStringNode extends UnaryNode {
     }
 
     @SlowPath
-    @Specialization(order = 600)
+    @Specialization
     public String toString(VirtualFrame frame, RList vector) {
         int length = vector.getLength();
         if (length == 0) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/TypeofNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/TypeofNode.java
index 7a29f44ac3..293e55d6d0 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/TypeofNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/TypeofNode.java
@@ -136,12 +136,12 @@ public abstract class TypeofNode extends UnaryNode {
         return RRuntime.TYPE_PAIR_LIST;
     }
 
-    @Specialization(order = 100, guards = "isFunctionBuiltin")
+    @Specialization(guards = "isFunctionBuiltin")
     public String typeofBuiltin(RFunction obj) {
         return "builtin";
     }
 
-    @Specialization(order = 101, guards = "!isFunctionBuiltin")
+    @Specialization(guards = "!isFunctionBuiltin")
     public String typeofClosure(RFunction obj) {
         return "closure";
     }
@@ -154,4 +154,4 @@ public abstract class TypeofNode extends UnaryNode {
     public static boolean isFunctionBuiltin(RFunction fun) {
         return fun.isBuiltin();
     }
-}
\ No newline at end of file
+}
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryArithmeticNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryArithmeticNode.java
index 4bd7660fa9..3bd6487574 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryArithmeticNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryArithmeticNode.java
@@ -47,42 +47,42 @@ public abstract class UnaryArithmeticNode extends UnaryNode {
 
     public abstract Object execute(VirtualFrame frame, Object operand);
 
-    @Specialization(order = 0, guards = "!isNA")
+    @Specialization(guards = "!isNA")
     public int doInt(int operand) {
         return arithmetic.op(operand);
     }
 
-    @Specialization(order = 1, guards = "isNA")
+    @Specialization(guards = "isNA")
     public int doIntNA(@SuppressWarnings("unused") int operand) {
         return RRuntime.INT_NA;
     }
 
-    @Specialization(order = 2, guards = "!isNA")
+    @Specialization(guards = "!isNA")
     public double doDouble(double operand) {
         return arithmetic.op(operand);
     }
 
-    @Specialization(order = 3, guards = "isNA")
+    @Specialization(guards = "isNA")
     public double doDoubleNA(@SuppressWarnings("unused") double operand) {
         return RRuntime.DOUBLE_NA;
     }
 
-    @Specialization(order = 5, guards = "!isComplexNA")
+    @Specialization(guards = "!isComplexNA")
     public RComplex doComplex(RComplex operand) {
         return arithmetic.op(operand.getRealPart(), operand.getImaginaryPart());
     }
 
-    @Specialization(order = 6, guards = "isComplexNA")
+    @Specialization(guards = "isComplexNA")
     public RComplex doComplexNA(@SuppressWarnings("unused") RComplex operand) {
         return RRuntime.createComplexNA();
     }
 
-    @Specialization(order = 7, guards = "!isNA")
+    @Specialization(guards = "!isNA")
     public int doLogical(byte operand) {
         return arithmetic.op(operand);
     }
 
-    @Specialization(order = 8, guards = "isNA")
+    @Specialization(guards = "isNA")
     public int doLogicalNA(@SuppressWarnings("unused") byte operand) {
         return RRuntime.INT_NA;
     }
@@ -93,7 +93,7 @@ public abstract class UnaryArithmeticNode extends UnaryNode {
         ret.copyNamesFrom(v);
     }
 
-    @Specialization(order = 10, guards = "isComplete")
+    @Specialization(guards = "isComplete")
     public RDoubleVector doDoubleVector(RAbstractDoubleVector operands) {
         double[] res = new double[operands.getLength()];
         for (int i = 0; i < operands.getLength(); ++i) {
@@ -104,7 +104,7 @@ public abstract class UnaryArithmeticNode extends UnaryNode {
         return ret;
     }
 
-    @Specialization(order = 11, guards = "!isComplete")
+    @Specialization(guards = "!isComplete")
     public RDoubleVector doDoubleVectorNA(RAbstractDoubleVector operands) {
         double[] res = new double[operands.getLength()];
         na.enable(operands);
@@ -120,7 +120,7 @@ public abstract class UnaryArithmeticNode extends UnaryNode {
         return ret;
     }
 
-    @Specialization(order = 20, guards = "isComplete")
+    @Specialization(guards = "isComplete")
     public RComplexVector doComplexVector(RAbstractComplexVector operands) {
         double[] res = new double[operands.getLength() * 2];
         for (int i = 0; i < operands.getLength(); ++i) {
@@ -133,7 +133,7 @@ public abstract class UnaryArithmeticNode extends UnaryNode {
         return ret;
     }
 
-    @Specialization(order = 21, guards = "!isComplete")
+    @Specialization(guards = "!isComplete")
     public RComplexVector doComplexVectorNA(RAbstractComplexVector operands) {
         double[] res = new double[operands.getLength() * 2];
         na.enable(operands);
@@ -152,7 +152,7 @@ public abstract class UnaryArithmeticNode extends UnaryNode {
         return ret;
     }
 
-    @Specialization(order = 30, guards = "isComplete")
+    @Specialization(guards = "isComplete")
     public RIntVector doIntVector(RAbstractIntVector operands) {
         int[] res = new int[operands.getLength()];
         for (int i = 0; i < operands.getLength(); ++i) {
@@ -163,7 +163,7 @@ public abstract class UnaryArithmeticNode extends UnaryNode {
         return ret;
     }
 
-    @Specialization(order = 31, guards = "!isComplete")
+    @Specialization(guards = "!isComplete")
     public RIntVector doIntVectorNA(RAbstractIntVector operands) {
         int[] res = new int[operands.getLength()];
         na.enable(operands);
@@ -179,22 +179,22 @@ public abstract class UnaryArithmeticNode extends UnaryNode {
         return ret;
     }
 
-    @Specialization(order = 40, guards = "isComplete")
+    @Specialization(guards = "isComplete")
     public RIntVector doLogicalVector(RAbstractLogicalVector operands) {
         return doIntVector(RClosures.createLogicalToIntVector(operands, na));
     }
 
-    @Specialization(order = 41, guards = "!isComplete")
+    @Specialization(guards = "!isComplete")
     public RIntVector doLogicalVectorNA(RAbstractLogicalVector operands) {
         return doIntVectorNA(RClosures.createLogicalToIntVector(operands, na));
     }
 
-    @Specialization(order = 50)
+    @Specialization
     public Object doStringVector(VirtualFrame frame, @SuppressWarnings("unused") RAbstractStringVector operands) {
         throw RError.error(frame, this.getEncapsulatingSourceSection(), RError.Message.INVALID_ARG_TYPE_UNARY);
     }
 
-    @Specialization(order = 51)
+    @Specialization
     public Object doRawVector(VirtualFrame frame, @SuppressWarnings("unused") RAbstractRawVector operands) {
         throw RError.error(frame, this.getEncapsulatingSourceSection(), RError.Message.INVALID_ARG_TYPE_UNARY);
     }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryArithmeticReduceNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryArithmeticReduceNode.java
index 76219b637d..00d4e44465 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryArithmeticReduceNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryArithmeticReduceNode.java
@@ -54,7 +54,7 @@ public abstract class UnaryArithmeticReduceNode extends UnaryNode {
         return semantics.isNullInt();
     }
 
-    @Specialization(order = 1, guards = "isNullInt")
+    @Specialization(guards = "isNullInt")
     public int doInt(@SuppressWarnings("unused") RNull operand) {
         if (semantics.getEmptyWarning() != null) {
             RError.warning(semantics.emptyWarning);
@@ -62,7 +62,7 @@ public abstract class UnaryArithmeticReduceNode extends UnaryNode {
         return semantics.getIntStart();
     }
 
-    @Specialization(order = 2, guards = "!isNullInt")
+    @Specialization(guards = "!isNullInt")
     public double doDouble(@SuppressWarnings("unused") RNull operand) {
         if (semantics.getEmptyWarning() != null) {
             RError.warning(semantics.emptyWarning);
@@ -70,19 +70,19 @@ public abstract class UnaryArithmeticReduceNode extends UnaryNode {
         return semantics.getDoubleStart();
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public int doInt(int operand) {
         na.enable(operand);
         return na.check(operand) ? RRuntime.INT_NA : arithmetic.op(semantics.getIntStart(), operand);
     }
 
-    @Specialization(order = 4)
+    @Specialization
     public double doDouble(double operand) {
         na.enable(operand);
         return na.check(operand) ? RRuntime.DOUBLE_NA : arithmetic.op(semantics.getDoubleStart(), operand);
     }
 
-    @Specialization(order = 5)
+    @Specialization
     public int doIntVector(RIntVector operand) {
         int result = semantics.getIntStart();
         na.enable(operand);
@@ -102,7 +102,7 @@ public abstract class UnaryArithmeticReduceNode extends UnaryNode {
         return result;
     }
 
-    @Specialization(order = 6)
+    @Specialization
     public double doDoubleVector(RDoubleVector operand) {
         double result = semantics.getDoubleStart();
         na.enable(operand);
@@ -122,7 +122,7 @@ public abstract class UnaryArithmeticReduceNode extends UnaryNode {
         return result;
     }
 
-    @Specialization(order = 7)
+    @Specialization
     public int doLogicalVector(RLogicalVector operand) {
         int result = semantics.getIntStart();
         na.enable(operand);
@@ -142,7 +142,7 @@ public abstract class UnaryArithmeticReduceNode extends UnaryNode {
         return result;
     }
 
-    @Specialization(order = 10)
+    @Specialization
     public int doIntSequence(RIntSequence operand) {
         int result = semantics.getIntStart();
         int current = operand.getStart();
@@ -161,7 +161,7 @@ public abstract class UnaryArithmeticReduceNode extends UnaryNode {
         return result;
     }
 
-    @Specialization(order = 11)
+    @Specialization
     public double doDoubleSequence(RDoubleSequence operand) {
         double result = semantics.getDoubleStart();
         double current = operand.getStart();
@@ -180,7 +180,7 @@ public abstract class UnaryArithmeticReduceNode extends UnaryNode {
         return result;
     }
 
-    @Specialization(order = 12)
+    @Specialization
     public RComplex doComplexVector(RComplexVector operand) {
         RComplex result = RRuntime.double2complex(semantics.getDoubleStart());
         int i = 0;
@@ -203,7 +203,7 @@ public abstract class UnaryArithmeticReduceNode extends UnaryNode {
     // does not work for String-s as, in particular, we cannot supply the (lexicographically)
     // "largest" String for the implementation of max function
 
-    @Specialization(order = 15, guards = "empty")
+    @Specialization(guards = "empty")
     public String doStringVectorEmpty(@SuppressWarnings("unused") RStringVector operand) {
         if (semantics.getEmptyWarning() != null) {
             RError.warning(semantics.emptyWarning);
@@ -211,12 +211,12 @@ public abstract class UnaryArithmeticReduceNode extends UnaryNode {
         return semantics.getStringStart();
     }
 
-    @Specialization(order = 16, guards = "lengthOne")
+    @Specialization(guards = "lengthOne")
     public String doStringVectorOneElem(RStringVector operand) {
         return operand.getDataAt(0);
     }
 
-    @Specialization(order = 17, guards = "longerThanOne")
+    @Specialization(guards = "longerThanOne")
     public String doStringVector(RStringVector operand) {
         String result = operand.getDataAt(0);
         na.enable(result);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryNotNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryNotNode.java
index 4fcc2ee679..7831794dec 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryNotNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/UnaryNotNode.java
@@ -35,7 +35,7 @@ public abstract class UnaryNotNode extends RBuiltinNode {
 
     private final NACheck na = NACheck.create();
 
-    @Specialization(order = 0)
+    @Specialization
     public byte doLogical(byte operand) {
         na.enable(operand);
         if (na.check(operand)) {
@@ -44,7 +44,7 @@ public abstract class UnaryNotNode extends RBuiltinNode {
         return not(operand);
     }
 
-    @Specialization(order = 1)
+    @Specialization
     public byte doInt(int operand) {
         na.enable(operand);
         if (na.check(operand)) {
@@ -53,7 +53,7 @@ public abstract class UnaryNotNode extends RBuiltinNode {
         return RRuntime.asLogical(operand == 0);
     }
 
-    @Specialization(order = 2)
+    @Specialization
     public byte doDouble(double operand) {
         na.enable(operand);
         if (na.check(operand)) {
@@ -62,13 +62,13 @@ public abstract class UnaryNotNode extends RBuiltinNode {
         return RRuntime.asLogical(operand == 0);
     }
 
-    @Specialization(order = 3)
+    @Specialization
     public RRaw doRaw(RRaw operand) {
         return RDataFactory.createRaw(performRaw(operand));
     }
 
     @SuppressWarnings("unused")
-    @Specialization(order = 10)
+    @Specialization
     public Object doNull(VirtualFrame frame, RNull operand) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARG_TYPE);
     }
@@ -82,47 +82,47 @@ public abstract class UnaryNotNode extends RBuiltinNode {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARG_TYPE);
     }
 
-    @Specialization(order = 20, guards = "isZeroLength")
+    @Specialization(guards = "isZeroLength")
     public RLogicalVector performLogicalVectorNot(@SuppressWarnings("unused") RAbstractVector vector) {
         return RDataFactory.createEmptyLogicalVector();
     }
 
-    @Specialization(order = 30)
+    @Specialization
     public RLogicalVector performLogicalVectorNot(VirtualFrame frame, @SuppressWarnings("unused") RAbstractStringVector vector) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARG_TYPE);
     }
 
-    @Specialization(order = 40)
+    @Specialization
     public RLogicalVector performLogicalVectorNot(VirtualFrame frame, @SuppressWarnings("unused") RList list) {
         throw RError.error(frame, getEncapsulatingSourceSection(), RError.Message.INVALID_ARG_TYPE);
     }
 
-    @Specialization(order = 50, guards = "!isZeroLength")
+    @Specialization(guards = "!isZeroLength")
     public RLogicalVector doLogicalVector(RLogicalVector vector) {
         return performLogicalVectorNot(vector);
     }
 
-    @Specialization(order = 51, guards = "!isZeroLength")
+    @Specialization(guards = "!isZeroLength")
     public RLogicalVector doIntVector(RIntVector vector) {
         return performAbstractIntVectorNot(vector);
     }
 
-    @Specialization(order = 52, guards = "!isZeroLength")
+    @Specialization(guards = "!isZeroLength")
     public RLogicalVector doDoubleVector(RDoubleVector vector) {
         return performAbstractDoubleVectorNot(vector);
     }
 
-    @Specialization(order = 53, guards = "!isZeroLength")
+    @Specialization(guards = "!isZeroLength")
     public RLogicalVector doIntSequence(RIntSequence vector) {
         return performAbstractIntVectorNot(vector);
     }
 
-    @Specialization(order = 54, guards = "!isZeroLength")
+    @Specialization(guards = "!isZeroLength")
     public RLogicalVector doDoubleSequence(RDoubleSequence vector) {
         return performAbstractDoubleVectorNot(vector);
     }
 
-    @Specialization(order = 55, guards = "!isZeroLength")
+    @Specialization(guards = "!isZeroLength")
     public RRawVector doRawVector(RRawVector vector) {
         return performRawVectorNot(vector);
     }
-- 
GitLab