diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java
index 351de044af320e907df5f8260c5f0d94467fd47c..368c1913cb7cb8e7d524faba46b323aff1a80cba 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java
@@ -146,7 +146,10 @@ public class MethodsListDispatch {
                         @Cached("create()") GetFromEnvironment get,
                         @Cached("createPckgAttrAccess()") GetFixedAttributeNode klassPckgAttrAccess,
                         @Cached("createPckgAttrAccess()") GetFixedAttributeNode valPckgAttrAccess) {
-            String klassString = klass.getLength() == 0 ? RRuntime.STRING_NA : klass.getDataAt(0);
+            if (klass.getLength() == 0) {
+                return RNull.instance;
+            }
+            String klassString = klass.getDataAt(0);
 
             if (klassString.length() == 0) {
                 throw error(RError.Message.ZERO_LENGTH_VARIABLE);
@@ -175,6 +178,11 @@ public class MethodsListDispatch {
         protected RS4Object callGetClassFromCache(RS4Object klass, @SuppressWarnings("unused") REnvironment table) {
             return klass;
         }
+
+        @Fallback
+        protected RS4Object callGetClassFromCache(@SuppressWarnings("unused") Object klass, @SuppressWarnings("unused") Object table) {
+            throw error(Message.GENERIC, "class should be either a character-string name or a class definition");
+        }
     }
 
     public abstract static class R_set_method_dispatch extends RExternalBuiltinNode.Arg1 {