diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguage.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguage.java
index af910abea6dc212c9d4b2159274641685fbc0222..8b6d2490248b99625766fa24370d9900bd38eb90 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguage.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguage.java
@@ -155,18 +155,20 @@ public final class TruffleRLanguage extends TruffleLanguage<RContext> {
 
     @Override
     protected Object findMetaObject(RContext context, Object value) {
-        String ret = "Object";
-        if (value instanceof RPromise) {
-            RPromise promise = (RPromise) value;
+        Object unwrappedValue = value;
+        if (unwrappedValue instanceof RPromise) {
+            RPromise promise = (RPromise) unwrappedValue;
             if (promise.isEvaluated()) {
-                value = promise.getValue();
+                unwrappedValue = promise.getValue();
             }
         }
-        value = RRuntime.asAbstractVector(value); // Wrap scalars "Integer", "Double" etc.
-        if (value instanceof RTypedValue) {
-            ret = ((RTypedValue) value).getRType().getName();
+        unwrappedValue = RRuntime.asAbstractVector(unwrappedValue); // Wrap scalars "Integer",
+                                                                    // "Double" etc.
+        if (unwrappedValue instanceof RTypedValue) {
+            return ((RTypedValue) unwrappedValue).getRType().getName();
+        } else {
+            return "Object";
         }
-        return ret;
     }
 
     @Override
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRTckTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRTckTest.java
index 11fdfeb85a3f1c7c935b7ac1e56c2c1fad419eb4..29c8ec9c317b0c17b0e369be5c82d641b65340a9 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRTckTest.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRTckTest.java
@@ -134,6 +134,19 @@ public class FastRTckTest extends TruffleTCK {
         "isExecutableOfForeign <- function(o) {\n" +
         "  .fastr.interop.toBoolean(.fastr.interop.isExecutable(o))\n" +
         "}\n" +
+        "intValue <- function() 42L\n" +
+        "intVectorValue <- function() c(42L, 40L)\n" +
+        "intSequenceValue <- function() 42:50\n" +
+        "intType <- function() 'integer'\n" +
+        "doubleValue <- function() 42.1\n" +
+        "doubleVectorValue <- function() c(42.1, 40)\n" +
+        "doubleSequenceValue <- function() 42.1:50\n" +
+        "doubleType <- function() 'double'\n" +
+        "functionValue <- function() { function(x) 1 }\n" +
+        "functionType <- function() 'closure'\n" +
+        "builtinFunctionValue <- function() `+`\n" +
+        "builtinFunctionType <- function() 'builtin'\n" +
+        "valueWithSource <- function() intValue\n" +
         "for (name in ls()) .fastr.interop.export(name, get(name))\n",
         RSource.Internal.TCK_INIT
     );
@@ -473,12 +486,16 @@ public class FastRTckTest extends TruffleTCK {
 
     @Override
     protected String[] metaObjects() {
-        return null; // TBD add proper impl here.
+        return new String[]{
+                        "intValue", "intType", "intVectorValue", "intType", "intSequenceValue", "intType",
+                        "doubleValue", "doubleType", "doubleVectorValue", "doubleType", "doubleSequenceValue", "doubleType",
+                        "functionValue", "functionType",
+                        "builtinFunctionValue", "builtinFunctionType"};
     }
 
     @Override
     protected String valueWithSource() {
-        return null; // TBD add proper impl here.
+        return "valueWithSource";
     }
 
 }