diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguageImpl.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguageImpl.java
index d1fa28a8e76d347dc6fb7b517bfb0b56a3212320..65adfcfd0f9f825430961e248f74cbcbca055a18 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguageImpl.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguageImpl.java
@@ -23,7 +23,6 @@
 package com.oracle.truffle.r.engine;
 
 import java.util.HashMap;
-import java.util.Locale;
 
 import com.oracle.truffle.api.CallTarget;
 import com.oracle.truffle.api.CompilerAsserts;
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ListMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ListMR.java
index 5dad942ddc4384657e394bcbaa4d3ce48f0734a6..6a873e08685ce69ee2dacc19db248962c7a75d15 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ListMR.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ListMR.java
@@ -35,7 +35,6 @@ import com.oracle.truffle.api.interop.Resolve;
 import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.interop.UnknownIdentifierException;
 import com.oracle.truffle.api.nodes.Node;
-import com.oracle.truffle.api.nodes.Node.Child;
 import com.oracle.truffle.api.profiles.ConditionProfile;
 import com.oracle.truffle.r.engine.interop.ListMRFactory.ListKeyInfoImplNodeGen;
 import com.oracle.truffle.r.engine.interop.ListMRFactory.ListReadImplNodeGen;
@@ -274,7 +273,7 @@ public class ListMR {
         }
 
         @Fallback
