diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/shell/RCommand.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/shell/RCommand.java
index 0f98a4dbcbd93f27024760beeb60afca1f0b1afe..b48d4d484ac9d48719bceb299b3178ab290caaee 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/shell/RCommand.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/shell/RCommand.java
@@ -225,7 +225,7 @@ public class RCommand {
                     }
 
                     String continuePrompt = getContinuePrompt(vm);
-                    StringBuffer sb = new StringBuffer(input);
+                    StringBuilder sb = new StringBuilder(input);
                     Source source = RSource.fromTextInternal(sb.toString(), RSource.Internal.SHELL_INPUT);
                     boolean hasExecutor = hasExectuor(vm);
                     while (true) {
diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/tools/ToolsText.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/tools/ToolsText.java
index 79f1b7df8b219ecad3655eb41d3a14ed379ce9a9..c95e3d4a45d2f2834614d9e8e4591e8535713200 100644
--- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/tools/ToolsText.java
+++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/tools/ToolsText.java
@@ -49,7 +49,7 @@ public class ToolsText {
             for (int i = 0; i < data.length; i++) {
                 String input = strings.getDataAt(i);
                 if (input.indexOf('\t') >= 0) {
-                    StringBuffer sb = new StringBuffer();
+                    StringBuilder sb = new StringBuilder();
                     int b = 0;
                     int start = starts.getDataAt(i % starts.getLength());
                     for (int sx = 0; sx < input.length(); sx++) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EncodeString.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EncodeString.java
index edff830f7290665d07eb221b1e6d6af7d14e77b2..656ad0b6b12e10c6db46ba3b914c698142e316a9 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EncodeString.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/EncodeString.java
@@ -85,7 +85,7 @@ public abstract class EncodeString extends RBuiltinNode.Arg5 {
 
     @TruffleBoundary
     private static String concat(Object... args) {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         for (Object arg : args) {
             sb.append(arg);
         }
@@ -229,7 +229,7 @@ public abstract class EncodeString extends RBuiltinNode.Arg5 {
 
     @TruffleBoundary
     private static String addPaddingIgnoreNA(final String el, final int leftPadding, final int rightPadding, final String quoteEl) {
-        final StringBuffer sb = new StringBuffer();
+        final StringBuilder sb = new StringBuilder();
         for (int j = 0; j < leftPadding; j++) {
             sb.append(" ");
         }
@@ -244,7 +244,7 @@ public abstract class EncodeString extends RBuiltinNode.Arg5 {
 
     @TruffleBoundary
     private String addPadding(final String el, final int leftPadding, final int rightPadding, final String quoteEl) {
-        final StringBuffer sb = new StringBuffer();
+        final StringBuilder sb = new StringBuilder();
         for (int j = 0; j < leftPadding; j++) {
             sb.append(" ");
         }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java
index 97a8bf4feb5d6453fc18ebd75632b2a955f4bff1..d1432ee475bb9ad690ebd2e7ee58f7c4464ef6d5 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GrepFunctions.java
@@ -479,7 +479,7 @@ public class GrepFunctions {
                         int[] fromByteMapping = getFromByteMapping(input); // non-null if it's
                                                                            // necessary
 
-                        StringBuffer sb = new StringBuffer();
+                        StringBuilder sb = new StringBuilder();
                         while (execNode.execute(pcre.result, 0, input, lastEndOffset, eflag, ovector) >= 0) {
                             nmatch++;
 
@@ -623,7 +623,7 @@ public class GrepFunctions {
             return nonEmpty;
         }
 
-        private static void pcreStringAdj(StringBuffer sb, String input, String repl, int[] ovector, int[] fromByteMapping) {
+        private static void pcreStringAdj(StringBuilder sb, String input, String repl, int[] ovector, int[] fromByteMapping) {
             boolean upper = false;
             boolean lower = false;
             int px = 0;
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Parse.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Parse.java
index b351ea5aefea8f9e5971fd50a297d0f218430b6f..55e01a2343ef37ec8ace29e634f44409123869d7 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Parse.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Parse.java
@@ -159,7 +159,7 @@ public abstract class Parse extends RBuiltinNode.Arg6 {
     }
 
     private static String coalesce(String[] lines) {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         for (String line : lines) {
             sb.append(line);
             sb.append('\n');
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Strrep.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Strrep.java
index 46455a6a6021b4da55619c8292f9e0f0ec5d9fc8..43dd6c789ac6620c2c3d9d76ee27d188606bbd4c 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Strrep.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Strrep.java
@@ -73,7 +73,7 @@ public abstract class Strrep extends RBuiltinNode.Arg2 {
                 if (times == 1) {
                     data[i] = x;
                 } else {
-                    StringBuffer sb = new StringBuffer();
+                    StringBuilder sb = new StringBuilder();
                     for (int t = 0; t < times; t++) {
                         sb.append(x);
                     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TraceFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TraceFunctions.java
index 653e415b77a237fbe5ff6ce295e658208f95aa44..586af6390e9cb6b0c51eb4469843aa07fc998031 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TraceFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/TraceFunctions.java
@@ -203,7 +203,7 @@ public class TraceFunctions {
 
     @TruffleBoundary
     protected static String getStackTrace() {
-        final StringBuffer result = new StringBuffer();
+        final StringBuilder result = new StringBuilder();
         Truffle.getRuntime().iterateFrames(frame -> {
             Frame unwrapped = RArguments.unwrap(frame.getFrame(FrameAccess.READ_ONLY));
             if (RArguments.isRFrame(unwrapped)) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/system/SystemFunctionFactory.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/system/SystemFunctionFactory.java
index e751d26204ce05973c8790d36a1d8bb833709100..a384de71c649a183b687c99f30a22a446dbd86db 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/system/SystemFunctionFactory.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/system/SystemFunctionFactory.java
@@ -130,7 +130,7 @@ public abstract class SystemFunctionFactory {
                         newArgsList.add("-e");
                         newArgsList.add("tools:::.install_packages()");
                         newArgsList.add("--args");
-                        StringBuffer sb = new StringBuffer();
+                        StringBuilder sb = new StringBuilder();
                         i = 2;
                         while (i < commandInfo.args.length) {
                             String arg = commandInfo.args[i];
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/BrowserInteractNode.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/BrowserInteractNode.java
index 71c6062bdd2008f75dcd907869329f567c527a8c..c37597d0690a1c8ccae5322cb8a7ae91e4b3e26f 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/BrowserInteractNode.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/BrowserInteractNode.java
@@ -147,7 +147,7 @@ public abstract class BrowserInteractNode extends RNode {
                     }
 
                     default:
-                        StringBuffer sb = new StringBuffer(input);
+                        StringBuilder sb = new StringBuilder(input);
                         while (true) {
                             try {
                                 RContext.getEngine().parseAndEval(RSource.fromTextInternal(sb.toString(), RSource.Internal.BROWSER_INPUT), mFrame, true);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/RFFIUtils.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/RFFIUtils.java
index 9b7df136add07eda78a75719536b4af2007874fd..46cb7f66b63e67c513ce3c85ba3af744404ff616 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/RFFIUtils.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/RFFIUtils.java
@@ -150,7 +150,7 @@ public class RFFIUtils {
 
     private static void traceCall(CallMode mode, String name, int depthValue, Object... args) {
         if (traceEnabled) {
-            StringBuffer sb = new StringBuffer();
+            StringBuilder sb = new StringBuilder();
             sb.append("CallRFFI[");
             sb.append(mode.printName);
             sb.append(':');
@@ -170,7 +170,7 @@ public class RFFIUtils {
         }
     }
 
-    private static void printArgs(StringBuffer sb, Object[] args) {
+    private static void printArgs(StringBuilder sb, Object[] args) {
         boolean first = true;
         for (Object arg : args) {
             if (first) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/DispatchGeneric.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/DispatchGeneric.java
index ab3e9a0db9a0c56ddba08478419996dbad12ee24..9d4fdeb7f07be32e3bfa3d428564c36b170dcd6a 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/DispatchGeneric.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/objects/DispatchGeneric.java
@@ -42,7 +42,7 @@ public abstract class DispatchGeneric extends RBaseNode {
 
     @TruffleBoundary
     private static String createMultiDispatchString(RStringVector classes) {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         for (int i = 0; i < classes.getLength(); i++) {
             if (i > 0) {
                 sb.append('#');
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/DCF.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/DCF.java
index 48069f9e2f3c9bf380ae917a6b8ba067f7df656e..0d4e319a07301fe5fdb9f23c634b6879aefa3d93 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/DCF.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/DCF.java
@@ -52,7 +52,7 @@ public class DCF {
     public static DCF read(String[] lines, Set<String> keepWhiteSet) {
         DCF result = new DCF();
         String fieldName = null;
-        StringBuffer fieldContent = new StringBuffer();
+        StringBuilder fieldContent = new StringBuilder();
         Fields fields = new Fields();
         for (String line : lines) {
             if (line == null) {
@@ -67,7 +67,7 @@ public class DCF {
                 // should start a field, finish off any current one
                 if (fieldName != null) {
                     fields.add(fieldName, fieldContent.toString());
-                    fieldContent = new StringBuffer();
+                    fieldContent = new StringBuilder();
                 }
                 if (endOfParagraph(line)) {
                     fieldName = null;
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java
index 73ebc61f284e076ec2ef3fe10e19d66db4133e09..07974eaba2ae7295385f0589408dfd5600eb1375 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java
@@ -1118,7 +1118,7 @@ public class RDeparse {
         if (isValidName(name) || name.length() == 0) {
             return name;
         } else {
-            StringBuffer sb = new StringBuffer();
+            StringBuilder sb = new StringBuilder();
             sb.append(qc);
             for (int i = 0; i < name.length(); i++) {
                 char ch = name.charAt(i);
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/REnvVars.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/REnvVars.java
index 87fcb60bbdc6016d67d2e0aaef48f0264062cfe9..5d7338bd0c0ec7ca1132dc7391f1f12f6c0cd869 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/REnvVars.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/REnvVars.java
@@ -291,7 +291,7 @@ public final class REnvVars implements RContext.ContextState {
     }
 
     private String expandParameters(String value) {
-        StringBuffer result = new StringBuffer();
+        StringBuilder result = new StringBuilder();
         int x = 0;
         int paramStart = value.indexOf("${", x);
         while (paramStart >= 0) {
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java
index 8415803a341c9c2496490671d9afc65f6739c5be..8ee00ebb4a460f4cff2111a5a39047dc91e2fa30 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RSerialize.java
@@ -2038,7 +2038,7 @@ public class RSerialize {
             // IDE debugging
             Iterator<RPairList> iter = active.iterator();
             if (iter.hasNext()) {
-                StringBuffer sb = new StringBuffer();
+                StringBuilder sb = new StringBuilder();
                 while (iter.hasNext()) {
                     RPairList pl = iter.next();
                     sb.append('[');
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/conn/TextConnections.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/conn/TextConnections.java
index b1e4629053bf14d0dc17abbeb8d257b162d0ffef..341f5e16bfe88ba760be8ebedbc9fc0c6a7cd6d2 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/conn/TextConnections.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/conn/TextConnections.java
@@ -94,7 +94,7 @@ public class TextConnections {
         TextReadRConnection(TextRConnection base, RAbstractStringVector object) {
             super(base, 0);
             assert object != null;
-            StringBuffer sb = new StringBuffer();
+            StringBuilder sb = new StringBuilder();
             for (int i = 0; i < object.getLength(); i++) {
                 sb.append(object.getDataAt(i));
                 // vector elements are implicitly terminated with a newline
@@ -219,7 +219,7 @@ public class TextConnections {
             }
             if (incompleteLine != null && !endOfLine) {
                 // end of line not found - accumulate incomplete line
-                incompleteLine = new StringBuffer(incompleteLine).append(result).toString();
+                incompleteLine = new StringBuilder(incompleteLine).append(result).toString();
                 base.setIncomplete(true);
             } else if (px < result.length()) {
                 // only reset incompleteLine if
@@ -250,7 +250,7 @@ public class TextConnections {
 
         @Override
         public void writeLines(RAbstractStringVector lines, String sep, boolean useBytes) throws IOException {
-            StringBuffer sb = new StringBuffer();
+            StringBuilder sb = new StringBuilder();
             if (incompleteLine != null) {
                 sb.append(incompleteLine);
                 incompleteLine = null;
@@ -269,7 +269,7 @@ public class TextConnections {
 
         @Override
         public void writeString(String s, boolean nl) throws IOException {
-            writeStringInternal(nl ? new StringBuffer(s).append('\n').toString() : s);
+            writeStringInternal(nl ? new StringBuilder(s).append('\n').toString() : s);
         }
 
         @Override
@@ -328,7 +328,7 @@ public class TextConnections {
      * Strictly implementation-internal connection that is used to support the external debugger.
      */
     public static class InternalStringWriteConnection extends BaseRConnection {
-        private StringBuffer sb = new StringBuffer();
+        private StringBuilder sb = new StringBuilder();
 
         public InternalStringWriteConnection() throws IOException {
             super(ConnectionClass.Terminal, "w", AbstractOpenMode.Write);
@@ -363,7 +363,7 @@ public class TextConnections {
 
         public String getString() {
             String result = sb.toString();
-            sb = new StringBuffer();
+            sb = new StringBuilder();
             return result;
         }
     }
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/TestOutputManager.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/TestOutputManager.java
index 1bfcae0799319dfb90ad71c300d5919b36e177d8..11ea45697778de78a859b17f36047f90dc0d5660 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/TestOutputManager.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/generate/TestOutputManager.java
@@ -188,9 +188,9 @@ public class TestOutputManager {
     }
 
     private static class SaveBufferedReader extends BufferedReader {
-        StringBuffer save;
+        StringBuilder save;
 
-        SaveBufferedReader(Reader in, StringBuffer save) {
+        SaveBufferedReader(Reader in, StringBuilder save) {
             super(in);
             this.save = save;
         }
@@ -217,7 +217,7 @@ public class TestOutputManager {
         if (!outputFile.exists()) {
             return null;
         }
-        StringBuffer content = new StringBuffer();
+        StringBuilder content = new StringBuilder();
         try (SaveBufferedReader in = new SaveBufferedReader(new FileReader(outputFile), content)) {
             // line format for element name: ##elementName
             // line format for input lines: #input
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestFitting.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestFitting.java
index d1f775861e28f7bddfe01388f9b13933b4a4807e..56da0b10726c79e8dd01466141ae1bcff543cddc 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestFitting.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/library/stats/TestFitting.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -40,7 +40,7 @@ public class TestFitting extends TestBase {
 
     @Test
     public void testLm() {
-        StringBuffer printCode = new StringBuffer();
+        StringBuilder printCode = new StringBuilder();
         for (String name : CHECK_RESULT_NAMES) {
             printCode.append("print(res$").append(name).append(");");
         }