diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Paste.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Paste.java
index 4db45a113dcfb5ff6de7ba0969a2e32853477643..eab25eb77c5cabbcff68d6562a01c66dcb2974d5 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Paste.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Paste.java
@@ -44,6 +44,7 @@ import com.oracle.truffle.r.nodes.function.ClassHierarchyNode;
 import com.oracle.truffle.r.nodes.function.call.RExplicitBaseEnvCallDispatcher;
 import com.oracle.truffle.r.nodes.unary.CastNode;
 import com.oracle.truffle.r.runtime.RError.Message;
+import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.builtins.RBuiltin;
 import com.oracle.truffle.r.runtime.data.RDataFactory;
 import com.oracle.truffle.r.runtime.data.RIntSequence;
@@ -164,7 +165,18 @@ public abstract class Paste extends RBuiltinNode.Arg3 {
         if (emptyCnt == length) {
             return ONE_EMPTY_STRING;
         } else if (length == 1) {
-            return converted[0];
+            if (values.isComplete()) {
+                return converted[0];
+            } else {
+                // Clone array since it might be physical data array of a string vector
+                String[] result = converted[0].clone();
+                for (int j = result.length - 1; j >= 0; j--) {
+                    if (result[j] == RRuntime.STRING_NA) {
+                        result[j] = "NA";
+                    }
+                }
+                return result;
+            }
         } else {
             return prepareResult(sep, length, converted, maxLength);
         }
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 d0a65ff2df9f1741fc7bbb76308ea41b300ff3f0..a9fb9902160a8ab4c36351ca62c011e8de1fb34b 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
@@ -46689,10 +46689,18 @@ character(0)
 #{ paste(1:2, 1:3, FALSE, collapse=NULL) }
 [1] "1 1 FALSE" "2 2 FALSE" "1 3 FALSE"
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_paste.testPaste#
+#{ paste(NA) }
+[1] "NA"
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_paste.testPaste#
 #{ paste(NULL, list(), sep = "=") }
 character(0)
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_paste.testPaste#
+#{ paste(c(1,NA)) }
+[1] "1"  "NA"
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_paste.testPaste#
 #{ paste(character(0),31415) }
 [1] " 31415"
@@ -46701,6 +46709,10 @@ character(0)
 #{ paste(sep="") }
 character(0)
 
+##com.oracle.truffle.r.test.builtins.TestBuiltin_paste.testPaste#
+#{ s<-c('1',NA); paste(s); s; }
+[1] "1" NA
+
 ##com.oracle.truffle.r.test.builtins.TestBuiltin_paste.testPasteWithS3AsCharacter#
 #{ as.character.myc <- function(x) '42'; val <- 'hello'; class(val) <- 'myc'; paste(val, 'world') }
 [1] "hello world"
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_paste.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_paste.java
index d132fb4543837fdb1a9e3780fe62cf6172a86b2c..197cd5a60365be51721af3cc831cad69c9e499ca 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_paste.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_paste.java
@@ -81,6 +81,9 @@ public class TestBuiltin_paste extends TestBase {
         assertEval("{ paste(sep=\"\") }");
         assertEval("{ paste(1:2, 1:3, FALSE, collapse=\"-\", sep=\"+\") }");
         assertEval("{ paste(NULL, list(), sep = \"=\") }");
+        assertEval("{ paste(NA) }");
+        assertEval("{ paste(c(1,NA)) }");
+        assertEval("{ s<-c('1',NA); paste(s); s; }");
     }
 
     @Test