diff --git a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
index d030c55..05f6930 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
@@ -5229,7 +5229,7 @@
 	}
 	String getStateString(int state) {
 		if (state == 0) return " no state bits set";
-		StringBuffer stateString = new StringBuffer();
+		StringBuilder stateString = new StringBuilder();
 		if (DEBUG) {
 		if ((state & COM.STATE_SYSTEM_SELECTED) != 0) stateString.append(" STATE_SYSTEM_SELECTED");
 		if ((state & COM.STATE_SYSTEM_SELECTABLE) != 0) stateString.append(" STATE_SYSTEM_SELECTABLE");
@@ -5254,7 +5254,7 @@
 	}
 	String getIA2StatesString(int ia2States) {
 		if (ia2States == 0) return " no state bits set";
-		StringBuffer stateString = new StringBuffer();
+		StringBuilder stateString = new StringBuilder();
 		if (DEBUG) {
 		if ((ia2States & COM.IA2_STATE_ACTIVE) != 0) stateString.append(" IA2_STATE_ACTIVE");
 		if ((ia2States & COM.IA2_STATE_EDITABLE) != 0) stateString.append(" IA2_STATE_EDITABLE");
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java
index c5b328c..4927206 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/IE.java
@@ -1317,7 +1317,7 @@
 		rgdispidNamedArgs[index++] = rgdispid[2];
 	}
 	if (headers != null) {
-		StringBuffer buffer = new StringBuffer();
+		StringBuilder buffer = new StringBuilder();
 		for (int i = 0; i < headers.length; i++) {
 			String current = headers[i];
 			if (current != null) {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/FileTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/FileTransfer.java
index 2b94832..618b91e 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/FileTransfer.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/FileTransfer.java
@@ -75,7 +75,7 @@
 	String[] fileNames = (String[]) object;
 	long newPtr = 0;
 	if (transferData.type == CF_HDROPID) {
-		StringBuffer allFiles = new StringBuffer();
+		StringBuilder allFiles = new StringBuilder();
 		for (int i = 0; i < fileNames.length; i++) {
 			allFiles.append(fileNames[i]);
 			allFiles.append('\0'); // each name is null terminated
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/HTMLTransfer.java b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/HTMLTransfer.java
index 552ec74..1be51db 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/HTMLTransfer.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Drag and Drop/win32/org/eclipse/swt/dnd/HTMLTransfer.java
@@ -85,7 +85,7 @@
 	int endFragment = startFragment + cchMultiByte - 1;
 	int endHTML = endFragment + SUFFIX.length();
 
-	StringBuffer buffer = new StringBuffer(HEADER);
+	StringBuilder buffer = new StringBuilder(HEADER);
 	int maxLength = NUMBER.length();
 	//startHTML
 	int start = buffer.toString().indexOf(NUMBER);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java
index 245880a..49f9a19 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java
@@ -459,7 +459,7 @@
 	if (!jsEnabled) return true;
 
 	String functionName = EXECUTE_ID + "CLOSE"; // $NON-NLS-1$
-	StringBuffer buffer = new StringBuffer ("function "); // $NON-NLS-1$
+	StringBuilder buffer = new StringBuilder ("function "); // $NON-NLS-1$
 	buffer.append (functionName);
 	buffer.append ("(win) {\n"); // $NON-NLS-1$
 	buffer.append ("var fn = win.onbeforeunload; if (fn != null) {try {var str = fn(); "); // $NON-NLS-1$
@@ -1282,7 +1282,7 @@
 
 boolean webView_runBeforeUnloadConfirmPanelWithMessage_initiatedByFrame(long sender, long messageID, long frame) {
 	NSString message = new NSString(messageID);
-	StringBuffer text = new StringBuffer(Compatibility.getMessage("SWT_OnBeforeUnload_Message1")); //$NON-NLS-1$
+	StringBuilder text = new StringBuilder(Compatibility.getMessage("SWT_OnBeforeUnload_Message1")); //$NON-NLS-1$
 	text.append("\n\n"); //$NON-NLS-1$
 	text.append(message.getString());
 	text.append("\n\n"); //$NON-NLS-1$
diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebFrameLoadDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebFrameLoadDelegate.java
index 6ab93ca..8fb1426 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebFrameLoadDelegate.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebFrameLoadDelegate.java
@@ -44,14 +44,14 @@
 
 void addEventHandlers (boolean top) {
 	if (top) {
-		StringBuffer buffer = new StringBuffer ("window.SWTkeyhandler = function SWTkeyhandler(e) {"); //$NON-NLS-1$
+		StringBuilder buffer = new StringBuilder ("window.SWTkeyhandler = function SWTkeyhandler(e) {"); //$NON-NLS-1$
 		buffer.append ("try {e.returnValue = HandleWebKitEvent(e.type, e.keyCode, e.charCode, e.altKey, e.ctrlKey, e.shiftKey, e.metaKey);} catch (e) {}};"); //$NON-NLS-1$
 		buffer.append ("document.addEventListener('keydown', SWTkeyhandler, true);"); //$NON-NLS-1$
 		buffer.append ("document.addEventListener('keypress', SWTkeyhandler, true);"); //$NON-NLS-1$
 		buffer.append ("document.addEventListener('keyup', SWTkeyhandler, true);"); //$NON-NLS-1$
 		browser.execute (buffer.toString ());
 
-		buffer = new StringBuffer ("window.SWTmousehandler = function SWTmousehandler(e) {"); //$NON-NLS-1$
+		buffer = new StringBuilder ("window.SWTmousehandler = function SWTmousehandler(e) {"); //$NON-NLS-1$
 		buffer.append ("try {e.returnValue = HandleWebKitEvent(e.type, e.screenX, e.screenY, e.detail, e.button + 1, e.altKey, e.ctrlKey, e.shiftKey, e.metaKey, e.relatedTarget != null);} catch (e) {}};"); //$NON-NLS-1$
 		buffer.append ("document.addEventListener('mousedown', SWTmousehandler, true);"); //$NON-NLS-1$
 		buffer.append ("document.addEventListener('mouseup', SWTmousehandler, true);"); //$NON-NLS-1$
@@ -63,7 +63,7 @@
 
 		browser.execute (buffer.toString ());
 	} else {
-		StringBuffer buffer = new StringBuffer ("for (var i = 0; i < frames.length; i++) {"); //$NON-NLS-1$
+		StringBuilder buffer = new StringBuilder ("for (var i = 0; i < frames.length; i++) {"); //$NON-NLS-1$
 		buffer.append ("frames[i].document.addEventListener('keydown', window.SWTkeyhandler, true);"); //$NON-NLS-1$
 		buffer.append ("frames[i].document.addEventListener('keypress', window.SWTkeyhandler, true);"); //$NON-NLS-1$
 		buffer.append ("frames[i].document.addEventListener('keyup', window.SWTkeyhandler, true);"); //$NON-NLS-1$
@@ -566,7 +566,7 @@
 		/* show the url instead */
 		host = failingUrlString;
 	}
-	StringBuffer message = new StringBuffer ("\n"); //$NON-NLS-1$
+	StringBuilder message = new StringBuilder ("\n"); //$NON-NLS-1$
 	message.append (Compatibility.getMessage ("SWT_InvalidCert_Message", new String[] {host})); //$NON-NLS-1$
 	message.append ("\n\n"); //$NON-NLS-1$
 	message.append (Compatibility.getMessage (description));
@@ -708,20 +708,20 @@
 	tableItem.setText (new String[] {SWT.getMessage ("SWT_Issuer"), issuer}); //$NON-NLS-1$
 
 	tableItem = new TableItem (table, SWT.NONE);
-	StringBuffer stringBuffer2 = new StringBuffer ();
-	stringBuffer2.append (validFrom);
-	stringBuffer2.append (", "); //$NON-NLS-1$
-	stringBuffer2.append (validFromTime);
-	stringBuffer2.append (" GMT"); //$NON-NLS-1$
-	tableItem.setText (new String[] {SWT.getMessage ("SWT_ValidFrom"), stringBuffer2.toString ()}); //$NON-NLS-1$
+	StringBuilder stringBuilder2 = new StringBuilder ();
+	stringBuilder2.append (validFrom);
+	stringBuilder2.append (", "); //$NON-NLS-1$
+	stringBuilder2.append (validFromTime);
+	stringBuilder2.append (" GMT"); //$NON-NLS-1$
+	tableItem.setText (new String[] {SWT.getMessage ("SWT_ValidFrom"), stringBuilder2.toString ()}); //$NON-NLS-1$
 
 	tableItem = new TableItem (table, SWT.NONE);
-	StringBuffer stringBuffer = new StringBuffer ();
-	stringBuffer.append (validTo);
-	stringBuffer.append (", "); //$NON-NLS-1$
-	stringBuffer.append (validToTime);
-	stringBuffer.append (" GMT"); //$NON-NLS-1$
-	tableItem.setText (new String[] {SWT.getMessage ("SWT_ValidTo"), stringBuffer.toString ()}); //$NON-NLS-1$
+	StringBuilder stringBuilder = new StringBuilder ();
+	stringBuilder.append (validTo);
+	stringBuilder.append (", "); //$NON-NLS-1$
+	stringBuilder.append (validToTime);
+	stringBuilder.append (" GMT"); //$NON-NLS-1$
+	tableItem.setText (new String[] {SWT.getMessage ("SWT_ValidTo"), stringBuilder.toString ()}); //$NON-NLS-1$
 
 	tableItem = new TableItem (table, SWT.NONE);
 	tableItem.setText (new String[] {SWT.getMessage ("SWT_Subject"), subject}); //$NON-NLS-1$
diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebUIDelegate.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebUIDelegate.java
index f73d6c6..3efe37d 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebUIDelegate.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/win32/org/eclipse/swt/browser/WebUIDelegate.java
@@ -403,7 +403,7 @@
 
 	Shell parent = browser.getShell ();
 	String string = WebKit.extractBSTR (message);
-	StringBuffer text = new StringBuffer (Compatibility.getMessage ("SWT_OnBeforeUnload_Message1")); //$NON-NLS-1$
+	StringBuilder text = new StringBuilder (Compatibility.getMessage ("SWT_OnBeforeUnload_Message1")); //$NON-NLS-1$
 	text.append ("\n\n"); //$NON-NLS-1$
 	text.append (string);
 	text.append ("\n\n"); //$NON-NLS-1$
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontData.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontData.java
index 3eb3e19..a7a5b1f 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontData.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/FontData.java
@@ -263,7 +263,7 @@
  * @since 3.0
  */
 public String getLocale () {
-	StringBuffer buffer = new StringBuffer ();
+	StringBuilder buffer = new StringBuilder ();
 	char sep = '_';
 	if (lang != null) {
 		buffer.append (lang);
@@ -446,7 +446,7 @@
  */
 @Override
 public String toString() {
-	StringBuffer buffer = new StringBuffer(128);
+	StringBuilder buffer = new StringBuilder(128);
 	buffer.append("1|");
 	buffer.append(getName());
 	buffer.append("|");
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/TextLayout.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/TextLayout.java
index b0db013..8c7d41f 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/TextLayout.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/TextLayout.java
@@ -2376,7 +2376,7 @@
 
 	checkLayout();
 	String oldString = getText();
-	StringBuffer tabBuffer = new StringBuffer(tabLength);
+	StringBuilder tabBuffer = new StringBuilder(tabLength);
 	for (int i = 0; i < tabLength; i++) {
 		tabBuffer.append(' ');
 	}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
index 6c17840..b0f8e57 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Display.java
@@ -763,7 +763,7 @@
 	/* The string is formatted with CR/LF.
 	 * Create a new string with the LF line delimiter. */
 	i = 0;
-	StringBuffer result = new StringBuffer ();
+	StringBuilder result = new StringBuilder ();
 	while (i < length) {
 		int j = text.indexOf (Cr, i);
 		if (j == -1) j = length;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Link.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Link.java
index c38faea..2cd4e71 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Link.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Link.java
@@ -398,7 +398,7 @@
 	offsets = new Point [length / 4];
 	ids = new String [length / 4];
 	mnemonics = new int [length / 4 + 1];
-	StringBuffer result = new StringBuffer ();
+	StringBuilder result = new StringBuilder ();
 	char [] buffer = new char [length];
 	string.getChars (0, string.length (), buffer, 0);
 	int index = 0, state = 0, linkIndex = 0;
@@ -524,7 +524,7 @@
 	return result.toString ();
 }
 
-int parseMnemonics (char[] buffer, int start, int end, StringBuffer result) {
+int parseMnemonics (char[] buffer, int start, int end, StringBuilder result) {
 	int mnemonic = -1, index = start;
 	while (index < end) {
 		if (buffer [index] == '&') {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java
index 23d1b70..0c4fbc8 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Spinner.java
@@ -938,7 +938,7 @@
 		if (digits > 0) {
 			String decimalSeparator = textFormatter.decimalSeparator().getString();
 			int index = string.length () - digits;
-			StringBuffer buffer = new StringBuffer ();
+			StringBuilder buffer = new StringBuilder ();
 			if (index > 0) {
 				buffer.append (string.substring (0, index));
 				buffer.append (decimalSeparator);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java
index cb0523f..52d8893 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/DateTime.java
@@ -1763,9 +1763,9 @@
 		return false;
 	}
 	int fieldName = getCalendarField(currentField);
-	StringBuffer prefix = new StringBuffer();
-	StringBuffer current = new StringBuffer();
-	StringBuffer suffix = new StringBuffer();
+	StringBuilder prefix = new StringBuilder();
+	StringBuilder current = new StringBuilder();
+	StringBuilder suffix = new StringBuilder();
 
 	AttributedCharacterIterator iterator = dateFormat.formatToCharacterIterator(calendar.getTime());
 	char c = iterator.first();
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/FontData.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/FontData.java
index 631993f..f1b8c52 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/FontData.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/FontData.java
@@ -380,7 +380,7 @@
  * @since 3.0
  */
 public String getLocale () {
-	StringBuffer buffer = new StringBuffer ();
+	StringBuilder buffer = new StringBuilder ();
 	char sep = '_';
 	if (lang != null) {
 		buffer.append (lang);
@@ -598,7 +598,7 @@
  */
 @Override
 public String toString() {
-	StringBuffer buffer = new StringBuffer(128);
+	StringBuilder buffer = new StringBuilder(128);
 	buffer.append("1|"); //$NON-NLS-1$
 	String name = getName();
 	buffer.append(name);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java
index 3b7750a..512ab51 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/DateTime.java
@@ -286,7 +286,7 @@
 }
 
 String getCustomShortTimeFormat () {
-	StringBuffer buffer = new StringBuffer (getTimeFormat ());
+	StringBuilder buffer = new StringBuilder (getTimeFormat ());
 	int length = buffer.length ();
 	boolean inQuotes = false;
 	int start = 0, end = 0;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
index 04a4cac..297e562 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Display.java
@@ -4810,7 +4810,7 @@
 	text = withCrLf (text);
 	int length = text.length ();
 	if (width <= 0 || length == 0 || length == 1) return text;
-	StringBuffer result = new StringBuffer ();
+	StringBuilder result = new StringBuilder ();
 	int lineStart = 0, lineEnd = 0;
 	while (lineStart < length) {
 		lineEnd = text.indexOf (Lf, lineStart);
@@ -4893,7 +4893,7 @@
 
 	/* Create a new string with the CR/LF line terminator. */
 	i = 0;
-	StringBuffer result = new StringBuffer (count);
+	StringBuilder result = new StringBuilder (count);
 	while (i < length) {
 		int j = string.indexOf ('\n', i);
 		if (j == -1) j = length;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Spinner.java b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Spinner.java
index e1b327f..ba046b9 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Spinner.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/widgets/Spinner.java
@@ -305,7 +305,7 @@
 		OS.SendMessage (hwndUpDown , OS.UDM_GETRANGE32, null, max);
 		String string = String.valueOf (max [0]);
 		if (digits > 0) {
-			StringBuffer buffer = new StringBuffer ();
+			StringBuilder buffer = new StringBuilder ();
 			buffer.append (string);
 			buffer.append (getDecimalSeparator ());
 			int count = digits - string.length ();
@@ -972,7 +972,7 @@
 			string = String.valueOf (Math.abs (value));
 			String decimalSeparator = getDecimalSeparator ();
 			int index = string.length () - digits;
-			StringBuffer buffer = new StringBuffer ();
+			StringBuilder buffer = new StringBuilder ();
 			if (value < 0) buffer.append ("-");
 			if (index > 0) {
 				buffer.append (string.substring (0, index));