-        protected Object read(VirtualFrame frame, TruffleObject receiver, Object field) {
+        protected Object read(@SuppressWarnings("unused") TruffleObject receiver, Object field) {
             throw UnknownIdentifierException.raise("" + field);
         }
 
@@ -328,7 +327,7 @@ public class ListMR {
         }
 
         @Fallback
-        protected Object write(VirtualFrame frame, TruffleObject receiver, Object field, Object object) {
+        protected Object write(@SuppressWarnings("unused") TruffleObject receiver, Object field, @SuppressWarnings("unused") Object object) {
             throw UnknownIdentifierException.raise("" + field);
         }
     }
@@ -384,7 +383,7 @@ public class ListMR {
             return GetNamesAttributeNode.create();
         }
 
-        private int buildKeys(Object value) {
+        private static int buildKeys(Object value) {
             Builder builder = KeyInfo.newBuilder();
             builder.setReadable(true).setWritable(true).setInvocable(value instanceof RFunction);
             return builder.build();
@@ -398,7 +397,7 @@ public class ListMR {
         }
 
         @Fallback
-        protected int access(VirtualFrame frame, TruffleObject receiver, Object field) {
+        protected int access(@SuppressWarnings("unused") TruffleObject receiver, @SuppressWarnings("unused") Object field) {
             return 0;
         }
     }
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java
index 250948d7ab3689d80b5a4533ed5029e61a303922..49398a0d0bb7625214c3bd4d5d5a9d7f5eb30e3a 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java
@@ -131,7 +131,7 @@ public final class RAbstractVectorAccessFactory implements Factory26 {
         }
 
         @Fallback
-        protected Object read(VirtualFrame frame, Object receiver, Object indentifier) {
+        protected Object read(@SuppressWarnings("unused") Object receiver, Object indentifier) {
             throw UnknownIdentifierException.raise("" + indentifier);
         }
 
@@ -179,7 +179,7 @@ public final class RAbstractVectorAccessFactory implements Factory26 {
         }
 
         @Fallback
-        protected Object write(VirtualFrame frame, Object receiver, Object field, Object object) {
+        protected Object write(@SuppressWarnings("unused") Object receiver, Object field, @SuppressWarnings("unused") Object object) {
             throw UnknownIdentifierException.raise("" + field);
         }
     }
@@ -224,7 +224,7 @@ public final class RAbstractVectorAccessFactory implements Factory26 {
         }
 
         @Fallback
-        protected int keyInfo(VirtualFrame frame, Object receiver, Object label) {
+        protected int keyInfo(@SuppressWarnings("unused") Object receiver, @SuppressWarnings("unused") Object label) {
             return 0;
         }
     }
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java
index ff96aa902a84ef0490a935e174bc89025075646f..fd586b60d95c446b3c9325c260ba3f75b433f3e7 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RArgsValuesAndNamesMR.java
@@ -141,7 +141,7 @@ public class RArgsValuesAndNamesMR {
         }
 
         @Fallback
-        protected Object access(RArgsValuesAndNames receiver, Object identifier) {
+        protected Object access(@SuppressWarnings("unused") RArgsValuesAndNames receiver, Object identifier) {
             throw UnknownIdentifierException.raise("" + identifier);
         }
     }
@@ -152,7 +152,7 @@ public class RArgsValuesAndNamesMR {
         abstract Object execute(VirtualFrame frame, RArgsValuesAndNames receiver, Object idx);
 
         @Specialization
-        protected Object access(VirtualFrame frame, RArgsValuesAndNames receiver, int idx) {
+        protected Object access(RArgsValuesAndNames receiver, int idx) {
             if (unknownIdentifier.profile(idx < 0 || idx >= receiver.getLength())) {
                 return 0;
             }
@@ -160,7 +160,7 @@ public class RArgsValuesAndNamesMR {
         }
 
         @Specialization
-        protected Object access(VirtualFrame frame, RArgsValuesAndNames receiver, String identifier) {
+        protected Object access(RArgsValuesAndNames receiver, String identifier) {
             ArgumentsSignature sig = receiver.getSignature();
             String[] names = sig.getNames();
             int idx = -1;
@@ -177,14 +177,14 @@ public class RArgsValuesAndNamesMR {
             return createKeyInfo(receiver, idx);
         }
 
-        private Object createKeyInfo(RArgsValuesAndNames receiver, int idx) {
+        private static Object createKeyInfo(RArgsValuesAndNames receiver, int idx) {
             KeyInfo.Builder builder = KeyInfo.newBuilder();
             builder.setReadable(true).setInvocable(receiver.getArgument(idx) instanceof RFunction);
             return builder.build();
         }
 
         @Fallback
-        protected Object access(VirtualFrame frame, RArgsValuesAndNames receiver, Object field) {
+        protected Object access(@SuppressWarnings("unused") RArgsValuesAndNames receiver, @SuppressWarnings("unused") Object field) {
             return 0;
         }
     }
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/REnvironmentMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/REnvironmentMR.java
index 7f57be4a7640a9904f58b1b003663248052ef927..018acd8001b0a8d003c6ab43b7385caf8f24e091 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/REnvironmentMR.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/REnvironmentMR.java
@@ -45,7 +45,6 @@ import com.oracle.truffle.r.ffi.impl.interop.NativePointer;
 import com.oracle.truffle.r.nodes.access.vector.ElementAccessMode;
 import com.oracle.truffle.r.nodes.access.vector.ExtractVectorNode;
 import com.oracle.truffle.r.nodes.access.vector.ReplaceVectorNode;
-import com.oracle.truffle.r.runtime.data.RDouble;
 import com.oracle.truffle.r.runtime.data.RFunction;
 import com.oracle.truffle.r.runtime.env.REnvironment;
 import com.oracle.truffle.r.runtime.interop.Foreign2R;
@@ -150,7 +149,7 @@ public class REnvironmentMR {
         }
 
         @Fallback
-        protected Object access(VirtualFrame frame, TruffleObject receiver, Object identifier) {
+        protected Object access(@SuppressWarnings("unused") TruffleObject receiver, Object identifier) {
             throw UnknownIdentifierException.raise("" + identifier);
         }
 
@@ -207,7 +206,7 @@ public class REnvironmentMR {
         }
 
         @Fallback
-        protected Object access(VirtualFrame frame, TruffleObject receiver, Object identifier, Object valueObj) {
+        protected Object access(@SuppressWarnings("unused") TruffleObject receiver, Object identifier, @SuppressWarnings("unused") Object valueObj) {
             throw UnknownIdentifierException.raise("" + identifier);
         }
 
@@ -236,7 +235,7 @@ public class REnvironmentMR {
         }
 
         @Fallback
-        protected int access(REnvironment receiver, Object identifier) {
+        protected int access(@SuppressWarnings("unused") REnvironment receiver, @SuppressWarnings("unused") Object identifier) {
             return 0;
         }
     }
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RLanguageMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RLanguageMR.java
index 353ac3daebfe9b9c1a4e8c4699a7b05cee0c4682..aef100f31be1a166baf498ea58cb0a5623137f18 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RLanguageMR.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RLanguageMR.java
@@ -63,7 +63,7 @@ public class RLanguageMR {
 
     @Resolve(message = "GET_SIZE")
     public abstract static class RLanguageGetSizeNode extends Node {
-        protected Object access(@SuppressWarnings("unused") RLanguage receiver) {
+        protected Object access(RLanguage receiver) {
             return receiver.getLength();
         }
     }
@@ -95,7 +95,7 @@ public class RLanguageMR {
     public abstract static class RLanguageNode extends Node {
         @Node.Child private KeyInfoNode keyInfoNode = RLanguageMRFactory.KeyInfoNodeGen.create();
 
-        protected Object access(VirtualFrame frame, RLanguage receiver, Object obj) {
+        protected Object access(RLanguage receiver, Object obj) {
             return keyInfoNode.execute(receiver, obj);
         }
     }
@@ -142,7 +142,7 @@ public class RLanguageMR {
         }
 
         @Fallback
-        protected Object access(VirtualFrame frame, RLanguage receiver, Object identifier) {
+        protected Object access(@SuppressWarnings("unused") RLanguage receiver, Object identifier) {
             throw UnknownIdentifierException.raise("" + identifier);
         }
 
@@ -169,7 +169,7 @@ public class RLanguageMR {
         }
 
         @Fallback
-        protected int access(RLanguage receiver, Object identifier) {
+        protected int access(@SuppressWarnings("unused") RLanguage receiver, @SuppressWarnings("unused") Object identifier) {
             return 0;
         }
     }
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java
index 16c7115a4dcb2497a2fb2e90c8b6c95a668c1f31..aaf35509de1b756d4175b9ff4161d71e1af0d768 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RPromiseMR.java
@@ -70,7 +70,7 @@ public class RPromiseMR {
 
         @TruffleBoundary
         protected Object access(RPromise receiver, String field) {
-            return readNode.execute(receiver, receiver);
+            return readNode.execute(receiver, field);
         }
     }
 
@@ -79,7 +79,7 @@ public class RPromiseMR {
         @Child RPromiseWriteImplNode writeNode = RPromiseWriteImplNodeGen.create();
 
         protected Object access(RPromise receiver, String field, Object valueObj) {
-            return writeNode.execute(receiver, valueObj, valueObj);
+            return writeNode.execute(receiver, field, valueObj);
         }
     }
 
@@ -138,7 +138,7 @@ public class RPromiseMR {
         }
 
         @Fallback
-        protected Object access(RPromise receiver, Object identifier, Object valueObj) {
+        protected Object access(@SuppressWarnings("unused") RPromise receiver, Object identifier, @SuppressWarnings("unused") Object valueObj) {
             throw UnknownIdentifierException.raise("" + identifier);
         }
     }
@@ -148,7 +148,7 @@ public class RPromiseMR {
         protected abstract Object execute(RPromise receiver, Object identifier);
 
         @Specialization
-        protected Object access(@SuppressWarnings("unused") RPromise receiver, String identifier) {
+        protected Object access(RPromise receiver, String identifier) {
             if (PROP_EXPR.equals(identifier)) {
                 return RDataFactory.createLanguage(receiver.getRep());
             }
@@ -166,7 +166,7 @@ public class RPromiseMR {
         }
 
         @Fallback
-        protected Object access(RPromise receiver, Object identifier) {
+        protected Object access(@SuppressWarnings("unused") RPromise receiver, Object identifier) {
             throw UnknownIdentifierException.raise("" + identifier);
         }
     }
@@ -187,7 +187,7 @@ public class RPromiseMR {
         }
 
         @Fallback
-        protected Object access(RPromise receiver, Object identifier) {
+        protected Object access(@SuppressWarnings("unused") RPromise receiver, @SuppressWarnings("unused") Object identifier) {
             return 0;
         }
     }
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RS4ObjectMR.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RS4ObjectMR.java
index 0f7c7346fd652a5d815418533c056444f1983215..c52fc25a1b1a3412fb8ca0d1d4a72fa7b77315f6 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RS4ObjectMR.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RS4ObjectMR.java
@@ -26,7 +26,6 @@ import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.Fallback;
 import com.oracle.truffle.api.dsl.Specialization;
-import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.interop.CanResolve;
 import com.oracle.truffle.api.interop.KeyInfo;
 import com.oracle.truffle.api.interop.KeyInfo.Builder;
@@ -110,7 +109,7 @@ public class RS4ObjectMR {
     public abstract static class RS4ObjectNode extends Node {
         @Node.Child private RS4ObjectKeyInfoImplNode keyInfoNode = RS4ObjectKeyInfoImplNodeGen.create();
 
-        protected Object access(VirtualFrame frame, RS4Object receiver, Object obj) {
+        protected Object access(RS4Object receiver, Object obj) {
             return keyInfoNode.execute(receiver, obj);
         }
     }
@@ -164,7 +163,7 @@ public class RS4ObjectMR {
         }
 
         @Fallback
-        protected Object access(RS4Object receiver, Object identifier) {
+        protected Object access(@SuppressWarnings("unused") RS4Object receiver, Object identifier) {
             throw UnknownIdentifierException.raise("" + identifier);
         }
 
@@ -211,7 +210,7 @@ public class RS4ObjectMR {
         }
 
         @Fallback
-        protected Object access(RS4Object receiver, Object identifier, Object valueObj) {
+        protected Object access(@SuppressWarnings("unused") RS4Object receiver, Object identifier, @SuppressWarnings("unused") Object valueObj) {
             throw UnknownIdentifierException.raise("" + identifier);
         }
 
@@ -250,7 +249,7 @@ public class RS4ObjectMR {
         }
 
         @Fallback
-        protected int access(RS4Object receiver, Object field) {
+        protected int access(@SuppressWarnings("unused") RS4Object receiver, @SuppressWarnings("unused") Object field) {
             return 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 fd7198eda7a52d30f70e2bcb8c6a92a5ccfa9008..792abffb0e426b6d7920b2eb98ee7f5bc0f7064c 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
@@ -34,7 +34,6 @@ import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.lte;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.notEmpty;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.nullValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.rawValue;
-import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.doubleValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.singleElement;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.stringValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.toBoolean;
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 042b20305cc10094df24f1e9af25b20d43536301..0be5eb231324116a9ac7c2f4639f52f6a8a19496 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
@@ -1129,7 +1129,6 @@ public class FileFunctions {
         @TruffleBoundary
         protected int doUnlink(RAbstractStringVector vec, boolean recursive, @SuppressWarnings("unused") boolean force) {
             int result = 1;
-            FileSystem fileSystem = FileSystems.getDefault();
             for (int i = -0; i < vec.getLength(); i++) {
                 String pathPattern = Utils.tildeExpand(vec.getDataAt(i));
                 if (pathPattern.length() == 0 || RRuntime.isNA(pathPattern)) {
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 178f29c4816b6bd7125b6db76099c92bba38a8c2..8fbce0e16b3edc0a9c0908402421edf9abbb3a8e 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
@@ -335,11 +335,13 @@ public abstract class Identical extends RBuiltinNode.Arg7 {
         return identicalAttr(x, y, numEq, singleNA, attribAsSet, ignoreBytecode, ignoreEnvironment);
     }
 
+    @SuppressWarnings("unused")
     @Specialization
     protected byte doInternalIdenticalForeignObject(RInteropScalar x, RInteropScalar y, boolean numEq, boolean singleNA, boolean attribAsSet, boolean ignoreBytecode, boolean ignoreEnvironment) {
         return RRuntime.asLogical(x == y);
     }
 
+    @SuppressWarnings("unused")
     @Specialization(guards = "areForeignObjects(x, y)")
     protected byte doInternalIdenticalForeignObject(TruffleObject x, TruffleObject y, boolean numEq, boolean singleNA, boolean attribAsSet, boolean ignoreBytecode, boolean ignoreEnvironment) {
         return RRuntime.asLogical(x == y);
@@ -353,7 +355,7 @@ public abstract class Identical extends RBuiltinNode.Arg7 {
     }
 
     protected boolean areForeignObjects(TruffleObject x, TruffleObject y) {
-        return RRuntime.isForeignObject(x) && RRuntime.isForeignObject(x);
+        return RRuntime.isForeignObject(x) && RRuntime.isForeignObject(y);
     }
 
     protected boolean vectorsLists(RAbstractVector x, RAbstractVector y) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Prod.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Prod.java
index 3edade53d5551c2e2d3b3892a9cbaa94f07f356f..da39fe9bdec0bf28a7259cf9f31fb90fe5b65302 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Prod.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Prod.java
@@ -17,7 +17,6 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE;
 import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.dsl.Fallback;
 import com.oracle.truffle.api.dsl.Specialization;
-import com.oracle.truffle.api.profiles.ConditionProfile;
 import com.oracle.truffle.api.profiles.ValueProfile;
 import com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef;
 import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
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 71bff2a15a0295901ff2bbc513eaf05ae3dc4257..d792c70c410dcaf1c79f72a59cb1dff8004a5025 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
@@ -153,7 +153,7 @@ public abstract class Unlist extends RBuiltinNode.Arg3 {
         @Specialization(guards = {"isForeignArray(obj, hasSize)"})
         protected int getForeignArrayLength(VirtualFrame frame, TruffleObject obj,
                         @Cached("READ.createNode()") Node read,
-                        @Cached("HAS_SIZE.createNode()") Node hasSize,
+                        @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize,
                         @Cached("GET_SIZE.createNode()") Node getSize,
                         @Cached("createForeign2R()") Foreign2R foreign2R) {
             int totalSize = 0;
@@ -207,8 +207,8 @@ public abstract class Unlist extends RBuiltinNode.Arg3 {
         }
 
         @Specialization(guards = {"isForeignObject(obj)", "!isForeignArray(obj, hasSize)", "!isJavaIterable(obj)"})
-        protected int getForeignObject(VirtualFrame frame, TruffleObject obj,
-                        @Cached("HAS_SIZE.createNode()") Node hasSize) {
+        protected int getForeignObject(@SuppressWarnings("unused") TruffleObject obj,
+                        @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize) {
             return 1;
         }
     }
@@ -308,7 +308,7 @@ public abstract class Unlist extends RBuiltinNode.Arg3 {
     }
 
     @Specialization(guards = {"isForeignObject(obj)", "!isForeignVector(obj)"})
-    protected Object unlistForeign(@SuppressWarnings("unused") VirtualFrame frame, TruffleObject obj, @SuppressWarnings("unused") boolean recursive, @SuppressWarnings("unused") boolean useNames) {
+    protected Object unlistForeign(TruffleObject obj, @SuppressWarnings("unused") boolean recursive, @SuppressWarnings("unused") boolean useNames) {
         return obj;
     }
 
@@ -336,10 +336,8 @@ public abstract class Unlist extends RBuiltinNode.Arg3 {
 
     /**
      * Converts foreign object to RAbstractVector.
-     * 
+     *
      * @param obj the foreign object. Has to be ensured it is a foreign array or java iterable.
-     * @param recursive
-     * @return
      */
     private RAbstractVector foreignToVector(TruffleObject obj, boolean recursive) {
         assert isForeignVector(obj);
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/FortranAndCFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/FortranAndCFunctions.java
index da358853e981db282353cb67d3377fb806b1a6de..3136f769e998137d0d11b3fa9df764d3830047ee 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/FortranAndCFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/FortranAndCFunctions.java
@@ -341,7 +341,7 @@ public class FortranAndCFunctions {
         }
 
         @Fallback
-        public Object handleOthers(@SuppressWarnings("unused") Object result, @SuppressWarnings("unused") RArgsValuesAndNames argNames) {
+        public Object handleOthers(Object result, @SuppressWarnings("unused") RArgsValuesAndNames argNames) {
             // do nothing
             return result;
         }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/SpecialsUtils.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/SpecialsUtils.java
index a9860a5d31058644a95bb67c8852cc60f0deb05c..425bb7220c544608be9f77badb5a340fadadb823 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/SpecialsUtils.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/infix/SpecialsUtils.java
@@ -39,7 +39,6 @@ import com.oracle.truffle.r.nodes.function.ClassHierarchyNode;
 import com.oracle.truffle.r.runtime.ArgumentsSignature;
 import com.oracle.truffle.r.runtime.data.RDoubleVector;
 import com.oracle.truffle.r.runtime.data.RIntVector;
-import com.oracle.truffle.r.runtime.data.RList;
 import com.oracle.truffle.r.runtime.data.RStringVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
 import com.oracle.truffle.r.runtime.nodes.RNode;
@@ -123,10 +122,6 @@ class SpecialsUtils {
 
         @Child protected GetNamesAttributeNode getNamesNode = GetNamesAttributeNode.create();
 
-        protected final boolean isSimpleList(RList list) {
-            return true;
-        }
-
         protected static int getIndex(RStringVector names, String field) {
             if (names != null) {
                 int fieldHash = field.hashCode();
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/DoubleVectorPrinter.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/DoubleVectorPrinter.java
index aa7010c1a8e29ee96d0416b873ad6af6a0236ae4..266c914a7273b98a847c4d5cee71b011288e2956 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/DoubleVectorPrinter.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/DoubleVectorPrinter.java
@@ -12,8 +12,6 @@
 package com.oracle.truffle.r.nodes.builtin.base.printer;
 
 import java.io.IOException;
-import java.math.BigDecimal;
-import java.math.MathContext;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.r.runtime.RRuntime;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRContext.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRContext.java
index b9da1b0854c96f1a08dedcdca70916a5ba8f1761..d05f42daf1e7ae23032d741b8de5ba534453d367 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRContext.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRContext.java
@@ -142,11 +142,8 @@ public class FastRContext {
             int[] multiSlotIndices = new int[length];
             for (int i = 0; i < length; i++) {
                 ChildContextInfo info = createContextInfo(contextKind);
-                if (FastROptions.SpawnUsesPolyglot.getBooleanValue()) {
-                    threads[i] = new EvalThread(info, RSource.fromTextInternalInvisible(exprs.getDataAt(i % exprs.getLength()), RSource.Internal.CONTEXT_EVAL), true);
-                } else {
-                    threads[i] = new EvalThread(info, RSource.fromTextInternalInvisible(exprs.getDataAt(i % exprs.getLength()), RSource.Internal.CONTEXT_EVAL));
-                }
+                threads[i] = new EvalThread(info, RSource.fromTextInternalInvisible(exprs.getDataAt(i % exprs.getLength()), RSource.Internal.CONTEXT_EVAL),
+                                FastROptions.SpawnUsesPolyglot.getBooleanValue());
                 data[i] = info.getId();
                 multiSlotIndices[i] = info.getMultiSlotInd();
             }
@@ -248,7 +245,7 @@ public class FastRContext {
                 int[] multiSlotIndices = new int[length];
                 for (int i = 0; i < length; i++) {
                     ChildContextInfo info = createContextInfo(contextKind);
-                    threads[i] = new EvalThread(info, RSource.fromTextInternalInvisible(exprs.getDataAt(i % exprs.getLength()), RSource.Internal.CONTEXT_EVAL));
+                    threads[i] = new EvalThread(info, RSource.fromTextInternalInvisible(exprs.getDataAt(i % exprs.getLength()), RSource.Internal.CONTEXT_EVAL), false);
                     multiSlotIndices[i] = info.getMultiSlotInd();
                 }
                 if (contextKind == ContextKind.SHARE_ALL) {
diff --git a/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/castsTests/CastBuilderTest.java b/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/castsTests/CastBuilderTest.java
index 74dfcb6ba5359f03e683a9ea2558f47f4b517c92..ad4f0b46c876189de0c9944a81c4a17bf13b92e4 100644
--- a/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/castsTests/CastBuilderTest.java
+++ b/com.oracle.truffle.r.nodes.test/src/com/oracle/truffle/r/nodes/castsTests/CastBuilderTest.java
@@ -61,11 +61,11 @@ import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.notEmpty;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.nullConstant;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.nullValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.numericValue;
+import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.rawValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.shouldBe;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.singleElement;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.squareMatrix;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.stringValue;
-import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.rawValue;
 import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.toBoolean;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -79,7 +79,6 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
-import com.oracle.truffle.api.vm.PolyglotEngine.Language;
 import com.oracle.truffle.r.nodes.builtin.CastBuilder;
 import com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef;
 import com.oracle.truffle.r.nodes.builtin.casts.fluent.InitialPhaseBuilder;
@@ -94,7 +93,6 @@ import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.builtins.RBehavior;
 import com.oracle.truffle.r.runtime.builtins.RBuiltin;
 import com.oracle.truffle.r.runtime.builtins.RBuiltinKind;
-import com.oracle.truffle.r.runtime.context.TruffleRLanguage;
 import com.oracle.truffle.r.runtime.data.RDataFactory;
 import com.oracle.truffle.r.runtime.data.RDoubleVector;
 import com.oracle.truffle.r.runtime.data.RFunction;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ReplaceVectorNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ReplaceVectorNode.java
index ed182a5496d8539394c85901ec2339461133dba0..190797cdd47a3412a5bb862c937fe542253ec7f7 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ReplaceVectorNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ReplaceVectorNode.java
@@ -39,18 +39,17 @@ import com.oracle.truffle.r.nodes.binary.BoxPrimitiveNode;
 import com.oracle.truffle.r.nodes.profile.TruffleBoundaryNode;
 import com.oracle.truffle.r.nodes.unary.CastStringNode;
 import com.oracle.truffle.r.nodes.unary.FirstStringNode;
-import com.oracle.truffle.r.runtime.interop.R2Foreign;
 import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.RTypedValue;
-import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
 import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractListVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
-import com.oracle.truffle.r.runtime.nodes.RBaseNode;
+import com.oracle.truffle.r.runtime.interop.R2Foreign;
 import com.oracle.truffle.r.runtime.interop.R2ForeignNodeGen;
+import com.oracle.truffle.r.runtime.nodes.RBaseNode;
 
 /**
  * Syntax node for element writes.
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 4a616a2175674c4d312bbe4c4ab29f460b13b20b..6896d4cf0c35ad53ab21aa12a96d85cc0b02ebce 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
@@ -37,8 +37,6 @@ import com.oracle.truffle.api.profiles.ValueProfile;
 import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
 import com.oracle.truffle.r.nodes.primitive.BinaryMapNode;
 import com.oracle.truffle.r.nodes.profile.TruffleBoundaryNode;
-import com.oracle.truffle.r.nodes.unary.PrecedenceNode;
-import com.oracle.truffle.r.nodes.unary.PrecedenceNodeGen;
 import com.oracle.truffle.r.nodes.unary.UnaryArithmeticNode;
 import com.oracle.truffle.r.nodes.unary.UnaryArithmeticNodeGen;
 import com.oracle.truffle.r.runtime.RError;
@@ -161,7 +159,7 @@ public abstract class BinaryArithmeticNode extends RBuiltinNode.Arg2 {
     @Specialization(replaces = "doNumericVectorCached", guards = {"isForeignVector(left, hasSize)", "isNumericVector(right)"})
     @TruffleBoundary
     protected Object doForeignLeft(TruffleObject left, Object right,
-                    @Cached("HAS_SIZE.createNode()") Node hasSize,
+                    @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize,
                     @Cached("createForeignArray2R()") ForeignArray2R foreignArray2R,
                     @Cached("createRecursive()") BinaryArithmeticNode recursive) {
         Object o = foreignArray2R.execute(left, true);
@@ -171,7 +169,7 @@ public abstract class BinaryArithmeticNode extends RBuiltinNode.Arg2 {
     @Specialization(replaces = "doNumericVectorCached", guards = {"isNumericVector(left)", "isForeignVector(right, hasSize)"})
     @TruffleBoundary
     protected Object doForeignRight(Object left, TruffleObject right,
-                    @Cached("HAS_SIZE.createNode()") Node hasSize,
+                    @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize,
                     @Cached("createForeignArray2R()") ForeignArray2R foreignArray2R,
                     @Cached("createRecursive()") BinaryArithmeticNode recursive) {
         Object o = foreignArray2R.execute(right, true);
@@ -181,7 +179,7 @@ public abstract class BinaryArithmeticNode extends RBuiltinNode.Arg2 {
     @Specialization(replaces = "doNumericVectorCached", guards = {"isForeignVector(left, hasSize)", "isForeignVector(right, hasSize)"})
     @TruffleBoundary
     protected Object doForeignVector(TruffleObject left, TruffleObject right,
-                    @Cached("HAS_SIZE.createNode()") Node hasSize,
+                    @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize,
                     @Cached("createForeignArray2R()") ForeignArray2R leftForeignArray2R,
                     @Cached("createForeignArray2R()") ForeignArray2R rightForeignArray2R,
                     @Cached("createRecursive()") BinaryArithmeticNode recursive) {
@@ -203,8 +201,8 @@ public abstract class BinaryArithmeticNode extends RBuiltinNode.Arg2 {
     }
 
     @Specialization(guards = {"isForeignVector(right, hasSize)"})
-    protected Object doForeignLeftNull(@SuppressWarnings("unused") RNull left, TruffleObject right,
-                    @Cached("HAS_SIZE.createNode()") Node hasSize,
+    protected Object doForeignLeftNull(RNull left, TruffleObject right,
+                    @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize,
                     @Cached("createForeignArray2R()") ForeignArray2R foreignArray2R,
                     @Cached("createRecursive()") BinaryArithmeticNode recursive) {
         Object oRight = foreignArray2R.execute(right, true);
@@ -213,7 +211,7 @@ public abstract class BinaryArithmeticNode extends RBuiltinNode.Arg2 {
 
     @Specialization(guards = {"isForeignVector(left, hasSize)"})
     protected Object doForeignRightNull(TruffleObject left, RNull right,
-                    @Cached("HAS_SIZE.createNode()") Node hasSize,
+                    @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize,
                     @Cached("createForeignArray2R()") ForeignArray2R foreignArray2R,
                     @Cached("createRecursive()") BinaryArithmeticNode recursive) {
         Object oLeft = foreignArray2R.execute(left, true);
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 e5882e8e23e9d436fb9e20bde95b005b532121c4..ae3cdfeff6afb55e27e55aefa564646cbad8e700 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
@@ -220,15 +220,13 @@ public abstract class BinaryBooleanNode extends RBuiltinNode.Arg2 {
         return BinaryBooleanNode.create(factory);
     }
 
-    @SuppressWarnings("unused")
     @Specialization(guards = {"isRNullOrEmptyAndNotMissing(left, right)"})
-    protected static Object doEmptyOrNull(Object left, Object right) {
+    protected static Object doEmptyOrNull(@SuppressWarnings("unused") Object left, @SuppressWarnings("unused") Object right) {
         return RType.Logical.getEmpty();
     }
 
-    @SuppressWarnings("unused")
     @Specialization(guards = {"(isRMissing(left) || isRMissing(right))"})
-    protected Object doOneArg(Object left, Object right) {
+    protected Object doOneArg(@SuppressWarnings("unused") Object left, @SuppressWarnings("unused") Object right) {
         throw error(RError.Message.IS_OF_WRONG_ARITY, 1, factory.createOperation().opName(), 2);
     }
 
@@ -246,7 +244,7 @@ public abstract class BinaryBooleanNode extends RBuiltinNode.Arg2 {
 
     @Specialization(guards = {"isForeignVector(left, hasSize) || isForeignVector(right, hasSize)"})
     protected Object doForeignVector(VirtualFrame frame, TruffleObject left, TruffleObject right,
-                    @Cached("HAS_SIZE.createNode()") Node hasSize,
+                    @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize,
                     @Cached("createForeignArray2R()") ForeignArray2R leftForeignArray2R,
                     @Cached("createForeignArray2R()") ForeignArray2R rightForeignArray2R,
                     @Cached("createRecursive()") BinaryBooleanNode recursive) {
@@ -255,9 +253,8 @@ public abstract class BinaryBooleanNode extends RBuiltinNode.Arg2 {
         return recursive.execute(frame, oLeft, oRight);
     }
 
-    @SuppressWarnings("unused")
     @Fallback
-    protected Object doInvalidType(Object left, Object right) {
+    protected Object doInvalidType(@SuppressWarnings("unused") Object left, @SuppressWarnings("unused") Object right) {
         throw error(Message.OPERATIONS_NUMERIC_LOGICAL_COMPLEX);
     }
 
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/CastBuilder.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/CastBuilder.java
index 0db087a2824d21ad167cd17001cb1888360f0fd2..70f34a3d31d1afd35087958cefe70a8de97c20a1 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/CastBuilder.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/CastBuilder.java
@@ -772,7 +772,7 @@ public final class CastBuilder {
         public static Function<Object, String> typeName() {
             return arg -> {
                 CompilerAsserts.neverPartOfCompilation();
-                return ((RTypedValue) RRuntime.convertScalarVectors(arg)).getRType().getName();
+                return RRuntime.isForeignObject(arg) ? "external object" : ((RTypedValue) RRuntime.convertScalarVectors(arg)).getRType().getName();
             };
         }
     }
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 c9e1d89b406d5d82f3afaaf24bd3619d5921b604..4b8964a8834e3e73e9d8f2bf510c0b36efca0797 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
@@ -22,6 +22,7 @@
  */
 package com.oracle.truffle.r.nodes.unary;
 
+import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.ImportStatic;
 import com.oracle.truffle.api.dsl.Specialization;
@@ -233,7 +234,7 @@ public abstract class PrecedenceNode extends RBaseNode {
 
     @Specialization(guards = {"isForeignObject(to)", "!isJavaIterable(to)", "!isForeignArray(to, hasSize)"})
     protected int doForeignObject(TruffleObject to, boolean recursive,
-                    @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize) {
+                    @Cached("HAS_SIZE.createNode()") Node hasSize) {
         return LIST_PRECEDENCE;
     }
 
@@ -268,7 +269,7 @@ public abstract class PrecedenceNode extends RBaseNode {
 
     @Specialization(guards = {"isForeignArray(obj, hasSize)"})
     protected int doForeignArray(TruffleObject obj, boolean recursive,
-                    @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize,
+                    @Cached("HAS_SIZE.createNode()") Node hasSize,
                     @Cached("GET_SIZE.createNode()") Node getSize,
                     @Cached("READ.createNode()") Node read,
                     @Cached("createRecursive()") PrecedenceNode precedenceNode,
@@ -299,6 +300,7 @@ public abstract class PrecedenceNode extends RBaseNode {
         return precedence;
     }
 
+    @TruffleBoundary
     private int getPrecedence(Class<?> ct, boolean recursive) {
         if (recursive && ct.isArray()) {
             return getPrecedence(ct.getComponentType(), recursive);
@@ -306,16 +308,14 @@ public abstract class PrecedenceNode extends RBaseNode {
         return getPrecedence(ct);
     }
 
-    private int getPrecedence(Class<?> ct) {
-        if (Integer.TYPE.getName().equals(ct.getName()) || Byte.TYPE.getName().equals(ct.getName()) || Short.TYPE.getName().equals(ct.getName()) ||
-                        Integer.class.getName().equals(ct.getName()) || Byte.class.getName().equals(ct.getName()) || Short.class.getName().equals(ct.getName())) {
+    private static int getPrecedence(Class<?> ct) {
+        if (ct == Integer.class || ct == Byte.class || ct == Short.class || ct == int.class || ct == byte.class || ct == short.class) {
             return INT_PRECEDENCE;
-        } else if (Double.TYPE.getName().equals(ct.getName()) || Float.TYPE.getName().equals(ct.getName()) || Long.TYPE.getName().equals(ct.getName()) ||
-                        Double.class.getName().equals(ct.getName()) || Float.class.getName().equals(ct.getName()) || Long.class.getName().equals(ct.getName())) {
+        } else if (ct == Double.class || ct == Float.class || ct == Long.class || ct == double.class || ct == float.class || ct == long.class) {
             return DOUBLE_PRECEDENCE;
-        } else if (String.class.getName().equals(ct.getName()) || Character.TYPE.getName().equals(ct.getName()) || Character.class.getName().equals(ct.getName())) {
+        } else if (ct == String.class || ct == Character.class || ct == char.class) {
             return STRING_PRECEDENCE;
-        } else if (Boolean.TYPE.getName().equals(ct.getName()) || Boolean.class.getName().equals(ct.getName())) {
+        } else if (ct == Boolean.class || ct == boolean.class) {
             return LOGICAL_PRECEDENCE;
         }
         return NO_PRECEDENCE;
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 46d804b6c25b4d41286dba76d9d5d85e9f6d23ff..ce65ed44e29023665f06ee0f4e4741eba3c24e63 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
@@ -103,7 +103,7 @@ public abstract class UnaryArithmeticNode extends UnaryNode {
 
     @Specialization(guards = {"isForeignVector(obj, hasSize)"})
     protected Object doForeignVector(TruffleObject obj,
-                    @Cached("HAS_SIZE.createNode()") Node hasSize,
+                    @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize,
                     @Cached("createForeignArray2R()") ForeignArray2R foreignArray2R,
                     @Cached("createRecursive()") UnaryArithmeticNode recursive) {
         Object vec = foreignArray2R.execute(obj, true);
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 605ce73f7ef90f19ed69d441d6d3902a56ebaf3d..f54f392a94f0cc3c598686beb57675199610c5b3 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
@@ -24,6 +24,7 @@ package com.oracle.truffle.r.nodes.unary;
 
 import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.dsl.Cached;
+import com.oracle.truffle.api.dsl.Fallback;
 import com.oracle.truffle.api.dsl.ImportStatic;
 import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.dsl.TypeSystemReference;
@@ -31,6 +32,7 @@ import com.oracle.truffle.api.interop.Message;
 import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.profiles.ConditionProfile;
+import com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef;
 import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.data.RComplex;
@@ -41,8 +43,6 @@ import com.oracle.truffle.r.runtime.data.RIntSequence;
 import com.oracle.truffle.r.runtime.data.RIntVector;
 import com.oracle.truffle.r.runtime.data.RLogicalVector;
 import com.oracle.truffle.r.runtime.data.RNull;
-import com.oracle.truffle.r.runtime.data.RRaw;
-import com.oracle.truffle.r.runtime.data.RRawVector;
 import com.oracle.truffle.r.runtime.data.RStringVector;
 import com.oracle.truffle.r.runtime.data.RTypes;
 import com.oracle.truffle.r.runtime.interop.ForeignArray2R;
@@ -70,6 +70,8 @@ public abstract class UnaryArithmeticReduceNode extends RBaseNode {
 
     private final BinaryArithmeticFactory factory;
     protected final ReduceSemantics semantics;
+    protected final boolean supportString;
+    protected final boolean supportComplex;
 
     private final NACheck na = NACheck.create();
     private final ConditionProfile naRmProfile = ConditionProfile.createBinaryProfile();
@@ -78,6 +80,8 @@ public abstract class UnaryArithmeticReduceNode extends RBaseNode {
         this.factory = factory;
         this.semantics = semantics;
         this.arithmetic = factory.createOperation();
+        this.supportString = semantics.supportString;
+        this.supportComplex = semantics.supportComplex;
     }
 
     private String handleString(RStringVector operand, boolean naRm, boolean finite, int offset) {
@@ -164,52 +168,38 @@ public abstract class UnaryArithmeticReduceNode extends RBaseNode {
         }
     }
 
-    @Specialization
+    @Specialization(guards = "supportComplex")
     protected RComplex doComplex(RComplex operand, boolean naRm, @SuppressWarnings("unused") boolean finite) {
-        if (semantics.supportComplex) {
-            na.enable(operand);
-            if (naRmProfile.profile(naRm)) {
-                if (na.check(operand)) {
-                    emptyWarning();
-                    return RRuntime.double2complex(semantics.getDoubleStart());
-                } else {
-                    return operand;
-                }
+        na.enable(operand);
+        if (naRmProfile.profile(naRm)) {
+            if (na.check(operand)) {
+                emptyWarning();
+                return RRuntime.double2complex(semantics.getDoubleStart());
             } else {
-                return na.check(operand) ? RComplex.createNA() : operand;
+                return operand;
             }
         } else {
-            throw error(RError.Message.INVALID_TYPE_ARGUMENT, "complex");
+            return na.check(operand) ? RComplex.createNA() : operand;
         }
     }
 
-    @Specialization
+    @Specialization(guards = "supportString")
     protected String doString(String operand, boolean naRm, @SuppressWarnings("unused") boolean finite) {
-        if (semantics.supportString) {
-            na.enable(operand);
-            if (naRmProfile.profile(naRm)) {
-                if (na.check(operand)) {
-                    if (semantics.getEmptyWarning() != null) {
-                        RError.warning(this, semantics.emptyWarningCharacter);
-                    }
-                    return semantics.getStringStart();
-                } else {
-                    return operand;
+        na.enable(operand);
+        if (naRmProfile.profile(naRm)) {
+            if (na.check(operand)) {
+                if (semantics.getEmptyWarning() != null) {
+                    RError.warning(this, semantics.emptyWarningCharacter);
                 }
+                return semantics.getStringStart();
             } else {
-                return na.check(operand) ? RRuntime.STRING_NA : operand;
+                return operand;
             }
         } else {
-            throw error(RError.Message.INVALID_TYPE_ARGUMENT, "character");
+            return na.check(operand) ? RRuntime.STRING_NA : operand;
         }
     }
 
-    @SuppressWarnings("unused")
-    @Specialization
-    protected RRaw doString(RRaw operand, boolean naRm, boolean finite) {
-        throw error(RError.Message.INVALID_TYPE_ARGUMENT, "raw");
-    }
-
     @Specialization
     protected int doIntVector(RIntVector operand, boolean naRm, boolean finite) {
         RBaseNode.reportWork(this, operand.getLength());
@@ -342,105 +332,78 @@ public abstract class UnaryArithmeticReduceNode extends RBaseNode {
         return result;
     }
 
-    @Specialization
+    @Specialization(guards = "supportComplex")
     protected RComplex doComplexVector(RComplexVector operand, boolean naRm, boolean finite) {
         RBaseNode.reportWork(this, operand.getLength());
-        if (semantics.supportComplex) {
-            boolean profiledNaRm = naRmProfile.profile(naRm || finite);
-            RComplex result = RRuntime.double2complex(semantics.getDoubleStart());
-            int opCount = 0;
-            na.enable(operand);
-            for (int i = 0; i < operand.getLength(); i++) {
-                RComplex current = operand.getDataAt(i);
-                if (na.check(current)) {
-                    if (profiledNaRm) {
-                        continue;
-                    } else {
-                        return RComplex.createNA();
-                    }
+        boolean profiledNaRm = naRmProfile.profile(naRm || finite);
+        RComplex result = RRuntime.double2complex(semantics.getDoubleStart());
+        int opCount = 0;
+        na.enable(operand);
+        for (int i = 0; i < operand.getLength(); i++) {
+            RComplex current = operand.getDataAt(i);
+            if (na.check(current)) {
+                if (profiledNaRm) {
+                    continue;
                 } else {
-                    result = arithmetic.op(result.getRealPart(), result.getImaginaryPart(), current.getRealPart(), current.getImaginaryPart());
+                    return RComplex.createNA();
                 }
-                opCount++;
-            }
-            if (opCount == 0) {
-                emptyWarning();
+            } else {
+                result = arithmetic.op(result.getRealPart(), result.getImaginaryPart(), current.getRealPart(), current.getImaginaryPart());
             }
-            return result;
-        } else {
-            throw error(RError.Message.INVALID_TYPE_ARGUMENT, "complex");
-
+            opCount++;
         }
+        if (opCount == 0) {
+            emptyWarning();
+        }
+        return result;
     }
 
     // the algorithm that works for other types (reducing a vector starting with the "start value")
     // does not work for String-s as, in particular, we cannot supply the (lexicographically)
     // "largest" String for the implementation of max function
 
-    @SuppressWarnings("unused")
-    private static String doStringVectorEmptyInternal(RStringVector operand, boolean naRm, boolean finite, ReduceSemantics semantics, RBaseNode invokingNode) {
-        if (semantics.supportString) {
-            if (semantics.getEmptyWarning() != null) {
-                RError.warning(invokingNode, semantics.emptyWarningCharacter);
-            }
-            return semantics.getStringStart();
-        } else {
-            throw invokingNode.error(RError.Message.INVALID_TYPE_ARGUMENT, "character");
+    private static String doStringVectorEmptyInternal(ReduceSemantics semantics, RBaseNode invokingNode) {
+        if (semantics.getEmptyWarning() != null) {
+            RError.warning(invokingNode, semantics.emptyWarningCharacter);
         }
+        return semantics.getStringStart();
     }
 
-    @Specialization(guards = "operand.getLength() == 0")
-    protected String doStringVectorEmpty(RStringVector operand, boolean naRm, boolean finite) {
-        return doStringVectorEmptyInternal(operand, naRm, finite, semantics, this);
+    @Specialization(guards = {"supportString", "operand.getLength() == 0"})
+    protected String doStringVectorEmpty(@SuppressWarnings("unused") RStringVector operand, @SuppressWarnings("unused") boolean naRm, @SuppressWarnings("unused") boolean finite) {
+        return doStringVectorEmptyInternal(semantics, this);
     }
 
-    @Specialization(guards = "operand.getLength() == 1")
+    @Specialization(guards = {"supportString", "operand.getLength() == 1"})
     protected String doStringVectorOneElem(RStringVector operand, boolean naRm, boolean finite) {
-        if (semantics.supportString) {
-            boolean profiledNaRm = naRmProfile.profile(naRm);
-            String result = operand.getDataAt(0);
-            if (profiledNaRm) {
-                na.enable(result);
-                if (na.check(result)) {
-                    return doStringVectorEmpty(operand, naRm, finite);
-                }
+        boolean profiledNaRm = naRmProfile.profile(naRm);
+        String result = operand.getDataAt(0);
+        if (profiledNaRm) {
+            na.enable(result);
+            if (na.check(result)) {
+                return doStringVectorEmpty(operand, naRm, finite);
             }
-            return result;
-        } else {
-            throw error(RError.Message.INVALID_TYPE_ARGUMENT, "character");
         }
+        return result;
     }
 
-    @Specialization(guards = "operand.getLength() > 1")
+    @Specialization(guards = {"supportString", "operand.getLength() > 1"})
     protected String doStringVector(RStringVector operand, boolean naRm, boolean finite) {
-        if (semantics.supportString) {
-            return handleString(operand, naRm, finite, 0);
-        } else {
-            throw error(RError.Message.INVALID_TYPE_ARGUMENT, "character");
-        }
-    }
-
-    @SuppressWarnings("unused")
-    @Specialization
-    protected RRaw doString(RRawVector operand, boolean naRm, boolean finite) {
-        throw error(RError.Message.INVALID_TYPE_ARGUMENT, "raw");
+        return handleString(operand, naRm, finite, 0);
     }
 
     @Specialization(guards = {"isForeignVector(obj, hasSize)"})
     protected Object doForeignVector(TruffleObject obj, boolean naRm, boolean finite,
-                    @Cached("HAS_SIZE.createNode()") Node hasSize,
+                    @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize,
                     @Cached("createForeignArray2R()") ForeignArray2R foreignArray2R,
                     @Cached("createRecursive()") UnaryArithmeticReduceNode recursive) {
         Object vec = foreignArray2R.execute(obj, true);
         return recursive.executeReduce(vec, naRm, finite);
     }
 
-    @Specialization(guards = {"isForeignObject(obj)"})
-    protected Object doForeign(TruffleObject obj, boolean naRm, boolean finite,
-                    @Cached("HAS_SIZE.createNode()") Node hasSize,
-                    @Cached("createForeignArray2R()") ForeignArray2R foreignArray2R,
-                    @Cached("createRecursive()") UnaryArithmeticReduceNode recursive) {
-        throw error(RError.Message.INVALID_TYPE_ARGUMENT, "external object");
+    @Fallback
+    protected Object doFallback(Object obj, @SuppressWarnings("unused") boolean naRm, @SuppressWarnings("unused") boolean infinite) {
+        throw error(RError.Message.INVALID_TYPE_ARGUMENT, Predef.typeName().apply(obj));
     }
 
     protected UnaryArithmeticReduceNode createRecursive() {
@@ -538,7 +501,7 @@ public abstract class UnaryArithmeticReduceNode extends RBaseNode {
                     // the following is meant to eliminate leading NA-s
                     if (offset == operand.getLength() - 1) {
                         // last element - all other are NAs
-                        return doStringVectorEmptyInternal(operand, naRm, finite, semantics, this);
+                        return doStringVectorEmptyInternal(semantics, this);
                     } else {
                         return handleString(operand, naRm, finite, offset + 1);
                     }
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 d2b835a2727eaf6071c94d77c35370959fdf8e97..a6f079c76d74c2b219bfff5d7cb0b9b60868e621 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
@@ -217,7 +217,7 @@ public abstract class UnaryNotNode extends RBuiltinNode.Arg1 {
 
     @Specialization(guards = {"isForeignVector(obj, hasSize)"})
     protected Object doForeign(VirtualFrame frame, TruffleObject obj,
-                    @Cached("HAS_SIZE.createNode()") Node hasSize,
+                    @SuppressWarnings("unused") @Cached("HAS_SIZE.createNode()") Node hasSize,
                     @Cached("createForeignArray2R()") ForeignArray2R foreignArray2R,
                     @Cached("createRecursive()") UnaryNotNode recursive) {
         Object vec = foreignArray2R.execute(obj, true);
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
index ac69a5a14fd5a4ec37a529811733dbe1df51a437..ae22e9d513dfb264e7b2d91fd4d0bbdf6d7afa11 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ArgumentsSignature.java
@@ -94,17 +94,17 @@ public final class ArgumentsSignature implements Iterable<String> {
 
     private ArgumentsSignature(String[] names, boolean convertEmpty) {
         this.names = new String[names.length];
-        int nonNullCount = 0;
+        int nonNull = 0;
         for (int i = 0; i < names.length; i++) {
             String s = names[i];
             if (s == null || (s.isEmpty() && convertEmpty)) {
                 this.names[i] = null;
                 continue;
             }
-            nonNullCount++;
+            nonNull++;
             this.names[i] = s == UNMATCHED ? s : s.intern();
         }
-        this.nonNullCount = nonNullCount;
+        this.nonNullCount = nonNull;
 
         int index = NO_VARARG;
         int count = 0;
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/EvalThread.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/EvalThread.java
index d515b1d63d6773af31fb687b30c2019754f24086..36a35799de65e30d2577288d0e432d7b48a1a2d5 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/EvalThread.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/EvalThread.java
@@ -33,7 +33,6 @@ import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.source.Source;
 import com.oracle.truffle.api.vm.PolyglotEngine;
 import com.oracle.truffle.r.runtime.ExitException;
-import com.oracle.truffle.r.runtime.FastROptions;
 import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.RRuntime;
@@ -62,24 +61,14 @@ public class EvalThread extends Thread {
     /** We use a separate counter for threads since ConcurrentHashMap.size() is not reliable. */
     public static final AtomicInteger threadCnt = new AtomicInteger(0);
 
-    public EvalThread(ChildContextInfo info, Source source) {
-        this.info = info;
-        this.source = source;
-        threadCnt.incrementAndGet();
-        threads.put(info.getId(), this);
-        idToMultiSlotTable.put(info.getId(), info.getMultiSlotInd());
-        truffleContext = info.createTruffleContext();
-        usePolyglot = false;
-    }
-
     public EvalThread(ChildContextInfo info, Source source, boolean usePolyglot) {
         this.info = info;
         this.source = source;
         threadCnt.incrementAndGet();
         threads.put(info.getId(), this);
         idToMultiSlotTable.put(info.getId(), info.getMultiSlotInd());
-        this.usePolyglot = true;
-        truffleContext = null;
+        this.usePolyglot = usePolyglot;
+        this.truffleContext = usePolyglot ? null : info.createTruffleContext();
     }
 
     @Override
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/interop/ForeignArray2R.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/interop/ForeignArray2R.java
index 9188efd74ade37058e8a0cd58ca1f32e2fc599d1..8d62b74ba44e9abf2dd02b38056682ab5978a462 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/interop/ForeignArray2R.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/interop/ForeignArray2R.java
@@ -100,7 +100,7 @@ public abstract class ForeignArray2R extends RBaseNode {
     }
 
     @Fallback
-    public Object doObject(Object obj, boolean recursive) {
+    public Object doObject(Object obj, @SuppressWarnings("unused") boolean recursive) {
         return obj;
     }
 
@@ -159,41 +159,39 @@ public abstract class ForeignArray2R extends RBaseNode {
     }
 
     private Object element2R(Object value, CollectedElements ce) throws UnsupportedMessageException {
-        if (value instanceof TruffleObject) {
+        Object unboxedValue = value;
+        if (unboxedValue instanceof TruffleObject) {
             if (isNull == null) {
                 CompilerDirectives.transferToInterpreterAndInvalidate();
                 isNull = insert(Message.IS_NULL.createNode());
             }
-            if (ForeignAccess.sendIsNull(isNull, (TruffleObject) value)) {
-                value = RNull.instance;
+            if (ForeignAccess.sendIsNull(isNull, (TruffleObject) unboxedValue)) {
+                unboxedValue = RNull.instance;
             } else {
                 if (isBoxed == null) {
                     CompilerDirectives.transferToInterpreterAndInvalidate();
                     isBoxed = insert(Message.IS_BOXED.createNode());
                 }
-                if (ForeignAccess.sendIsBoxed(isBoxed, (TruffleObject) value)) {
+                if (ForeignAccess.sendIsBoxed(isBoxed, (TruffleObject) unboxedValue)) {
                     if (unbox == null) {
                         CompilerDirectives.transferToInterpreterAndInvalidate();
                         unbox = insert(Message.UNBOX.createNode());
                     }
-                    value = ForeignAccess.sendUnbox(unbox, (TruffleObject) value);
+                    unboxedValue = ForeignAccess.sendUnbox(unbox, (TruffleObject) unboxedValue);
                 }
             }
         }
-        ce.typeCheck.checkForeign(value);
+        ce.typeCheck.checkForeign(unboxedValue);
 
         if (foreign2R == null) {
             CompilerDirectives.transferToInterpreterAndInvalidate();
             foreign2R = insert(Foreign2RNodeGen.create());
         }
-        return foreign2R.execute(value);
+        return foreign2R.execute(unboxedValue);
     }
 
     /**
      * Coverts the elements collected from a foreign array or java iterable into a vector or list.
-     * 
-     * @param ce
-     * @return
      */
     public static RAbstractVector asAbstractVector(CollectedElements ce) {
         InteropTypeCheck.RType type = ce.typeCheck.getType();
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/AbstractMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/AbstractMRTest.java
index c53520bccbbf856cdd5ae2f7cfaabcf039f6a44f..8e0d8579e8b292a2e74e7cfdfbfaf230921c2277 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/AbstractMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/AbstractMRTest.java
@@ -40,8 +40,7 @@ abstract class AbstractMRTest {
     /**
      * Create TruffleObject-s to be rudimentary tested for IS_NULL, IS_BOXED/UNBOX, IS_EXECUTABLE,
      * IS_POINTER, HAS_SIZE/GET_SIZE/KEYS behavior.
-     * 
-     * @return
+     *
      * @throws Exception
      */
     protected abstract TruffleObject[] createTruffleObjects() throws Exception;
@@ -55,31 +54,31 @@ abstract class AbstractMRTest {
         return null;
     }
 
-    protected boolean isNull(TruffleObject obj) {
+    protected boolean isNull(@SuppressWarnings("unused") TruffleObject obj) {
         return false;
     }
 
-    protected boolean isExecutable(TruffleObject obj) {
+    protected boolean isExecutable(@SuppressWarnings("unused") TruffleObject obj) {
         return false;
     }
 
-    protected boolean isPointer(TruffleObject obj) {
+    protected boolean isPointer(@SuppressWarnings("unused") TruffleObject obj) {
         return false;
     }
 
-    protected boolean isBoxed(TruffleObject obj) {
+    protected boolean isBoxed(@SuppressWarnings("unused") TruffleObject obj) {
         return false;
     }
 
-    protected boolean hasSize(TruffleObject obj) {
+    protected boolean hasSize(@SuppressWarnings("unused") TruffleObject obj) {
         return false;
     }
 
-    protected int getSize(TruffleObject obj) {
+    protected int getSize(@SuppressWarnings("unused") TruffleObject obj) {
         throw new UnsupportedOperationException("override if hasSize returns true");
     }
 
-    protected Object getUnboxed(TruffleObject obj) {
+    protected Object getUnboxed(@SuppressWarnings("unused") TruffleObject obj) {
         throw new UnsupportedOperationException("override if isBoxed returns true");
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/ListMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/ListMRTest.java
index 9486402b6da24bc7fc821c33be2b9fc71edc3ffa..9d2190310874d3727909d540699e50688fbd2b22 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/ListMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/ListMRTest.java
@@ -53,6 +53,7 @@ public class ListMRTest extends AbstractMRTest {
         engine = PolyglotEngine.newBuilder().build();
     }
 
+    @Override
     @Test
     public void testNativePointer() throws UnsupportedMessageException, UnknownIdentifierException, UnsupportedTypeException {
         assertTrue(ForeignAccess.sendToNative(Message.TO_NATIVE.createNode(), create("list", testValues)) instanceof NativePointer);
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/REnvironmentMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/REnvironmentMRTest.java
index 33ff1c3fea8760a3e3a6ff1ae0e6ded6f60e33e2..cc85fd4757a1f15a7e4504d45fe5c066e0da637a 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/REnvironmentMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/REnvironmentMRTest.java
@@ -131,6 +131,7 @@ public class REnvironmentMRTest extends AbstractMRTest {
         assertFalse(KeyInfo.isInternal(info));
     }
 
+    @Override
     protected TruffleObject[] createTruffleObjects() throws Exception {
         PolyglotEngine engine = PolyglotEngine.newBuilder().build();
         Source src = Source.newBuilder("e <- new.env(); e$s <- 'aaa'; e$i <- 123L; e$d <- 123.1; e$b <- TRUE; e$fn <- function() {}; e$n <- NULL; e$l <- 666; lockBinding('l', e); e").mimeType(
@@ -143,6 +144,7 @@ public class REnvironmentMRTest extends AbstractMRTest {
         return new String[]{"s", "i", "d", "b", "fn", "n", "l"};
     }
 
+    @Override
     protected TruffleObject createEmptyTruffleObject() throws Exception {
         PolyglotEngine engine = PolyglotEngine.newBuilder().build();
         Source src = Source.newBuilder("new.env()").mimeType("text/x-r").name("test.R").build();
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RFunctionMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RFunctionMRTest.java
index 03c5a908b7d16155168ccb025558a4f9e0e7eaa0..52e912a153a49f1edd4501453602e463feec3ccf 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RFunctionMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RFunctionMRTest.java
@@ -71,7 +71,7 @@ public class RFunctionMRTest extends AbstractMRTest {
         return new TruffleObject[]{create("function() {}")};
     }
 
-    private RFunction create(String fun) {
+    private static RFunction create(String fun) {
         PolyglotEngine engine = PolyglotEngine.newBuilder().build();
         Source src = Source.newBuilder(fun).mimeType("text/x-r").name("test.R").build();
         PolyglotEngine.Value result = engine.eval(src);
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java
index 9b031d6eec129a18fef4cf2dda0b018df165ce66..d4a38ca6e5459e25a78ca77e2c6caba9a508303b 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/fastr/TestJavaInterop.java
@@ -798,12 +798,12 @@ public class TestJavaInterop extends TestBase {
                                         "'[[4]]','\n','[external object]','\n\n','[[5]]','\n','[external object]','\n\n','[[6]]','\n','[external object]','\n\n','[[7]]','\n','[external object]','\n\n', sep='')");
     }
 
-    private String getTestFieldValuesAsResult(String name) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
+    private static String getTestFieldValuesAsResult(String name) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
         TestArraysClass ta = new TestArraysClass();
         Field f = ta.getClass().getDeclaredField(name);
         Object value = f.get(ta);
         if (value instanceof List) {
-            List<?> l = (List) value;
+            List<?> l = (List<?>) value;
             value = l.toArray(new Object[l.size()]);
         }
         StringBuilder sb = new StringBuilder();
@@ -831,7 +831,7 @@ public class TestJavaInterop extends TestBase {
     }
 
     @Test
-    public void testConvertEmptyList() throws IllegalArgumentException, IllegalAccessException {
+    public void testConvertEmptyList() throws IllegalArgumentException {
         assertEvalFastR(Ignored.ImplementationError, CREATE_TRUFFLE_OBJECT + "as.character(to$listEmpty);", "as.character(list())");
     }
 
@@ -1155,8 +1155,7 @@ public class TestJavaInterop extends TestBase {
     }
 
     @Test
-    public void testForeignUnaryArithmeticOp() throws NoSuchFieldException,
-                    IllegalAccessException {
+    public void testForeignUnaryArithmeticOp() {
 
         TestClass t = new TestClass();
 
@@ -1186,8 +1185,7 @@ public class TestJavaInterop extends TestBase {
     }
 
     @Test
-    public void testForeignUnaryArithmeticReduceOp() throws NoSuchFieldException,
-                    IllegalAccessException {
+    public void testForeignUnaryArithmeticReduceOp() {
         assertEvalFastR(CREATE_TRUFFLE_OBJECT + "range(to$fieldBooleanArray)", "c(0, 1)");
         assertEvalFastR(CREATE_TRUFFLE_OBJECT + "range(to$fieldByteArray)", "c(1, 3)");
         assertEvalFastR(CREATE_TRUFFLE_OBJECT + "range(to$fieldDoubleArray)", "c(1.1, 3.1)");
@@ -1559,6 +1557,7 @@ public class TestJavaInterop extends TestBase {
         }
     }
 
+    @SuppressWarnings("unused")
     public static class TestClass {
 
         public static boolean fieldStaticBoolean = true;
@@ -2178,7 +2177,7 @@ public class TestJavaInterop extends TestBase {
             @Override
             public Integer next() {
                 throw new UnsupportedOperationException("Should not reach here.");
-            };
+            }
         }
 
         @Override
@@ -2199,5 +2198,4 @@ public class TestJavaInterop extends TestBase {
             throw new UnsupportedOperationException("Should not reach here.");
         }
     }
-
 }