diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Cauchy.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Cauchy.java
index 29452d13c149ec4e743c597ffc7a99f6c42508fa..dfc539f914efc2ecc2dc7af0524b728edadbe1a6 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Cauchy.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Cauchy.java
@@ -29,7 +29,7 @@ public final class Cauchy {
         @Override
         public double execute(double location, double scale, RandomNumberProvider rand) {
             if (Double.isNaN(location) || !Double.isFinite(scale) || scale < 0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
             if (scale == 0. || !Double.isFinite(location)) {
                 return location;
@@ -48,7 +48,7 @@ public final class Cauchy {
                 return x + location + scale;
             }
             if (scale <= 0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             y = (x - location) / scale;
@@ -64,12 +64,12 @@ public final class Cauchy {
             }
 
             if (scale <= 0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             double x2 = (x - location) / scale;
             if (Double.isNaN(x2)) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             if (!Double.isFinite(x2)) {
@@ -116,7 +116,7 @@ public final class Cauchy {
                 if (scale == 0) {
                     return location;
                 }
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             boolean lowerTail = lowerTailIn;
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Chisq.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Chisq.java
index 62205497a7d92a5001454b1052b948a90fd643b7..45042cb0493b22e9a7acb3e26fe87018b9456cb6 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Chisq.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Chisq.java
@@ -49,7 +49,7 @@ public final class Chisq {
     public static final class RChisq extends RandFunction1_Double {
         public static double rchisq(double df, RandomNumberProvider rand) {
             if (!Double.isFinite(df) || df < 0.0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
             return new RGamma().execute(df / 2.0, 2.0, rand);
         }
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DBeta.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DBeta.java
index a6a5a767d9e71e9bf4b8f8baa772bdaaf1124178..d7f3839013c0a57016716592c3618467114164cd 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DBeta.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DBeta.java
@@ -25,7 +25,7 @@ public class DBeta implements Function3_1 {
         }
 
         if (a < 0 || b < 0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         if (x < 0 || x > 1) {
             return (DPQ.rd0(log));
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DNorm.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DNorm.java
index 5f36543a93f2868aec1cde3d6b00336312769166..bdccc0beeb7c66a8ca335a843177f8784d989c83 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DNorm.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DNorm.java
@@ -28,10 +28,10 @@ public final class DNorm implements Function3_1 {
         if (!Double.isFinite(sigma)) {
             return DPQ.rd0(giveLog);
         } else if (!Double.isFinite(x) && mu == x) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         } else if (sigma <= 0) {
             if (sigma < 0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
             return (x == mu) ? Double.POSITIVE_INFINITY : DPQ.rd0(giveLog);
         }
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DPQ.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DPQ.java
index 80f2b7da79fae8b9dba58a506ca66decf600e235..1d2abb3cff6cce02b5cefa761619a343bd61a4cb 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DPQ.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DPQ.java
@@ -183,7 +183,7 @@ public final class DPQ {
     // R_Q_P01_check
     public static void rqp01check(double p, boolean logP) throws EarlyReturn {
         if ((logP && p > 0) || (!logP && (p < 0 || p > 1))) {
-            throw new EarlyReturn(RMath.mlError());
+            throw new EarlyReturn(RMathError.defaultError());
         }
     }
 
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DPois.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DPois.java
index c60b2f0bd5a45c0635872a019a956b6b54763e2e..bc14734a766afbf46ea03e5df58082a6f4701d47 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DPois.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/DPois.java
@@ -25,7 +25,7 @@ public final class DPois implements Function2_1 {
             return x + lambda;
         }
         if (lambda < 0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         try {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Df.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Df.java
index ded5ed50571f78b97300e4c76b7d0cdab74cb34c..90d58c8260899f869da8eaac02f191aff3660c80 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Df.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Df.java
@@ -30,7 +30,7 @@ public final class Df implements Function3_1 {
         }
 
         if (m <= 0 || n <= 0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         if (x < 0.) {
             return DPQ.rd0(giveLog);
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Dt.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Dt.java
index 62245897573ddf9e784b89fd9b97acd1d21fa249..7ae62d4958a193eee729c85463648881b25ae187 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Dt.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Dt.java
@@ -29,7 +29,7 @@ public final class Dt implements Function2_1 {
         }
 
         if (n <= 0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         if (!Double.isFinite(x)) {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Exp.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Exp.java
index e2cdac1583938382aa95390c34c6e4d0411515c2..76df1c61e95011c8b3b089db0dbb1b7852061cb6 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Exp.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Exp.java
@@ -31,7 +31,7 @@ public final class Exp {
             }
 
             if (scale <= 0.0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             if (x < 0.) {
@@ -45,7 +45,7 @@ public final class Exp {
         @Override
         public double execute(double scale, RandomNumberProvider rand) {
             if (!Double.isFinite(scale) || scale <= 0.0) {
-                return scale == 0. ? 0. : RMath.mlError();
+                return scale == 0. ? 0. : RMathError.defaultError();
             }
             return scale * rand.expRand();
         }
@@ -58,7 +58,7 @@ public final class Exp {
                 return xIn + scale;
             }
             if (scale < 0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             if (xIn <= 0.) {
@@ -79,7 +79,7 @@ public final class Exp {
             }
 
             if (scale < 0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             try {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/GammaFunctions.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/GammaFunctions.java
index 64c88be84b843df8f5860c5804537cffe98a729a..a4c8919161dc0f5710ab2c3850d66b2a044ffb14 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/GammaFunctions.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/GammaFunctions.java
@@ -1231,7 +1231,7 @@ public abstract class GammaFunctions {
             return localX + alph + scale;
         }
         if (alph < 0. || scale <= 0.) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         localX /= scale;
         if (Double.isNaN(localX)) { /* eg. original x = scale = +Inf */
@@ -1282,7 +1282,7 @@ public abstract class GammaFunctions {
         int j;
 
         if (!RRuntime.isFinite(x) || !RRuntime.isFinite(np) || np == 0.0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         if (Math.abs(x - np) < 0.1 * (x + np)) {
@@ -1320,7 +1320,7 @@ public abstract class GammaFunctions {
         }
         if (sigma <= 0) {
             if (sigma < 0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
             /* sigma == 0 */
             return (localX == mu) ? Double.POSITIVE_INFINITY : rd0(giveLog);
@@ -1344,7 +1344,7 @@ public abstract class GammaFunctions {
             return x + shape + scale;
         }
         if (shape < 0 || scale <= 0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         if (x < 0) {
             return rd0(giveLog);
@@ -1393,7 +1393,7 @@ public abstract class GammaFunctions {
         }
         if (sigma <= 0) {
             if (sigma < 0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
             /* sigma = 0 : */
             return (localX < mu) ? rdt0(lowerTail, logp) : rdt1(lowerTail, logp);
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Geom.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Geom.java
index a01c809ff41a1f05c90d102784cf48b3c0b36356..03670cdb79897341def27dee5eaa389a5af7aa19 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Geom.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Geom.java
@@ -44,7 +44,7 @@ public final class Geom {
         @Override
         public double evaluate(double p, double prob, boolean lowerTail, boolean logP) {
             if (prob <= 0 || prob > 1) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             try {
@@ -73,7 +73,7 @@ public final class Geom {
                 return x + p;
             }
             if (p <= 0 || p > 1) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             try {
@@ -98,7 +98,7 @@ public final class Geom {
                 return xIn + p;
             }
             if (p <= 0 || p > 1) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             if (xIn < 0.) {
@@ -126,7 +126,7 @@ public final class Geom {
         @Override
         public double execute(double p, RandomNumberProvider rand) {
             if (!Double.isFinite(p) || p <= 0 || p > 1) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
             return RPois.rpois(rand.expRand() * ((1 - p) / p), rand);
         }
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/LBeta.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/LBeta.java
index 8f997c3f586187da864b6cb32346d7ea03826c01..c9a23be80b668c2ff886cb970297819566ec8440 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/LBeta.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/LBeta.java
@@ -38,7 +38,7 @@ public final class LBeta {
 
         /* both arguments must be >= 0 */
         if (p < 0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         } else if (p == 0) {
             return Double.POSITIVE_INFINITY;
         } else if (!Double.isFinite(q)) { /* q == +Inf */
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/LogNormal.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/LogNormal.java
index b95f76cf446c1a27b23bca81504db510a9c110ef..9384ad65764f5da59ad03f14d87e0b8ba1368d1c 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/LogNormal.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/LogNormal.java
@@ -29,7 +29,7 @@ public final class LogNormal {
         @Override
         public double execute(double meanlog, double sdlog, RandomNumberProvider rand) {
             if (Double.isNaN(meanlog) || !Double.isFinite(sdlog) || sdlog < 0.) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
             return Math.exp(rnorm.execute(meanlog, sdlog, rand));
         }
@@ -43,7 +43,7 @@ public final class LogNormal {
             }
             if (sdlog <= 0) {
                 if (sdlog < 0) {
-                    return RMath.mlError();
+                    return RMathError.defaultError();
                 }
                 // sdlog == 0 :
                 return (Math.log(x) == meanlog) ? Double.POSITIVE_INFINITY : DPQ.rd0(giveLog);
@@ -84,7 +84,7 @@ public final class LogNormal {
                 return x + meanlog + sdlog;
             }
             if (sdlog < 0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
             if (x > 0) {
                 return pnorm.evaluate(Math.log(x), meanlog, sdlog, lowerTail, logP);
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Logis.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Logis.java
index 45328c469331798c9b31b771a18ccb2fa49c477d..a6bc1963fc21cd4d007e14b6d1d66e7f815e5985 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Logis.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Logis.java
@@ -33,7 +33,7 @@ public final class Logis {
                 return x + location + scale;
             }
             if (scale <= 0.0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             x = TOMS708.fabs((x - location) / scale);
@@ -57,7 +57,7 @@ public final class Logis {
             }
 
             if (scale < 0.) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
             if (scale == 0.) {
                 return location;
@@ -85,12 +85,12 @@ public final class Logis {
                 return x + location + scale;
             }
             if (scale <= 0.0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             x = (x - location) / scale;
             if (Double.isNaN(x)) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             try {
@@ -123,7 +123,7 @@ public final class Logis {
         @Override
         public double execute(double location, double scale, RandomNumberProvider rand) {
             if (Double.isNaN(location) || !Double.isFinite(scale)) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             if (scale == 0. || !Double.isFinite(location)) {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PGamma.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PGamma.java
index cdb6e310d755ce9b7fcad35a2bd878e2edfa2a85..16ab8bd2e3d4479bba0dedb8b614503f661e320a 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PGamma.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PGamma.java
@@ -23,7 +23,7 @@ public class PGamma implements Function3_2 {
             return xIn + alph + scale;
         }
         if (alph < 0 || scale < 0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         double x = xIn / scale;
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PPois.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PPois.java
index cb67510db3cd5d1c41278662627c9583032cf25f..1d15fa313533e6f9ffe2d39751405c0c3b4dbe3e 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PPois.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/PPois.java
@@ -19,7 +19,7 @@ public class PPois implements Function2_2 {
     @Override
     public double evaluate(double x, double lambda, boolean lowerTail, boolean logP) {
         if (Double.isNaN(x) || Double.isNaN(lambda) || lambda < 0.) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         if (x < 0) {
             return DPQ.rdt0(lowerTail, logP);
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pbinom.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pbinom.java
index e61ab3cb1f1be4c0c18a91c878191db9aebc6382..f0b796a8845cbe61675befeedf7e13c6dc026cc1 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pbinom.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pbinom.java
@@ -34,7 +34,7 @@ public final class Pbinom implements StatsFunctions.Function3_2 {
         if (DPQ.nonint(size)) {
             nanProfile.enter();
             DPQ.nointCheckWarning(size, "n");
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         size = RMath.forceint(size);
         /* PR#8560: n=0 is a valid value */
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pt.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pt.java
index 20373ea17dd2e82f10ee5acf05d595feb4e55b8f..fd2e60684a0cef5f1b32e4445056eabe88f48251 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pt.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Pt.java
@@ -34,7 +34,7 @@ public class Pt implements Function2_2 {
         }
 
         if (n <= 0.0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         if (!Double.isFinite(x)) {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QBeta.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QBeta.java
index bd34ff88bacd2ba9cb16af703816218dc6986605..c704b4b59411031634a7d966c5ed60de81e2d7fd 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QBeta.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QBeta.java
@@ -31,7 +31,7 @@ import static com.oracle.truffle.r.library.stats.MathConstants.M_LN2;
 import static com.oracle.truffle.r.library.stats.Pbeta.pbetaRaw;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.r.library.stats.RMath.MLError;
+import com.oracle.truffle.r.library.stats.RMathError.MLError;
 import com.oracle.truffle.r.library.stats.StatsFunctions.Function3_2;
 import com.oracle.truffle.r.runtime.RError.Message;
 
@@ -48,7 +48,7 @@ public final class QBeta implements Function3_2 {
         }
 
         if (p < 0. || q < 0.) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         // allowing p==0 and q==0 <==> treat as one- or two-point mass
 
@@ -158,7 +158,7 @@ public final class QBeta implements Function3_2 {
                                 alpha, p, q, log_p, "alpha not in ",
                                 log_p ? "[-Inf, 0]" : "[0,1]");
                 // ML_ERR_return_NAN :
-                RMath.mlError(MLError.DOMAIN, "");
+                RMathError.error(MLError.DOMAIN, "");
                 qb[0] = qb[1] = ML_NAN;
                 return;
             }
@@ -509,7 +509,7 @@ public final class QBeta implements Function3_2 {
                                                                                             // -Inf
                         // is ok if
                         // (log_p)
-                        RMath.mlError(MLError.DOMAIN, "");
+                        RMathError.error(MLError.DOMAIN, "");
                         qb[0] = qb[1] = ML_NAN;
                         return;
                     }
@@ -561,7 +561,7 @@ public final class QBeta implements Function3_2 {
 
             /*-- NOT converged: Iteration count --*/
             warned = true;
-            RMath.mlError(MLError.PRECISION, "qbeta");
+            RMathError.error(MLError.PRECISION, "qbeta");
 
             converged(log_p, qb);
         }
@@ -586,7 +586,7 @@ public final class QBeta implements Function3_2 {
                                 // warn
                                 pbetaRaw(DBL_1__eps, // = 1 - eps
                                                 pp, qq, true, true) > la + 2)) {
-                    RMath.mlWarning(Message.QBETA_ACURACY_WARNING, (log_ ? ", log_" : ""), Math.abs(y - (log_ ? la : a)));
+                    RMathError.warning(Message.QBETA_ACURACY_WARNING, (log_ ? ", log_" : ""), Math.abs(y - (log_ ? la : a)));
                 }
             }
 
@@ -600,7 +600,7 @@ public final class QBeta implements Function3_2 {
         private void finalStep(boolean log_p, double[] qb) {
             if (give_log_q) { // ==> use_log_x , too
                 if (!use_log_x) { // (see if claim above is true)
-                    RMath.mlWarning(Message.GENERIC,
+                    RMathError.warning(Message.GENERIC,
                                     "qbeta() L_return, u_n=%g;  give_log_q=true but use_log_x=false -- please report!",
                                     u_n);
                 }
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QHyper.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QHyper.java
index e0641de73b8281b181aae6490a781256c1a96b47..b9bcbaca28baab41d7680b2fa666ba7d062a472c 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QHyper.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QHyper.java
@@ -26,7 +26,7 @@ public final class QHyper {
             return pIn + nrIn + nbIn + nIn;
         }
         if (!Double.isFinite(pIn) || !Double.isFinite(nrIn) || !Double.isFinite(nbIn) || !Double.isFinite(nIn)) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         double nr = forceint(nrIn);
@@ -34,7 +34,7 @@ public final class QHyper {
         double capN = nr + nb;
         double n = forceint(nIn);
         if (nr < 0 || nb < 0 || n < 0 || n > capN) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         /*
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QPois.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QPois.java
index 9803bad38d700b70793e0902bf7337a0729aa209..34cbad5586728c66abb3153db046256b3f62d13d 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QPois.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/QPois.java
@@ -26,10 +26,10 @@ public class QPois implements Function2_2 {
             return p + lambda;
         }
         if (!Double.isFinite(lambda)) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         if (lambda < 0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         if (lambda == 0) {
             return 0;
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qf.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qf.java
index 18488ebd3a267a99aeab1e5b8e81f2bcfd9063b5..4c0274673717603470b161e05700b6789d0bfeaa 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qf.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qf.java
@@ -28,7 +28,7 @@ public final class Qf implements Function3_2 {
         }
 
         if (df1 <= 0. || df2 <= 0.) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         try {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qt.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qt.java
index 5e97ff315f45864045f45f6d74cb728fc325ef93..2c4fd0191a3882cb62a484eac535e06cc20411e4 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qt.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Qt.java
@@ -47,7 +47,7 @@ public class Qt implements Function2_2 {
         }
 
         if (ndf <= 0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         if (ndf < 1) { /* based on qnt */
@@ -89,7 +89,7 @@ public class Qt implements Function2_2 {
             } while ((ux - lx) / Math.abs(nx) > accu && ++iter < 1000);
 
             if (iter >= 1000) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             return 0.5 * (lx + ux);
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RBeta.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RBeta.java
index 714014b84e2fb45938f67394e8586fb4e360fee2..7fab48d93886d5aec51fc209396f7eeef3442128 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RBeta.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RBeta.java
@@ -27,7 +27,7 @@ public final class RBeta extends RandFunction2_Double {
     @Override
     public double execute(double aa, double bb, RandomNumberProvider rand) {
         if (Double.isNaN(aa) || Double.isNaN(bb) || aa < 0. || bb < 0.) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         if (!Double.isFinite(aa) && !Double.isFinite(bb)) { // a = b = Inf : all mass at 1/2
             return 0.5;
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RGamma.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RGamma.java
index c5b40e24c48e85810274f072acbc2304e48147e8..8d344b1625e7e68963c496047d185e8fd2603b6b 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RGamma.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RGamma.java
@@ -66,13 +66,13 @@ public class RGamma extends RandFunction2_Double {
         double retVal;
 
         if (Double.isNaN(a) || Double.isNaN(scale)) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         if (a <= 0.0 || scale <= 0.0) {
             if (scale == 0. || a == 0.) {
                 return 0.;
             }
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         if (!Double.isFinite(a) || !Double.isFinite(scale)) {
             return Double.POSITIVE_INFINITY;
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RHyper.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RHyper.java
index 197316d6df83b9e9bd01f6287742e33a742ad5cd..a233c0c549c1faa414ec875030ad7d5d56845c0b 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RHyper.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RHyper.java
@@ -95,7 +95,7 @@ public final class RHyper extends RandFunction3_Double {
         /* check parameter validity */
 
         if (!Double.isFinite(nn1in) || !Double.isFinite(nn2in) || !Double.isFinite(kkin)) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         double nn1int = forceint(nn1in);
@@ -103,7 +103,7 @@ public final class RHyper extends RandFunction3_Double {
         double kkint = forceint(kkin);
 
         if (nn1int < 0 || nn2int < 0 || kkint < 0 || kkint > nn1int + nn2int) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         if (nn1int >= Integer.MAX_VALUE || nn2int >= Integer.MAX_VALUE || kkint >= Integer.MAX_VALUE) {
             /*
@@ -227,7 +227,7 @@ public final class RHyper extends RandFunction3_Double {
                 nUv++;
                 if (nUv >= 10000) {
                     RError.warning(RError.SHOW_CALLER, Message.GENERIC, String.format("rhyper() branch III: giving up after %d rejections", nUv));
-                    return RMath.mlError();
+                    return RMathError.defaultError();
                 }
 
                 if (u < p1) { /* rectangular region */
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RMath.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RMath.java
index 644dff67b50c3d46d7608bb10c5401f973a6d665..a7f1cd01da654d6c683b5f33d355995655b0e976 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RMath.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RMath.java
@@ -16,43 +16,19 @@ import static com.oracle.truffle.r.library.stats.LBeta.lbeta;
 
 import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
-import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RRuntime;
 
 /**
  * Encapsulates functions to be found in Rmath.h or in nmath directory in GnuR except for random
- * distribution related functions, which usually have their own files.
+ * distribution related functions, which usually have their own files, and other well defined groups
+ * of functions/macros referenced below.
  *
  * @see DPQ
+ * @see RMathError
+ * @see MathConstants
  */
 public class RMath {
 
-    public enum MLError {
-        DOMAIN,
-        RANGE,
-        NOCONV,
-        PRECISION,
-        UNDERFLOW
-    }
-
-    /**
-     * Corresponds to macro {@code ML_ERR_return_NAN} in GnuR.
-     */
-    public static double mlError() {
-        return mlError(MLError.DOMAIN, "");
-    }
-
-    /**
-     * Corresponds to macro {@code ML_ERR} in GnuR. TODO: raise corresponding warning
-     */
-    public static double mlError(@SuppressWarnings("unused") MLError error, @SuppressWarnings("unused") String message) {
-        return Double.NaN;
-    }
-
-    public static void mlWarning(RError.Message message, Object... args) {
-        RError.warning(null, message, args);
-    }
-
     public static boolean mlValid(double d) {
         return !Double.isNaN(d);
     }
@@ -99,7 +75,7 @@ public class RMath {
             return x;
         }
         if (!Double.isFinite(x)) {
-            return mlError();
+            return RMathError.defaultError();
         }
 
         double x2 = fmod(x, 1.); // tan(pi(x + k)) == tan(pi x) for all integer k
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RMathError.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RMathError.java
new file mode 100644
index 0000000000000000000000000000000000000000..31ab7145dccb5391f74d7fc05f509526ba73d2e7
--- /dev/null
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RMathError.java
@@ -0,0 +1,70 @@
+/*
+ * This material is distributed under the GNU General Public License
+ * Version 2. You may review the terms of this license at
+ * http://www.gnu.org/licenses/gpl-2.0.html
+ *
+ * Copyright (c) 1998-2016, The R Core Team
+ * Copyright (c) 2016, Oracle and/or its affiliates
+ *
+ * All rights reserved.
+ */
+package com.oracle.truffle.r.library.stats;
+
+import com.oracle.truffle.r.runtime.RError;
+import com.oracle.truffle.r.runtime.RError.Message;
+
+/**
+ * Encapsulates functionality related to errors/warnings reporting in FastR port of R's math
+ * library. Contains methods that correspond to various macros such as {@code ML_ERROR} or
+ * {@code ML_ERR_return_NAN}.
+ */
+public final class RMathError {
+    private RMathError() {
+        // only static members
+    }
+
+    public enum MLError {
+        DOMAIN(Message.GENERIC),
+        RANGE(Message.ML_ERROR_RANGE),
+        NOCONV(Message.ML_ERROR_NOCONV),
+        PRECISION(Message.ML_ERROR_PRECISION),
+        UNDERFLOW(Message.ML_ERROR_UNDERFLOW);
+
+        private final RError.Message message;
+
+        MLError(Message message) {
+            this.message = message;
+        }
+
+        public void warning(String arg) {
+            RError.warning(RError.SHOW_CALLER, message, arg);
+        }
+    }
+
+    /**
+     * Corresponds to macro {@code ML_ERR_return_NAN} in GnuR. We also do not report the default
+     * warning directly and let the caller handle the {@code NaN} value.
+     */
+    public static double defaultError() {
+        return Double.NaN;
+    }
+
+    /**
+     * Corresponds to macro {@code ML_ERR} in GnuR. As long as the error is not the default
+     * {@link MLError#DOMAIN} a warning is reported by this method, otherwise the caller should
+     * return {@code NaN}, which should be handled by the caller's caller.
+     */
+    public static double error(@SuppressWarnings("unused") MLError error, @SuppressWarnings("unused") String messageArg) {
+        if (error != MLError.DOMAIN) {
+            error.warning(messageArg);
+        }
+        return Double.NaN;
+    }
+
+    /**
+     * Corresponds to macros {@code MATHLIB_WARNINGX} in GnuR.
+     */
+    public static void warning(RError.Message message, Object... args) {
+        RError.warning(RError.SHOW_CALLER, message, args);
+    }
+}
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RNbinomMu.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RNbinomMu.java
index cfbb7798c6594f952c5b6f7ce9a5935a1c6cb800..cf5f8b04016170b0b45f36962c4588980edc39c5 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RNbinomMu.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RNbinomMu.java
@@ -20,7 +20,7 @@ public final class RNbinomMu extends RandFunction2_Double {
     @Override
     public double execute(double initialSize, double mu, RandomNumberProvider rand) {
         if (!Double.isFinite(mu) || Double.isNaN(initialSize) || initialSize <= 0 || mu < 0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         double size = Double.isFinite(initialSize) ? initialSize : Double.MAX_VALUE / 2.;
         return (mu == 0) ? 0 : RPois.rpois(rgamma.execute(size, mu / size, rand), rand);
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RNchisq.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RNchisq.java
index 12dc037c2c18aae629e67fe502c97dfe86cb35e3..f0d523cf14d7fd2bccbac019ffeb3d1dfe75a0b0 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RNchisq.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RNchisq.java
@@ -22,7 +22,7 @@ public final class RNchisq extends RandFunction2_Double {
     @Override
     public double execute(double df, double lambda, RandomNumberProvider rand) {
         if (!Double.isFinite(df) || !Double.isFinite(lambda) || df < 0. || lambda < 0.) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         if (lambda == 0.) {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RPois.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RPois.java
index 420a81dc44c6cbcef837c9bec66befe439a58145..8ed6d66484b423f7b4c830ec6660764b4c9bb56f 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RPois.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RPois.java
@@ -80,7 +80,7 @@ public final class RPois extends RandFunction1_Double {
         boolean newBigMu = false;
 
         if (!Double.isFinite(mu) || mu < 0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         if (mu <= 0.) {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RWeibull.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RWeibull.java
index 638e406f5404fb7cf7613e122f0a31b2ab5b5a42..78d9e38318d59cea2ea982a18ea98f573fa1376d 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RWeibull.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RWeibull.java
@@ -18,7 +18,7 @@ public final class RWeibull extends RandFunction2_Double {
     @Override
     public double execute(double shape, double scale, RandomNumberProvider rand) {
         if (!Double.isFinite(shape) || !Double.isFinite(scale) || shape <= 0. || scale <= 0.) {
-            return scale == 0. ? 0. : RMath.mlError();
+            return scale == 0. ? 0. : RMathError.defaultError();
         }
 
         return scale * Math.pow(-Math.log(rand.unifRand()), 1.0 / shape);
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Rf.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Rf.java
index be70cde936be8c393b14a9743bdce13d68366585..0c1643b0244f60259de6106d60cd0ab1056d01ed 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Rf.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Rf.java
@@ -18,7 +18,7 @@ public final class Rf extends RandFunction2_Double {
     @Override
     public double execute(double n1, double n2, RandomNumberProvider rand) {
         if (Double.isNaN(n1) || Double.isNaN(n2) || n1 <= 0. || n2 <= 0.) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         double v1;
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Rnorm.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Rnorm.java
index be60d6863d13ddd4bf96b974ef6a97b40ccfe4d4..5cdb828e5849d72ec08c661d5e4755a7965294e7 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Rnorm.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Rnorm.java
@@ -29,7 +29,7 @@ public final class Rnorm extends RandFunction2_Double {
         double mu = muValueProfile.profile(muIn);
         if (Double.isNaN(mu) || !Double.isFinite(sigma) || sigma < 0.) {
             errorProfile.enter();
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
         if (zeroSigmaProfile.profile(sigma == 0. || !Double.isFinite(mu))) {
             return mu; /* includes mu = +/- Inf with finite sigma */
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Rt.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Rt.java
index a319beed65cf78521fccb36b2b81070fbce797e3..3804a509615dbb609969e00f40a82cc5f19d9ddc 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Rt.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Rt.java
@@ -20,7 +20,7 @@ public final class Rt extends RandFunction1_Double {
     @Override
     public double execute(double df, RandomNumberProvider rand) {
         if (Double.isNaN(df) || df <= 0.0) {
-            return RMath.mlError();
+            return RMathError.defaultError();
         }
 
         if (!Double.isFinite(df)) {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Signrank.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Signrank.java
index f13e125ea9afa203be520a6b20d3622e74612d13..662ca852559619924ca46e1f35232f451d3089b0 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Signrank.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Signrank.java
@@ -30,12 +30,12 @@ public final class Signrank {
             if (Double.isInfinite(nIn)) {
                 // In GnuR these "results" seem to be generated due to the behaviour of R_forceint,
                 // and the "(int) n" cast, which ends up casting +/-infinity to integer...
-                return nIn < 0 ? RMath.mlError() : 0;
+                return nIn < 0 ? RMathError.defaultError() : 0;
             }
 
             double n = forceint(nIn);
             if (n < 0) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             if (n == 0) {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Unif.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Unif.java
index 3110d7e227f8d096abbb6f4c72433963c0602524..b708907b8ec250a468ea69465e2269a46144979f 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Unif.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/Unif.java
@@ -38,7 +38,7 @@ public final class Unif {
             double max = maxValueProfile.profile(maxIn);
             if (!RRuntime.isFinite(min) || !RRuntime.isFinite(max) || max < min) {
                 errorProfile.enter();
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
             if (minEqualsMaxProfile.profile(min == max)) {
                 return min;
@@ -54,7 +54,7 @@ public final class Unif {
                 return x + min + max;
             }
             if (max < min || !Double.isFinite(min) || !Double.isFinite(max)) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
             if (x >= max) {
                 return DPQ.rdt1(lowerTail, logP);
@@ -77,7 +77,7 @@ public final class Unif {
                 return x + min + max;
             }
             if (max <= min) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
             if (min <= x && x <= max) {
                 return giveLog ? -Math.log(max - min) : 1. / (max - min);
@@ -101,7 +101,7 @@ public final class Unif {
             }
 
             if (max < min || !Double.isFinite(min) || !Double.isFinite(max)) {
-                return RMath.mlError();
+                return RMathError.defaultError();
             }
 
             if (max == min) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RError.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RError.java
index e61db9860abc7e1c0f104a9ab3636eca04da66f1..71a773f40370e557819700005a3f0f87291abb6f 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RError.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RError.java
@@ -282,6 +282,11 @@ public final class RError extends RuntimeException {
         ITEMS_NOT_MULTIPLE("number of items read is not a multiple of the number of columns"),
         TRACEMEM_NOT_NULL("cannot trace NULL"),
         INPUT_MUST_BE_STRING("input must be a character string"),
+        // mathlib errors/warnings
+        ML_ERROR_RANGE("value out of range in '%s'"),
+        ML_ERROR_NOCONV("convergence failed in '%s'"),
+        ML_ERROR_PRECISION("full precision may not have been achieved in '%s'"),
+        ML_ERROR_UNDERFLOW("underflow occurred in '%s'"),
         // below: GNU R gives also expression for the argument
         NOT_FUNCTION("'%s' is not a function, character or symbol"),
         NOT_A_FUNCTION("'%s' is not a function"),
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RErrorHandling.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RErrorHandling.java
index 4b5b757cc622462911f7785b5707fdea6293530a..9fcf43914e98f05039582e68d6acd43abf911c10 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RErrorHandling.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RErrorHandling.java
@@ -695,7 +695,8 @@ public class RErrorHandling {
                 if (nWarnings < errorHandlingState.maxWarnings) {
                     Utils.writeStderr(String.format("There were %d warnings (use warnings() to see them)", nWarnings), true);
                 } else {
-                    Utils.writeStderr(String.format("There were %d or more warnings (use warnings() to see the first %d)", nWarnings, errorHandlingState.maxWarnings), true);
+                    nWarnings = errorHandlingState.maxWarnings;
+                    Utils.writeStderr(String.format("There were %d or more warnings (use warnings() to see the first %d)", nWarnings, nWarnings), true);
                 }
             }
             Object[] wData = new Object[nWarnings];
diff --git a/mx.fastr/copyrights/gnu_r.core.copyright.star.regex b/mx.fastr/copyrights/gnu_r.core.copyright.star.regex
index e625a25f307693d9872191aad9ce88e5fab49ef1..b89f17651f1f7a735e95943483166542481ca401 100644
--- a/mx.fastr/copyrights/gnu_r.core.copyright.star.regex
+++ b/mx.fastr/copyrights/gnu_r.core.copyright.star.regex
@@ -1 +1 @@
-/\*\n \* This material is distributed under the GNU General Public License\n \* Version 2. You may review the terms of this license at\n \* http://www.gnu.org/licenses/gpl-2.0.html\n \*\n \* Copyright \(c\) (?:[1-2][09][0-9][0-9]--)?[1-2][09][0-9][0-9], The R Core Team\n \* Copyright \(c\) (?:(20[0-9][0-9]), )?(20[0-9][0-9]), Oracle and/or its affiliates\n \*\n \* All rights reserved.\n \*/\n.*
\ No newline at end of file
+/\*\n \* This material is distributed under the GNU General Public License\n \* Version 2. You may review the terms of this license at\n \* http://www.gnu.org/licenses/gpl-2.0.html\n \*\n \* Copyright \(c\) (?:[1-2][09][0-9][0-9]--?)?[1-2][09][0-9][0-9], The R Core Team\n \* Copyright \(c\) (?:(20[0-9][0-9]), )?(20[0-9][0-9]), Oracle and/or its affiliates\n \*\n \* All rights reserved.\n \*/\n.*
diff --git a/mx.fastr/copyrights/overrides b/mx.fastr/copyrights/overrides
index a8da7865f8c24d959520c1a91cdff179c4b70d23..0067deaae73e5fef4764505f61ed6df5d8296b60 100644
--- a/mx.fastr/copyrights/overrides
+++ b/mx.fastr/copyrights/overrides
@@ -69,6 +69,7 @@ com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/SplineFuncti
 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/StatsFunctions.java,gnu_r_gentleman_ihaka.copyright
 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RandGenerationFunctions.java,gnu_r_gentleman_ihaka.copyright
 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RMath.java,gnu_r_ihaka.copyright
+com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/RMathError.java,gnu_r.core.copyright
 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/LogNormal.java,gnu_r_ihaka.copyright
 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/MathConstants.java,gnu_r_ihaka.copyright
 com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/stats/TOMS708.java,gnu_r.copyright