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 0ac20c8270a386863346dc8d85ee4bf2930bd124..c3824b5e0f53eede074f0c9c0387dc23748221c2 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
@@ -245,6 +245,16 @@ public final class RAbstractVectorAccessFactory implements Factory26 {
         });
     }
 
+    @Override
+    public CallTarget accessIsInstantiable() {
+        return Truffle.getRuntime().createCallTarget(new InteropRootNode() {
+            @Override
+            public Object execute(VirtualFrame frame) {
+                return false;
+            }
+        });
+    }
+
     @Override
     public CallTarget accessIsBoxed() {
         return Truffle.getRuntime().createCallTarget(new InteropRootNode() {
@@ -266,6 +276,16 @@ public final class RAbstractVectorAccessFactory implements Factory26 {
         });
     }
 
+    @Override
+    public CallTarget accessHasKeys() {
+        return Truffle.getRuntime().createCallTarget(new InteropRootNode() {
+            @Override
+            public Object execute(VirtualFrame frame) {
+                return false;
+            }
+        });
+    }
+
     @Override
     public CallTarget accessGetSize() {
         return Truffle.getRuntime().createCallTarget(new InteropRootNode() {
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 724ba311902b05b522a0082b1f815b5acdb750b0..d3060412fb3488fd7936308f9df4915d800cbe7f 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
@@ -22,7 +22,7 @@
  */
 package com.oracle.truffle.r.test.engine.interop;
 
-import static org.junit.Assert.assertEquals;
+import com.oracle.truffle.api.interop.ArityException;
 import static org.junit.Assert.assertTrue;
 
 import java.util.HashSet;
@@ -37,10 +37,14 @@ import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.interop.InteropException;
 import com.oracle.truffle.api.interop.Message;
 import com.oracle.truffle.api.interop.TruffleObject;
+import com.oracle.truffle.api.interop.UnknownIdentifierException;
 import com.oracle.truffle.api.interop.UnsupportedMessageException;
+import com.oracle.truffle.api.interop.UnsupportedTypeException;
 import com.oracle.truffle.api.vm.PolyglotEngine;
 import com.oracle.truffle.r.ffi.impl.interop.NativePointer;
 import com.oracle.truffle.r.runtime.data.RNull;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 
 public abstract class AbstractMRTest {
 
@@ -69,40 +73,29 @@ public abstract class AbstractMRTest {
      */
     protected abstract TruffleObject createEmptyTruffleObject() throws Exception;
 
-    protected String[] getKeys() {
-        return null;
+    /**
+     * 
+     * @param obj
+     * @return array of keys or <code>null</code> if KEYS message not supported
+     */
+    protected String[] getKeys(TruffleObject obj) {
+        throw new UnsupportedOperationException("override if HAS_KEYS returns true");
     }
 
     protected boolean isNull(@SuppressWarnings("unused") TruffleObject obj) {
         return false;
     }
 
-    protected boolean isExecutable(@SuppressWarnings("unused") TruffleObject obj) {
-        return false;
-    }
-
-    protected boolean isPointer(@SuppressWarnings("unused") TruffleObject obj) {
-        return true;
-    }
-
-    protected boolean isBoxed(@SuppressWarnings("unused") TruffleObject obj) {
-        return false;
-    }
-
-    protected boolean hasSize(@SuppressWarnings("unused") TruffleObject obj) {
-        return false;
-    }
-
     protected boolean testToNative(@SuppressWarnings("unused") TruffleObject obj) {
         return true;
     }
 
     protected int getSize(@SuppressWarnings("unused") TruffleObject obj) {
-        throw new UnsupportedOperationException("override if hasSize returns true");
+        throw new UnsupportedOperationException("override if HAS_SIZE returns true");
     }
 
     protected Object getUnboxed(@SuppressWarnings("unused") TruffleObject obj) {
-        throw new UnsupportedOperationException("override if isBoxed returns true");
+        throw new UnsupportedOperationException("override if IS_BOXED returns true");
     }
 
     @Test
@@ -113,16 +106,44 @@ public abstract class AbstractMRTest {
     }
 
     @Test
-    public void testIsExecutable() throws Exception {
+    public void testExecutable() throws Exception {
         for (TruffleObject obj : createTruffleObjects()) {
-            assertEquals(isExecutable(obj), ForeignAccess.sendIsExecutable(Message.IS_EXECUTABLE.createNode(), obj));
+            try {
+                // TODO if the need appears, also provide for args for execute
+                ForeignAccess.sendExecute(Message.createExecute(0).createNode(), obj);
+                assertEquals(obj.getClass().getSimpleName() + " " + obj + " IS_EXECUTABLE", true, ForeignAccess.sendIsExecutable(Message.IS_EXECUTABLE.createNode(), obj));
+            } catch (UnsupportedTypeException | ArityException e) {
+                throw e;
+            } catch (UnsupportedMessageException e) {
+                assertEquals(obj.getClass().getSimpleName() + " " + obj + " IS_EXECUTABLE", false, ForeignAccess.sendIsExecutable(Message.IS_EXECUTABLE.createNode(), obj));
+            }
         }
     }
 
     @Test
-    public void testIsPointer() throws Exception {
+    public void testInstantiable() throws Exception {
         for (TruffleObject obj : createTruffleObjects()) {
-            assertEquals(obj.getClass().getSimpleName(), isPointer(obj), ForeignAccess.sendIsPointer(Message.IS_POINTER.createNode(), obj));
+            try {
+                // TODO if the need appears, also provide for args for new
+                ForeignAccess.sendNew(Message.createNew(0).createNode(), obj);
+                assertEquals(obj.getClass().getSimpleName() + " " + obj + " IS_INSTANTIABLE", true, ForeignAccess.sendIsInstantiable(Message.IS_INSTANTIABLE.createNode(), obj));
+            } catch (UnsupportedTypeException | ArityException e) {
+                throw e;
+            } catch (UnsupportedMessageException e) {
+                assertEquals(obj.getClass().getSimpleName() + " " + obj + " IS_INSTANTIABLE", false, ForeignAccess.sendIsInstantiable(Message.IS_INSTANTIABLE.createNode(), obj));
+            }
+        }
+    }
+
+    @Test
+    public void testAsNativePointer() throws Exception {
+        for (TruffleObject obj : createTruffleObjects()) {
+            try {
+                assertNotNull(obj.getClass().getSimpleName(), ForeignAccess.sendToNative(Message.AS_POINTER.createNode(), obj));
+                assertEquals(obj.getClass().getSimpleName() + " " + obj + " IS_POINTER", true, ForeignAccess.sendIsPointer(Message.IS_POINTER.createNode(), obj));
+            } catch (UnsupportedMessageException e) {
+                assertEquals(obj.getClass().getSimpleName() + " " + obj + " IS_POINTER", false, ForeignAccess.sendIsPointer(Message.IS_POINTER.createNode(), obj));
+            }
         }
     }
 
@@ -138,7 +159,7 @@ public abstract class AbstractMRTest {
                 } else {
                     assertTrue(obj.getClass().getSimpleName(), ForeignAccess.sendToNative(Message.TO_NATIVE.createNode(), obj) == obj);
                 }
-            } catch (UnsupportedMessageException unsupportedMessageException) {
+            } catch (UnsupportedMessageException e) {
             }
         }
     }
@@ -146,38 +167,62 @@ public abstract class AbstractMRTest {
     @Test
     public void testSize() throws Exception {
         for (TruffleObject obj : createTruffleObjects()) {
-            boolean hasSize = ForeignAccess.sendHasSize(Message.HAS_SIZE.createNode(), obj);
-            assertEquals("" + obj.getClass().getSimpleName() + " " + obj + " hasSize", hasSize(obj), hasSize);
-            if (hasSize) {
-                assertEquals(getSize(obj), ForeignAccess.sendGetSize(Message.GET_SIZE.createNode(), obj));
-            } else {
-                assertInteropException(() -> ForeignAccess.sendGetSize(Message.GET_SIZE.createNode(), obj), UnsupportedMessageException.class);
-            }
+            testSize(obj);
+        }
+        TruffleObject empty = createEmptyTruffleObject();
+        if (empty != null) {
+            testSize(empty);
+        }
+    }
+
+    private void testSize(TruffleObject obj) {
+        try {
+            Object size = ForeignAccess.sendGetSize(Message.GET_SIZE.createNode(), obj);
+            assertEquals(getSize(obj), size);
+            assertEquals(obj.getClass().getSimpleName() + " " + obj + " HAS_SIZE", true, ForeignAccess.sendHasSize(Message.HAS_SIZE.createNode(), obj));
+        } catch (UnsupportedMessageException e) {
+            assertEquals(obj.getClass().getSimpleName() + " " + obj + " HAS_SIZE", false, ForeignAccess.sendHasSize(Message.HAS_SIZE.createNode(), obj));
         }
     }
 
     @Test
     public void testBoxed() throws Exception {
         for (TruffleObject obj : createTruffleObjects()) {
-            boolean isBoxed = ForeignAccess.sendIsBoxed(Message.IS_BOXED.createNode(), obj);
-            assertEquals("" + obj.getClass().getSimpleName() + " " + obj + " isBoxed", isBoxed(obj), isBoxed);
-            if (isBoxed) {
-                assertEquals(getUnboxed(obj), ForeignAccess.sendUnbox(Message.UNBOX.createNode(), obj));
-            } else {
-                assertInteropException(() -> ForeignAccess.sendUnbox(Message.UNBOX.createNode(), obj), UnsupportedMessageException.class);
-            }
+            testUnboxed(obj);
+        }
+        TruffleObject empty = createEmptyTruffleObject();
+        if (empty != null) {
+            testUnboxed(empty);
+        }
+    }
+
+    private void testUnboxed(TruffleObject obj) {
+        try {
+            Object unboxed = ForeignAccess.sendUnbox(Message.UNBOX.createNode(), obj);
+            assertEquals(getUnboxed(obj), unboxed);
+            assertEquals(obj.getClass().getSimpleName() + " " + obj + " IS_BOXED", true, ForeignAccess.sendIsBoxed(Message.IS_BOXED.createNode(), obj));
+        } catch (UnsupportedMessageException e) {
+            assertEquals(obj.getClass().getSimpleName() + " " + obj + " IS_BOXED", false, ForeignAccess.sendIsBoxed(Message.IS_BOXED.createNode(), obj));
         }
     }
 
     @Test
     public void testKeys() throws Exception {
-        String[] keys = getKeys();
-        if (keys == null) {
-            return;
-        }
         for (TruffleObject obj : createTruffleObjects()) {
+            testKeys(obj);
+        }
+        TruffleObject empty = createEmptyTruffleObject();
+        if (empty != null) {
+            testKeys(empty);
+        }
+    }
+
+    private void testKeys(TruffleObject obj) throws UnknownIdentifierException, UnsupportedMessageException {
+        try {
             TruffleObject keysObj = ForeignAccess.sendKeys(Message.KEYS.createNode(), obj);
+
             int size = (int) ForeignAccess.sendGetSize(Message.GET_SIZE.createNode(), keysObj);
+            String[] keys = getKeys(obj);
             assertEquals(keys.length, size);
 
             Set<Object> set = new HashSet<>();
@@ -187,31 +232,9 @@ public abstract class AbstractMRTest {
             for (String key : keys) {
                 assertTrue(set.contains(key));
             }
-        }
-    }
-
-    @Test
-    public void testEmpty() throws Exception {
-
-        TruffleObject obj = createEmptyTruffleObject();
-        if (obj != null) {
-            if (hasSize(obj)) {
-                int size = (int) ForeignAccess.sendGetSize(Message.GET_SIZE.createNode(), obj);
-                assertEquals(0, size);
-            }
-
-            TruffleObject keys = null;
-            try {
-                keys = ForeignAccess.sendKeys(Message.KEYS.createNode(), obj);
-            } catch (UnsupportedMessageException ex) {
-            }
-            if (keys != null) {
-                boolean keysHasSize = ForeignAccess.sendHasSize(Message.HAS_SIZE.createNode(), keys);
-                if (keysHasSize) {
-                    int keysSize = (int) ForeignAccess.sendGetSize(Message.GET_SIZE.createNode(), keys);
-                    assertEquals(0, keysSize);
-                }
-            }
+            assertEquals(obj.getClass().getSimpleName() + " " + obj + " HAS_KEYS", true, ForeignAccess.sendHasKeys(Message.HAS_KEYS.createNode(), obj));
+        } catch (UnsupportedMessageException e) {
+            assertEquals(obj.getClass().getSimpleName() + " " + obj + " HAS_KEYS", false, ForeignAccess.sendHasKeys(Message.HAS_KEYS.createNode(), obj));
         }
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/ActiveBindingMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/ActiveBindingMRTest.java
index 6810c10e26110f9be23574fc9dab7abd348fc036..67876824be7055c2dbdb90e86f4c6fd95148662d 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/ActiveBindingMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/ActiveBindingMRTest.java
@@ -38,21 +38,11 @@ public class ActiveBindingMRTest extends AbstractMRTest {
         super.testIsNull(); // force inherited tests from AbstractMRTest
     }
 
-    @Override
-    protected boolean isBoxed(TruffleObject obj) {
-        return true;
-    }
-
     @Override
     protected Object getUnboxed(TruffleObject obj) {
         return ((ActiveBinding) obj).readValue();
     }
 
-    @Override
-    protected boolean isPointer(TruffleObject obj) {
-        return false;
-    }
-
     @Override
     protected TruffleObject[] createTruffleObjects() throws Exception {
         Source src = Source.newBuilder("f=function() {}").mimeType("text/x-r").name("test.R").build();
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 2105850c641c044dc97d6b264dc5808f2aa54772..4830226aa9939392d3286e8b2cf2c18affa1f64f 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
@@ -159,8 +159,11 @@ public class ListMRTest extends AbstractMRTest {
     }
 
     @Override
-    protected String[] getKeys() {
-        return new String[]{"i", "d", "b", "fn", "n", ""};
+    protected String[] getKeys(TruffleObject obj) {
+        if (((RAbstractContainer) obj).getLength() > 0) {
+            return new String[]{"i", "d", "b", "fn", "n", ""};
+        }
+        return new String[]{};
     }
 
     @Override
@@ -174,11 +177,6 @@ public class ListMRTest extends AbstractMRTest {
         return create("list", "");
     }
 
-    @Override
-    protected boolean hasSize(TruffleObject arg0) {
-        return true;
-    }
-
     @Override
     protected int getSize(TruffleObject obj) {
         return obj instanceof RList ? ((RList) obj).getLength() : ((RPairList) obj).getLength();
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RArgsValuesAndNamesMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RArgsValuesAndNamesMRTest.java
index 25e3ce0587e89f50085131b797e42aa94f99992f..7c81adcfafdda40bcb94ce911414375c343f9df9 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RArgsValuesAndNamesMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RArgsValuesAndNamesMRTest.java
@@ -140,8 +140,12 @@ public class RArgsValuesAndNamesMRTest extends AbstractMRTest {
     }
 
     @Override
-    protected String[] getKeys() {
-        return names;
+    protected String[] getKeys(TruffleObject obj) {
+        if (obj == RArgsValuesAndNames.EMPTY) {
+            return new String[]{};
+        } else {
+            return names;
+        }
     }
 
     @Override
@@ -149,11 +153,6 @@ public class RArgsValuesAndNamesMRTest extends AbstractMRTest {
         return RArgsValuesAndNames.EMPTY;
     }
 
-    @Override
-    protected boolean hasSize(TruffleObject obj) {
-        return true;
-    }
-
     @Override
     protected int getSize(TruffleObject obj) {
         return ((RArgsValuesAndNames) obj).getLength();
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RComplexMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RComplexMRTest.java
index cc6f61e510636907532c187f7dfc2abdcf9ccd44..6b7b133f8a895d8deac06dd8c2a875d418ff57f3 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RComplexMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RComplexMRTest.java
@@ -39,21 +39,6 @@ public class RComplexMRTest extends AbstractMRTest {
         super.testIsNull(); // force inherited tests from AbstractMRTest
     }
 
-    @Override
-    protected boolean isBoxed(TruffleObject obj) {
-        return false;
-    }
-
-    @Override
-    protected boolean isPointer(TruffleObject obj) {
-        return false;
-    }
-
-    @Override
-    protected boolean hasSize(TruffleObject obj) {
-        return false;
-    }
-
     @Override
     protected TruffleObject createEmptyTruffleObject() throws Exception {
         return null;
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RDoubleMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RDoubleMRTest.java
index d60ba87271af9c8c5c1ba17726988b68328178f7..9972f65126775f151e5fc1a9d600debb77fc4761 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RDoubleMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RDoubleMRTest.java
@@ -39,16 +39,6 @@ public class RDoubleMRTest extends AbstractMRTest {
         return new TruffleObject[]{RDouble.valueOf(1.1)};
     }
 
-    @Override
-    protected boolean isBoxed(TruffleObject obj) {
-        return true;
-    }
-
-    @Override
-    protected boolean isPointer(TruffleObject obj) {
-        return false;
-    }
-
     @Override
     protected Object getUnboxed(TruffleObject obj) {
         return ((RDouble) obj).getValue();
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 60ef430454923816291d01c501fe5e5bfed195d8..f84dd63dec2e8211d21b86bb0a2817729b9472fb 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
@@ -36,6 +36,7 @@ import com.oracle.truffle.api.interop.UnknownIdentifierException;
 import com.oracle.truffle.api.interop.UnsupportedMessageException;
 import com.oracle.truffle.api.interop.java.JavaInterop;
 import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.r.runtime.data.RDataFactory;
 import com.oracle.truffle.r.runtime.env.REnvironment;
 
 public class REnvironmentMRTest extends AbstractMRTest {
@@ -138,13 +139,16 @@ public class REnvironmentMRTest extends AbstractMRTest {
     }
 
     @Override
-    protected String[] getKeys() {
-        return new String[]{"s", "i", "d", "b", "fn", "n", "l"};
+    protected String[] getKeys(TruffleObject obj) {
+        if (((REnvironment) obj).getName().equals("R_EmptyEnv")) {
+            return new String[]{};
+        } else {
+            return new String[]{"s", "i", "d", "b", "fn", "n", "l"};
+        }
     }
 
     @Override
     protected TruffleObject createEmptyTruffleObject() throws Exception {
-        Source src = Source.newBuilder("new.env()").mimeType("text/x-r").name("test.R").build();
-        return engine.eval(src).as(REnvironment.class);
+        return REnvironment.emptyEnv();
     }
 }
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 1397ae9de207297a1faf9def422db37185be7b54..86b260ec4b60f5b99cbf1eb37b57114c21aee416 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
@@ -78,11 +78,6 @@ public class RFunctionMRTest extends AbstractMRTest {
         return result.as(RFunction.class);
     }
 
-    @Override
-    protected boolean isExecutable(TruffleObject obj) {
-        return true;
-    }
-
     @Override
     protected TruffleObject createEmptyTruffleObject() throws Exception {
         return null;
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RIntegerMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RIntegerMRTest.java
index 01127d68fdb19dc6306ba9ca2a702047a02947bd..f4792987d064d3f9b796fa83d1834a842946e4d6 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RIntegerMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RIntegerMRTest.java
@@ -39,21 +39,11 @@ public class RIntegerMRTest extends AbstractMRTest {
         return new TruffleObject[]{RInteger.valueOf(123)};
     }
 
-    @Override
-    protected boolean isBoxed(TruffleObject obj) {
-        return true;
-    }
-
     @Override
     protected Object getUnboxed(TruffleObject obj) {
         return ((RInteger) obj).getValue();
     }
 
-    @Override
-    protected boolean isPointer(TruffleObject obj) {
-        return false;
-    }
-
     @Override
     protected TruffleObject createEmptyTruffleObject() throws Exception {
         return null;
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RInteropScalarMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RInteropScalarMRTest.java
index 7f4d397cc389a4befc9e5744089326c739c8644b..745c81dee1913eb598ee2d1bd6261407b129254b 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RInteropScalarMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RInteropScalarMRTest.java
@@ -62,16 +62,6 @@ public class RInteropScalarMRTest extends AbstractMRTest {
                         RInteropScalar.RInteropShort.valueOf(Short.MAX_VALUE)};
     }
 
-    @Override
-    protected boolean isBoxed(TruffleObject arg0) {
-        return true;
-    }
-
-    @Override
-    protected boolean isPointer(TruffleObject obj) {
-        return false;
-    }
-
     @Override
     protected Object getUnboxed(TruffleObject obj) {
         RInteropScalar is = (RInteropScalar) obj;
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RLanguageMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RLanguageMRTest.java
index df5d8d6aca9215edb9f4697f71ebd74e37fd753c..592989add2aafc6ece1add6385f496f2ac00f7ae 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RLanguageMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RLanguageMRTest.java
@@ -105,11 +105,6 @@ public class RLanguageMRTest extends AbstractMRTest {
         return null;
     }
 
-    @Override
-    protected boolean hasSize(TruffleObject obj) {
-        return true;
-    }
-
     @Override
     protected int getSize(TruffleObject obj) {
         return ((RLanguage) obj).getLength();
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RRawMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RRawMRTest.java
index 6b1d2691ddf575726665dc9e1cf1e24e7dc1f868..2bb50e4d34a13fba741088dd979c2f473573d225 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RRawMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RRawMRTest.java
@@ -39,21 +39,6 @@ public class RRawMRTest extends AbstractMRTest {
         super.testIsNull(); // force inherited tests from AbstractMRTest
     }
 
-    @Override
-    protected boolean isBoxed(TruffleObject obj) {
-        return true;
-    }
-
-    @Override
-    protected boolean isPointer(TruffleObject obj) {
-        return false;
-    }
-
-    @Override
-    protected boolean hasSize(TruffleObject obj) {
-        return false;
-    }
-
     @Override
     protected Object getUnboxed(TruffleObject obj) {
         return ((RRaw) obj).getValue();
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RS4ObjectMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RS4ObjectMRTest.java
index 70b314fae9714478492a7001768a2f1b9224b3f1..858f2687b92cd9ea4b17300951cbe52599720041 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RS4ObjectMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/RS4ObjectMRTest.java
@@ -125,7 +125,7 @@ public class RS4ObjectMRTest extends AbstractMRTest {
     }
 
     @Override
-    protected String[] getKeys() {
+    protected String[] getKeys(TruffleObject obj) {
         return new String[]{"s", "d", "i", "b", "fn", "class"};
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/VectorMRTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/VectorMRTest.java
index bf7b4926955fd311f382f063bc3d9a1500c0ec2c..67c3f0c75676ad68e80352b938929d8ee61d4cda 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/VectorMRTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/engine/interop/VectorMRTest.java
@@ -38,7 +38,6 @@ import com.oracle.truffle.api.interop.java.JavaInterop;
 import com.oracle.truffle.api.source.Source;
 import com.oracle.truffle.r.runtime.data.RDataFactory;
 import com.oracle.truffle.r.runtime.data.RObject;
-import com.oracle.truffle.r.runtime.data.RVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector;
 import com.oracle.truffle.r.runtime.data.model.RAbstractVector;
@@ -108,32 +107,17 @@ public class VectorMRTest extends AbstractMRTest {
         return obj instanceof RObject;
     }
 
-    @Override
-    protected boolean isBoxed(TruffleObject obj) {
-        return ((RAbstractVector) obj).getLength() == 1;
-    }
-
     @Override
     protected Object getUnboxed(TruffleObject obj) {
         assertTrue(((RAbstractVector) obj).getLength() == 1);
         return ((RAbstractVector) obj).getDataAtAsObject(0);
     }
 
-    @Override
-    protected boolean hasSize(TruffleObject obj) {
-        return true;
-    }
-
     @Override
     protected int getSize(TruffleObject obj) {
         return ((RAbstractVector) obj).getLength();
     }
 
-    @Override
-    protected boolean isPointer(TruffleObject obj) {
-        return obj instanceof RVector<?>;
-    }
-
     private static TruffleObject create(String createTxt) throws Exception {
         Source src = Source.newBuilder(createTxt).mimeType("text/x-r").name("test.R").build();
         return engine.eval(src).as(RAbstractVector.class);
diff --git a/mx.fastr/suite.py b/mx.fastr/suite.py
index fcbca55fbfcc07c1d1f1cf40cacabd6aa716f272..85809ddcf3603a74017662251b5fee53dd4c7587 100644
--- a/mx.fastr/suite.py
+++ b/mx.fastr/suite.py
@@ -29,7 +29,7 @@ suite = {
             {
                "name" : "truffle",
                "subdir" : True,
-               "version" : "d1bb9076f1fa6af71c60be140f980794596a75b4",
+               "version" : "e3ce4c4abc668fd637e64a467a8d5b999c2fbdae",
                "urls" : [
                     {"url" : "https://github.com/graalvm/graal", "kind" : "git"},
                     {"url" : "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind" : "binary"},