diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R
index 02f30e9d381802fac31a8d5fdb34db871245c4f9..78cd2455f69d491617cfcd785433d0a652900ac7 100644
--- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R
+++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/R/testrffi.R
@@ -1,3 +1,7 @@
+rffi.dotCModifiedArguments <- function(data) {
+	.C("dotCModifiedArguments", length(data), as.integer(data), as.double(data), as.logical(data))
+}
+
 rffi.addInt <- function(a, b) {
 	.Call("addInt", as.integer(a), as.integer(b), PACKAGE = "testrffi")
 }
diff --git a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c
index cf5d7e5a1ab59411236af089b0e37331f108c838..bc25f656cd1659c47f2d76463e8542f75c3883ba 100644
--- a/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c
+++ b/com.oracle.truffle.r.test.native/packages/testrffi/testrffi/src/testrffi.c
@@ -27,6 +27,18 @@
 #include <Rdefines.h>
 #include <Rinternals.h>
 
+void dotCModifiedArguments(int* len, int* idata, double* rdata, int* ldata) {
+    for (int i = 0; i < len[0]; i++) {
+	idata[i] ++;
+    }
+    for (int i = 0; i < len[0]; i++) {
+	rdata[i] *= 0.2;
+    }
+    for (int i = 0; i < len[0]; i++) {
+	ldata[i] = ldata[i] == 0 ? 1 : 0;
+    }
+}
+
 SEXP addInt(SEXP a, SEXP b) {
 	int aInt = INTEGER_VALUE(a);
 	int bInt = INTEGER_VALUE(b);
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 6ce0a9f33589fd4abde403ec48bead89d35e807a..1b48a7f485dde8e375dd15c92857ef91b419d69f 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
@@ -102649,6 +102649,32 @@ In cor(cbind(c(1, 1, 1), c(1, 1, 1))) : the standard deviation is zero
 [1,] 10+0i -4+0i
 [2,] -2+0i  0+0i
 
+##com.oracle.truffle.r.test.library.stats.TestStats.testNaFail
+#na.fail(NULL)
+Error in complete.cases(object) :
+  no input has determined the number of cases
+
+##com.oracle.truffle.r.test.library.stats.TestStats.testNaFail
+#na.fail(c())
+Error in complete.cases(object) :
+  no input has determined the number of cases
+
+##com.oracle.truffle.r.test.library.stats.TestStats.testNaFail
+#na.fail(c(1,2,3))
+[1] 1 2 3
+
+##com.oracle.truffle.r.test.library.stats.TestStats.testNaFail
+#na.fail(c(1,NA,3))
+Error in na.fail.default(c(1, NA, 3)) : missing values in object
+
+##com.oracle.truffle.r.test.library.stats.TestStats.testNaFail
+#na.fail(c(1L, 2L))
+[1] 1 2
+
+##com.oracle.truffle.r.test.library.stats.TestStats.testNaFail
+#na.fail(c(NA, 2L))
+Error in na.fail.default(c(NA, 2L)) : missing values in object
+
 ##com.oracle.truffle.r.test.library.stats.TestStats.testQgamma
 #{ p <- (1:9)/10 ; qgamma(p, shape=1) }
 [1] 0.1053605 0.2231436 0.3566749 0.5108256 0.6931472 0.9162907 1.2039728
@@ -103278,6 +103304,21 @@ attr(,"foo")
      [,1] [,2]
 [2,]    2    4
 
+##com.oracle.truffle.r.test.library.utils.TestUtils.testMethods
+#methods(plot)
+ [1] plot.HoltWinters*   plot.TukeyHSD*      plot.acf*
+ [4] plot.data.frame*    plot.decomposed.ts* plot.default
+ [7] plot.dendrogram*    plot.density*       plot.ecdf
+[10] plot.factor*        plot.formula*       plot.function
+[13] plot.hclust*        plot.histogram*     plot.isoreg*
+[16] plot.lm*            plot.medpolish*     plot.mlm*
+[19] plot.ppr*           plot.prcomp*        plot.princomp*
+[22] plot.profile.nls*   plot.spec*          plot.stepfun
+[25] plot.stl*           plot.table*         plot.ts
+[28] plot.tskernel*
+
+   Non-visible functions are asterisked
+
 ##com.oracle.truffle.r.test.parser.TestParser.testNegativePow
 #10^(1+1)
 [1] 100
@@ -103325,7 +103366,13 @@ attr(,"foo")
  [7] 0.35201276 0.16919220 0.93579263 0.26084486
 
 ##com.oracle.truffle.r.test.rpackages.TestRFFIPackage.testLoadTestRFFICall
-#{ library("testrffi", lib.loc = "com.oracle.truffle.r.test/rpackages/testrlibs_user"); r1 <- rffi.addInt(2L, 3L); r2 <- rffi.addDouble(2, 3); v <- rffi.populateIntVector(5); detach("package:testrffi"); list(r1, r2, v) }
+#{ library("testrffi", lib.loc = "com.oracle.truffle.r.test/rpackages/testrlibs_user"); r1 <- rffi.addInt(2L, 3L);  detach("package:testrffi"); list(r1) }
+[[1]]
+[1] 5
+
+
+##com.oracle.truffle.r.test.rpackages.TestRFFIPackage.testLoadTestRFFICall
+#{ library("testrffi", lib.loc = "com.oracle.truffle.r.test/rpackages/testrlibs_user"); r1 <- rffi.addInt(2L, 3L); r2 <- rffi.addDouble(2, 3); v <- rffi.populateIntVector(5); v2 <- rffi.dotCModifiedArguments(c(0,1,2,3)); detach("package:testrffi"); list(r1, r2, v, v2) }
 [[1]]
 [1] 5
 
@@ -103335,6 +103382,20 @@ attr(,"foo")
 [[3]]
 [1] 0 1 2 3 4
 
+[[4]]
+[[4]][[1]]
+[1] 4
+
+[[4]][[2]]
+[1] 1 2 3 4
+
+[[4]][[3]]
+[1] 0.0 0.2 0.4 0.6
+
+[[4]][[4]]
+[1]  TRUE FALSE FALSE FALSE
+
+
 
 ##com.oracle.truffle.r.test.rpackages.TestRFFIPackage.testLoadTestRFFIExternal
 #{ library("testrffi", lib.loc = "com.oracle.truffle.r.test/rpackages/testrlibs_user"); r1 <- rffi.dotExternalAccessArgs(1L, 3, c(1,2,3), c('a', 'b'), 'b', TRUE, as.raw(12)); detach("package:testrffi"); list(r1) }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java
index e45f100967c42d6818904a95f405fc7e2e631878..1f82ac178685f0e4c006e18dd91f424d8c57acd0 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/TestBase.java
@@ -633,7 +633,7 @@ public class TestBase {
         return TestOutputManager.prepareResult(result, keepTrailingWhiteSpace);
     }
 
-    protected static boolean generatingExpected() {
+    public static boolean generatingExpected() {
         return expectedOutputManager.generate;
     }
 
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_solve.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_solve.java
index 5ae65c4ab235d6471db4e2ae3ab7bd460b06cb00..9d8cea5dfc0887a00a9ce328d5006c0196ae781c 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_solve.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_solve.java
@@ -20,9 +20,8 @@ public class TestBuiltin_solve extends TestBase {
 
     @Test
     public void testsolve1() {
-        assertEval(Ignored.Unknown,
-                        "argv <- structure(list(a = structure(c(1, 0.5, 0, 0, 0, 0.5,     1, 0.5, 0, 0, 0, 0.5, 1, 0.5, 0, 0, 0, 0.5, 1, 0.5, 0, 0,     0, 0.5, 1), .Dim = c(5L, 5L))), .Names = 'a');"
-                                        + "do.call('solve', argv)");
+        assertEval("argv <- structure(list(a = structure(c(1, 0.5, 0, 0, 0, 0.5,     1, 0.5, 0, 0, 0, 0.5, 1, 0.5, 0, 0, 0, 0.5, 1, 0.5, 0, 0,     0, 0.5, 1), .Dim = c(5L, 5L))), .Names = 'a');"
+                        + "do.call('solve', argv)");
     }
 
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/GnuROneShotRSession.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/GnuROneShotRSession.java
index a3b56f92e7b48bdd9897cc6dd5e4ae72018b98b1..e653d0792ec07a16cacc582330fd565c6f6f7875 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/GnuROneShotRSession.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/GnuROneShotRSession.java
@@ -24,6 +24,8 @@ package com.oracle.truffle.r.test.generate;
 
 import java.io.*;
 
+import com.oracle.truffle.r.test.TestBase;
+
 /**
  * A non-interactive one-shot invocation of GnuR that is robust, if slow, in the face of
  * multiple-line output.
@@ -62,6 +64,12 @@ public class GnuROneShotRSession implements RSession {
     }
 
     public String eval(String expression) {
+        if (expression.contains("library(") && !TestBase.generatingExpected()) {
+            System.out.println("==============================================");
+            System.out.println("LIBRARY LOADING WHILE CREATING EXPECTED OUTPUT");
+            System.out.println("creating expected output for these tests only works during test output");
+            System.out.println("generation (mx rtestgen), and will otherwise create corrupted output.");
+        }
         try {
             Process p = createGnuR();
             InputStream gnuRoutput = p.getInputStream();
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestStats.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestStats.java
index e15ad1a22a01d64ef9e15e915d678681d768e35e..e4d3f362393915411867a9d99f4d75314f62842e 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestStats.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestStats.java
@@ -118,4 +118,13 @@ public class TestStats extends TestBase {
         assertEval(Ignored.Unknown, "{ round( rcauchy(3, scale=4, location=1:3), digits = 5 ) }");
     }
 
+    @Test
+    public void testNaFail() {
+        assertEval("na.fail(c(1,2,3))");
+        assertEval("na.fail(c(1L, 2L))");
+        assertEval(Output.ContainsError, "na.fail(c(1,NA,3))");
+        assertEval(Output.ContainsError, "na.fail(c(NA, 2L))");
+        assertEval(Output.ContainsError, "na.fail(c())");
+        assertEval(Output.ContainsError, "na.fail(NULL)");
+    }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/utils/TestUtils.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/utils/TestUtils.java
index df98c9685c8fdde77c755a43a6ad0328d32fec7c..53a46d033f8bc3c310085bd8ea63291c4391696e 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/utils/TestUtils.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/utils/TestUtils.java
@@ -39,4 +39,8 @@ public class TestUtils extends TestBase {
         assertEval("{x<-matrix(c(1,2,3,4),2,2); head(x,1);}");
     }
 
+    @Test
+    public void testMethods() {
+        assertEval("methods(plot)");
+    }
 }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestRFFIPackage.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestRFFIPackage.java
index 1c51cc1b2c06a035ba520ecb0dff26e1850d4d6f..66e7464e4a9b64e46bea6fb57b36b368aa7b9eef 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestRFFIPackage.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/rpackages/TestRFFIPackage.java
@@ -55,9 +55,11 @@ public class TestRFFIPackage extends TestRPackages {
 
     @Test
     public void testLoadTestRFFICall() {
-        assertEval(TestBase.template(
-                        "{ library(\"testrffi\", lib.loc = \"%0\"); r1 <- rffi.addInt(2L, 3L); r2 <- rffi.addDouble(2, 3); v <- rffi.populateIntVector(5); detach(\"package:testrffi\"); list(r1, r2, v) }",
+        assertEval(TestBase.template("{ library(\"testrffi\", lib.loc = \"%0\"); r1 <- rffi.addInt(2L, 3L);  detach(\"package:testrffi\"); list(r1) }",
                         new String[]{packagePaths.rpackagesLibs.toString()}));
+        assertEval(TestBase.template(
+                        "{ library(\"testrffi\", lib.loc = \"%0\"); r1 <- rffi.addInt(2L, 3L); r2 <- rffi.addDouble(2, 3); v <- rffi.populateIntVector(5); v2 <- rffi.dotCModifiedArguments(c(0,1,2,3)); "
+                                        + "detach(\"package:testrffi\"); list(r1, r2, v, v2) }", new String[]{packagePaths.rpackagesLibs.toString()}));
     }
 
     @Test