diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/stats/R/xyz.coords.R b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/stats/R/xyz.coords.R
new file mode 100644
index 0000000000000000000000000000000000000000..a00706eae0ac0ac2b6d7a15f16a9f0b1b0e61e10
--- /dev/null
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/stats/R/xyz.coords.R
@@ -0,0 +1,247 @@
+#  File src/library/grDevices/R/xyz.coords.R
+#  Part of the R package, http://www.R-project.org
+#
+#  Copyright (C) 1995-2012 The R Core Team
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  A copy of the GNU General Public License is available at
+#  http://www.r-project.org/Licenses/
+
+## Both xy.coords() and xyz.coords()  --- should be kept in sync!
+
+### In FastR, this file is temporarily stored in the stats package.
+
+xy.coords <-
+                function(x, y=NULL, xlab=NULL, ylab=NULL, log=NULL, recycle = FALSE)
+{
+        if(is.null(y)) {
+                ylab <- xlab
+                if(is.language(x)) {
+                        if (inherits(x, "formula") && length(x) == 3) {
+                                ylab <- deparse(x[[2L]])
+                                xlab <- deparse(x[[3L]])
+                                y <- eval(x[[2L]], environment(x), parent.frame())
+                                x <- eval(x[[3L]], environment(x), parent.frame())
+                        }
+                        else stop("invalid first argument")
+                }
+                else if(inherits(x, "ts")) {
+                        y <- if(is.matrix(x)) x[,1] else x
+                        x <- stats::time(x)
+                        xlab <- "Time"
+                }
+                else if(is.complex(x)) {
+                        y <- Im(x)
+                        x <- Re(x)
+                        xlab <- paste0("Re(", ylab, ")")
+                        ylab <- paste0("Im(", ylab, ")")
+                }
+                else if(is.matrix(x) || is.data.frame(x)) {
+                        x <- data.matrix(x)
+                        if(ncol(x) == 1) {
+                                xlab <- "Index"
+                                y <- x[,1]
+                                x <- seq_along(y)
+                        }
+                        else {
+                                colnames <- dimnames(x)[[2L]]
+                                if(is.null(colnames)) {
+                                        xlab <- paste0(ylab, "[,1]")
+                                        ylab <- paste0(ylab, "[,2]")
+                                }
+                                else {
+                                        xlab <- colnames[1L]
+                                        ylab <- colnames[2L]
+                                }
+                                y <- x[,2]
+                                x <- x[,1]
+                        }
+                }
+                else if(is.list(x)) {
+                        if (all(c("x", "y") %in% names(x))) {
+                                xlab <- paste0(ylab, "$x")
+                                ylab <- paste0(ylab, "$y")
+                                y <- x[["y"]]
+                                x <- x[["x"]]
+                        } else
+                                stop("'x' is a list, but does not have components 'x' and 'y'")
+                }
+                else {
+                        if(is.factor(x)) x <- as.numeric(x)
+                        xlab <- "Index"
+                        y <- x
+                        x <- seq_along(x)
+                }
+        }
+        ## to allow e.g. lines, points, identify to be used with plot.POSIXlt
+        if(inherits(x, "POSIXt")) x <- as.POSIXct(x)
+        
+        if(length(x) != length(y)) {
+                if(recycle) {
+                        if((nx <- length(x)) < (ny <- length(y)))
+                                x <- rep_len(x, ny)
+                        else
+                                y <- rep_len(y, nx)
+                }
+                else
+                        stop("'x' and 'y' lengths differ")
+        }
+        
+        if(length(log) && log != "") {
+                log <- strsplit(log, NULL)[[1L]]
+                if("x" %in% log && any(ii <- x <= 0 & !is.na(x))) {
+                        n <- as.integer(sum(ii))
+                        warning(sprintf(ngettext(n,
+                                                                        "%d x value <= 0 omitted from logarithmic plot",
+                                                                        "%d x values <= 0 omitted from logarithmic plot"),
+                                                        n), domain = NA)
+                        x[ii] <- NA
+                }
+                if("y" %in% log && any(ii <- y <= 0 & !is.na(y))) {
+                        n <- as.integer(sum(ii))
+                        warning(sprintf(ngettext(n,
+                                                                        "%d y value <= 0 omitted from logarithmic plot",
+                                                                        "%d y values <= 0 omitted from logarithmic plot"),
+                                                        n), domain = NA)
+                        y[ii] <- NA
+                }
+        }
+        return(list(x=as.double(x), y=as.double(y), xlab=xlab, ylab=ylab))
+}
+
+#xyz.coords <- function(x, y=NULL, z=NULL, xlab=NULL, ylab=NULL, zlab=NULL,
+#                log = NULL, recycle = FALSE)
+#{
+#        ## Only x
+#        if(is.null(y)) {
+#                if (is.language(x)) {
+#                        if (inherits(x, "formula") && length(x) == 3
+#                                        && length(rhs <- x[[3L]]) == 3) {
+#                                zlab <- deparse(x[[2L]])
+#                                ylab <- deparse(rhs[[3L]])
+#                                xlab <- deparse(rhs[[2L]])
+#                                pf <- parent.frame()
+#                                z <- eval(x[[2L]],   environment(x), pf)
+#                                y <- eval(rhs[[3L]], environment(x), pf)
+#                                x <- eval(rhs[[2L]], environment(x), pf)
+#                        }
+#                        else stop("invalid first argument [bad language object]")
+#                }
+#                else if(is.matrix(x) || is.data.frame(x)) {
+#                        x <- data.matrix(x)
+#                        if(ncol(x) < 2) stop("at least 2 columns needed")
+#                        if(ncol(x) == 2) {
+#                                xlab <- "Index"
+#                                y <- x[,1]
+#                                z <- x[,2]
+#                                x <- seq_along(y)
+#                        }
+#                        else { ## >= 3 columns
+#                                colnames <- dimnames(x)[[2L]]
+#                                if(is.null(colnames)) {
+#                                        zlab <- paste0(xlab,"[,3]")
+#                                        ylab <- paste0(xlab,"[,2]")
+#                                        xlab <- paste0(xlab,"[,1]")
+#                                }
+#                                else {
+#                                        xlab <- colnames[1L]
+#                                        ylab <- colnames[2L]
+#                                        zlab <- colnames[3L]
+#                                }
+#                                y <- x[,2]
+#                                z <- x[,3]
+#                                x <- x[,1]
+#                        }
+#                }
+#                else if(is.list(x)) {
+#                        if (all(c("x", "y", "z") %in% names(x))) {
+#                                zlab <- paste0(xlab,"$z")
+#                                ylab <- paste0(xlab,"$y")
+#                                xlab <- paste0(xlab,"$x")
+#                                y <- x[["y"]]
+#                                z <- x[["z"]]
+#                                x <- x[["x"]]
+#                        } else
+#                                stop("'x' is a list, but does not have components 'x', 'y'  and 'z'")
+#                }
+#        }
+#        
+#        ## Only x, y
+#        if(!is.null(y) && is.null(z)) {
+#                if(is.complex(x)) {
+#                        z <- y
+#                        y <- Im(x)
+#                        x <- Re(x)
+#                        zlab <- ylab
+#                        ylab <- paste0("Im(", xlab, ")")
+#                        xlab <- paste0("Re(", xlab, ")")
+#                }
+#                else if(is.complex(y)) {
+#                        z <- x
+#                        x <- Re(y)
+#                        y <- Im(y)
+#                        zlab <- xlab
+#                        xlab <- paste0("Re(", ylab, ")")
+#                        ylab <- paste0("Im(", ylab, ")")
+#                }
+#                else {
+#                        if(is.factor(x)) x <- as.numeric(x)
+#                        if(is.factor(y)) y <- as.numeric(y)
+#                        xlab <- "Index"
+#                        z <- y
+#                        y <- x
+#                        x <- seq_along(x)
+#                }
+#        }
+#        
+#        ## Lengths and recycle
+#        if(((xl <- length(x)) != length(y)) || (xl != length(z))) {
+#                if(recycle) {
+#                        ml <- max(xl, (yl <- length(y)), (zl <- length(z)))
+#                        if(xl < ml && !is.null(x)) x <- rep_len(x, ml)
+#                        if(yl < ml && !is.null(y)) y <- rep_len(y, ml)
+#                        if(zl < ml && !is.null(z)) z <- rep_len(z, ml)
+#                }
+#                else stop("'x', 'y' and 'z' lengths differ")
+#        }
+#        
+#        ## log
+#        if(length(log) && log != "") {
+#                log <- strsplit(log, NULL)[[1L]]
+#                if("x" %in% log && any(ii <- x <= 0 & !is.na(x))) {
+#                        n <- sum(ii)
+#                        warning(sprintf(ngettext(n,
+#                                                                        "%d x value <= 0 omitted from logarithmic plot",
+#                                                                        "%d x values <= 0 omitted from logarithmic plot"),
+#                                                        n), domain = NA)
+#                        x[ii] <- NA
+#                }
+#                if("y" %in% log && any(ii <- y <= 0 & !is.na(y))) {
+#                        n <- sum(ii)
+#                        warning(sprintf(ngettext(n,
+#                                                                        "%d y value <= 0 omitted from logarithmic plot",
+#                                                                        "%d y values <= 0 omitted from logarithmic plot"),
+#                                                        n), domain = NA)
+#                        y[ii] <- NA
+#                }
+#                if("z" %in% log && any(ii <- z <= 0 & !is.na(z))) {
+#                        n <- sum(ii)
+#                        warning(sprintf(ngettext(n,
+#                                                                        "%d z value <= 0 omitted from logarithmic plot",
+#                                                                        "%d z values <= 0 omitted from logarithmic plot"),
+#                                                        n), domain = NA)
+#                        z[ii] <- NA
+#                }
+#        }
+#        list(x=as.double(x), y=as.double(y), z=as.double(z),
+#                        xlab=xlab, ylab=ylab, zlab=zlab)
+#}