diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/UpdateArrayHelperNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/UpdateArrayHelperNode.java
index 1aafaa28910009c2b00768c5c8dafe1c4b233f91..3e4fe4a735792b50c4327e066e3dfae9f47f8b09 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/UpdateArrayHelperNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/array/write/UpdateArrayHelperNode.java
@@ -428,6 +428,9 @@ public abstract class UpdateArrayHelperNode extends RNode {
         if (positions.getNames() != null) {
             posNames.enter();
             RStringVector names = getNamesVector(resultVector);
+            if (names.isShared()) {
+                names = (RStringVector) names.copy();
+            }
             RStringVector newNames = positions.getNames();
             namesNACheck.enable(newNames);
             for (int i = 0; i < positions.getLength(); i++) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastListNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastListNode.java
index ac740568d2caa912dafa0ca42a325ea57e3eee25..e2535269553d1d7add16633fe27c04a5551edc9a 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastListNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/CastListNode.java
@@ -118,4 +118,9 @@ public abstract class CastListNode extends CastNode {
         }
         return RDataFactory.createList(data, RDataFactory.createStringVector(names, complete));
     }
+
+    @Specialization
+    protected RList doFunction(RFunction func) {
+        return RDataFactory.createList(new Object[]{func});
+    }
 }
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 c36881a67a63f00edb18700f790904cffa9d659f..2c9e2c38492368283822b95575bd3016250fa54a 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
@@ -139,6 +139,11 @@ public abstract class PrecedenceNode extends UnaryNode {
         return STRING_PRECEDENCE;
     }
 
+    @Specialization
+    protected int doFunction(RFunction func, byte recursive) {
+        return LIST_PRECEDENCE;
+    }
+
     @Specialization(guards = "isRecursive")
     protected int doListRecursive(VirtualFrame frame, RList val, byte recursive) {
         int precedence = -1;
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RVector.java
index 8ff364820954b83bea850200e04369cf70ba2b14..b5afd53f0a44c8559cb1a4b264f960a208fcb972 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RVector.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RVector.java
@@ -118,13 +118,12 @@ public abstract class RVector extends RBounded implements RShareable, RAbstractV
     public final RStringVector getNames() {
         if (names == null) {
             if (dimNames != null && dimNames.getLength() == 1) {
-                RStringVector res = (RStringVector) dimNames.getDataAt(0);
-                return res.isShared() ? (RStringVector) res.copy() : res;
+                return (RStringVector) dimNames.getDataAt(0);
             } else {
                 return null;
             }
         } else {
-            return names.isShared() ? (RStringVector) names.copy() : names;
+            return names;
         }
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
index 6961b243528e30db5451e426062650812ead24ce..0931c413ba1a2c5db8880a94cb22aa78824719fc 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/ExpectedTestOutput.test
@@ -7583,6 +7583,10 @@ x
 x y
 1 2
 
+##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCombine
+#{ f <- function() { }; length(c(f, 2)) == 2 }
+[1] TRUE
+
 ##com.oracle.truffle.r.test.simple.TestSimpleBuiltins.testCombine
 #{ f <- function(x,y) { c(x,y) } ; f(1,1) ; f(1, TRUE) ; f(NULL, NULL) }
 NULL
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java
index 1c9b4239aca87b862666be93631dfff1256caba6..3eb4a2154f7d1ccc374eb97d74223aeee79e50e3 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/all/AllTests.java
@@ -6739,6 +6739,11 @@ public class AllTests extends TestBase {
         assertEval("{ x<-expression(1); c(x,2) }");
     }
 
+    @Test
+    public void TestSimpleBuiltins_testCombine_85e7fa7a14d25590b451c65e76fb380a() {
+        assertEval("{ f <- function() { }; length(c(f, 2)) == 2 }");
+    }
+
     @Test
     public void TestSimpleBuiltins_testCombineBroken_d365e1ffe5f8c886f6d1911c69b3af00() {
         assertEval("{ c(1i,0/0) }");
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java
index f785f9d1fdd1ce8a65e63b26618a9712cbf1ec41..4514533592b37132501e5804ff3bbadcdc282cf7 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/simple/TestSimpleBuiltins.java
@@ -611,6 +611,10 @@ public class TestSimpleBuiltins extends TestBase {
 
         assertEval("{ x<-expression(1); c(x) }");
         assertEval("{ x<-expression(1); c(x,2) }");
+
+        // print output for a function in a list doesn't match GnuR,
+        // which seems to invoke deparse, so we just check the c didn't fail.
+        assertEval("{ f <- function() { }; length(c(f, 2)) == 2 }");
     }
 
     @Test