diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/ForeignFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/ForeignFunctions.java
index 0869e867e13e00f6fd6e2e40072bbf2df198656e..26c633691d1ee31bdd2ad0d2ca971c88190a03af 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/ForeignFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/ForeignFunctions.java
@@ -69,7 +69,6 @@ import com.oracle.truffle.r.library.utils.ObjectSizeNodeGen;
 import com.oracle.truffle.r.library.utils.RprofNodeGen;
 import com.oracle.truffle.r.library.utils.RprofmemNodeGen;
 import com.oracle.truffle.r.library.utils.TypeConvertNodeGen;
-import com.oracle.truffle.r.library.utils.WriteTable;
 import com.oracle.truffle.r.nodes.access.vector.ElementAccessMode;
 import com.oracle.truffle.r.nodes.access.vector.ExtractVectorNode;
 import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/utils/WriteTable.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/WriteTable.java
similarity index 96%
rename from com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/utils/WriteTable.java
rename to com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/WriteTable.java
index 0565887ef245b76273e32b4221d709b9a412a143..0ecf5afe88050f58b605bd30874151ae7e046d87 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/utils/WriteTable.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/foreign/WriteTable.java
@@ -9,12 +9,14 @@
  *
  * All rights reserved.
  */
-package com.oracle.truffle.r.library.utils;
+package com.oracle.truffle.r.nodes.builtin.base.foreign;
 
 import java.io.IOException;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.r.nodes.builtin.RExternalBuiltinNode;
+import com.oracle.truffle.r.nodes.builtin.base.printer.ComplexVectorPrinter;
+import com.oracle.truffle.r.nodes.builtin.base.printer.DoubleVectorPrinter;
 import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.RRuntime;
@@ -178,7 +180,7 @@ public final class WriteTable extends RExternalBuiltinNode {
             return RRuntime.isNA(v) ? cna : RRuntime.intToStringNoCheck(v);
         } else if (o instanceof Double) {
             double v = (double) o;
-            return RRuntime.isNA(v) ? cna : RRuntime.doubleToStringNoCheck(v);
+            return RRuntime.isNA(v) ? cna : DoubleVectorPrinter.encodeReal(v);
         } else if (o instanceof Byte) {
             byte v = (byte) o;
             return RRuntime.isNA(v) ? cna : RRuntime.logicalToStringNoCheck(v);
@@ -187,7 +189,7 @@ public final class WriteTable extends RExternalBuiltinNode {
             return RRuntime.isNA(v) ? cna : encodeStringElement(v, quote, qmethod);
         } else if (o instanceof Double) {
             RComplex v = (RComplex) o;
-            return RRuntime.isNA(v) ? cna : RRuntime.complexToStringNoCheck(v);
+            return RRuntime.isNA(v) ? cna : ComplexVectorPrinter.encodeComplex(v);
         } else if (o instanceof RRaw) {
             RRaw v = (RRaw) o;
             return RRuntime.rawToHexString(v);
@@ -217,7 +219,7 @@ public final class WriteTable extends RExternalBuiltinNode {
     private static String encodeElement(Object x, int indx, char quote, char dec) {
         if (x instanceof RAbstractDoubleVector) {
             RAbstractDoubleVector v = (RAbstractDoubleVector) x;
-            return RRuntime.doubleToString(v.getDataAt(indx));
+            return DoubleVectorPrinter.encodeReal(v.getDataAt(indx));
         }
         if (x instanceof RAbstractIntVector) {
             RAbstractIntVector v = (RAbstractIntVector) x;
@@ -229,7 +231,7 @@ public final class WriteTable extends RExternalBuiltinNode {
         }
         if (x instanceof RAbstractComplexVector) {
             RAbstractComplexVector v = (RAbstractComplexVector) x;
-            return RRuntime.complexToString(v.getDataAt(indx));
+            return ComplexVectorPrinter.encodeComplex(v.getDataAt(indx));
         }
         if (x instanceof RAbstractRawVector) {
             RAbstractRawVector v = (RAbstractRawVector) x;