diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/AttributesAccessNodes.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/AttributesAccessNodes.java
index 4cf867b273cbff92497b40304d4b10cc97edc13d..fbe1b12be9818a0a5eedbc6e7d48019ec23afc08 100644
--- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/AttributesAccessNodes.java
+++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/AttributesAccessNodes.java
@@ -101,7 +101,21 @@ public final class AttributesAccessNodes {
                 CompilerDirectives.transferToInterpreterAndInvalidate();
                 getAttributesNode = GetAttributesNode.create();
             }
-            return getAttributesNode.execute(obj);
+            Object resultObj = getAttributesNode.execute(obj);
+            if (resultObj == RNull.instance) {
+                return resultObj;
+            }
+            assert resultObj instanceof RList : "GetAttributesNode should return RList or RNull";
+            RList list = (RList) resultObj;
+            Object result = RNull.instance;
+            RStringVector names = list.getNames();
+            assert names.getLength() == list.getLength();
+            for (int i = list.getLength() - 1; i >= 0; i--) {
+                Object item = list.getDataAt(i);
+                RSymbol symbol = RDataFactory.createSymbol(names.getDataAt(i));
+                result = RDataFactory.createPairList(item, result, symbol);
+            }
+            return result;
         }
 
         @Fallback
diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/tests/simpleTests.R b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/tests/simpleTests.R
index 208c28dece6771be98aa7f1070825070689cf4e3..a620c50095081e73aa39f3274b87d5efb5ad2c5b 100644
--- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/tests/simpleTests.R
+++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/tests/simpleTests.R
@@ -145,4 +145,7 @@ rffi.RfFunctions()
 setAttrTarget <- c(1,2,3)
 attr(setAttrTarget, 'myattr2') <- 'some value';
 api.SET_ATTRIB(setAttrTarget, as.pairlist(list(myattr=42)))
-setAttrTarget
\ No newline at end of file
+setAttrTarget
+
+typeof(api.ATTRIB(mtcars))
+api.ATTRIB(structure(c(1,2,3), myattr3 = 33))