diff --git a/src/common/org/apache/xmlbeans/impl/common/NameUtil.java b/src/common/org/apache/xmlbeans/impl/common/NameUtil.java
index 7278f86..71d5ff6 100644
--- a/src/common/org/apache/xmlbeans/impl/common/NameUtil.java
+++ b/src/common/org/apache/xmlbeans/impl/common/NameUtil.java
@@ -518,7 +518,7 @@
             }
         }
 
-        StringBuffer buf = new StringBuffer();
+        StringBuilder buf = new StringBuilder();
         for (Iterator it = result.iterator(); it.hasNext(); )
         {
             String part = nonJavaKeyword(lowerCamelCase((String)it.next(), useJaxRpcRules, true));
@@ -549,7 +549,7 @@
      */
     public static String upperCaseUnderbar(String xml_name)
     {
-        StringBuffer buf = new StringBuffer();
+        StringBuilder buf = new StringBuilder();
         List words = splitWords(xml_name, false);
 
         final int sz = words.size() - 1;
@@ -595,7 +595,7 @@
      */
     public static String upperCamelCase(String xml_name, boolean useJaxRpcRules)
     {
-        StringBuffer buf = new StringBuffer();
+        StringBuilder buf = new StringBuilder();
         List words = splitWords(xml_name, useJaxRpcRules);
 
         if (words.size() > 0)
@@ -630,7 +630,7 @@
     public static String lowerCamelCase(String xml_name, boolean useJaxRpcRules,
                                         boolean fixGeneratedName)
     {
-        StringBuffer buf = new StringBuffer();
+        StringBuilder buf = new StringBuilder();
         List words = splitWords(xml_name, useJaxRpcRules);
 
         if (words.size() > 0)
diff --git a/src/common/org/apache/xmlbeans/impl/common/XmlObjectList.java b/src/common/org/apache/xmlbeans/impl/common/XmlObjectList.java
index ca8970e..cce6f24 100644
--- a/src/common/org/apache/xmlbeans/impl/common/XmlObjectList.java
+++ b/src/common/org/apache/xmlbeans/impl/common/XmlObjectList.java
@@ -120,7 +120,7 @@
     }
 
     public String toString() {
-        StringBuffer b = new StringBuffer();
+        StringBuilder b = new StringBuilder();
 
         for (int i = 0 ; i < _objects.length ; i++)
         {
diff --git a/src/typeimpl/org/apache/xmlbeans/impl/validator/Validator.java b/src/typeimpl/org/apache/xmlbeans/impl/validator/Validator.java
index 280cfe5..5c1d5fd 100644
--- a/src/typeimpl/org/apache/xmlbeans/impl/validator/Validator.java
+++ b/src/typeimpl/org/apache/xmlbeans/impl/validator/Validator.java
@@ -910,7 +910,7 @@
 
         if (names.size() > 0)
         {
-            StringBuffer buf = new StringBuffer();
+            StringBuilder buf = new StringBuilder();
             for (Iterator iter = names.iterator(); iter.hasNext();)
             {
                 QName qname = (QName) iter.next();
@@ -957,7 +957,7 @@
 
         if (names.size() > 0)
         {
-            StringBuffer buf = new StringBuffer();
+            StringBuilder buf = new StringBuilder();
             for (Iterator iter = names.iterator(); iter.hasNext();)
             {
                 QName qname = (QName) iter.next();
diff --git a/src/xmlcomp/org/apache/xmlbeans/impl/tool/XMLBean.java b/src/xmlcomp/org/apache/xmlbeans/impl/tool/XMLBean.java
index c2ddb19..40a69c9 100644
--- a/src/xmlcomp/org/apache/xmlbeans/impl/tool/XMLBean.java
+++ b/src/xmlcomp/org/apache/xmlbeans/impl/tool/XMLBean.java
@@ -618,7 +618,7 @@
         if (mdefnamespaces == null) {
             return null;
         }
-        StringBuffer buf = new StringBuffer();
+        StringBuilder buf = new StringBuilder();
         Iterator i = mdefnamespaces.iterator();
         while (i.hasNext()) {
             buf.append((String)i.next());
diff --git a/src/xmlconfig/org/apache/xmlbeans/impl/config/InterfaceExtensionImpl.java b/src/xmlconfig/org/apache/xmlbeans/impl/config/InterfaceExtensionImpl.java
index caefa33..e932fb4 100755
--- a/src/xmlconfig/org/apache/xmlbeans/impl/config/InterfaceExtensionImpl.java
+++ b/src/xmlconfig/org/apache/xmlbeans/impl/config/InterfaceExtensionImpl.java
@@ -262,7 +262,7 @@
 
     public String toString()
     {
-        StringBuffer buf = new StringBuffer();
+        StringBuilder buf = new StringBuilder();
         buf.append("  static handler: ").append(_delegateToClassName).append("\n");
         buf.append("  interface: ").append(_interfaceClassName).append("\n");
         buf.append("  name set: ").append(_xbeanSet).append("\n");
@@ -401,7 +401,7 @@
 
         public String toString()
         {
-            StringBuffer buf = new StringBuffer();
+            StringBuilder buf = new StringBuilder();
 
             buf.append(getReturnType()).append(" ").append(getSignature());
 
diff --git a/test/src/xmlobject/extensions/interfaceFeature/methodNameCollision/existing/FooHandler.java b/test/src/xmlobject/extensions/interfaceFeature/methodNameCollision/existing/FooHandler.java
index a6e239a..7a99230 100755
--- a/test/src/xmlobject/extensions/interfaceFeature/methodNameCollision/existing/FooHandler.java
+++ b/test/src/xmlobject/extensions/interfaceFeature/methodNameCollision/existing/FooHandler.java
@@ -24,7 +24,7 @@
     }
 
     public static String getName2(XmlObject xo, int[][] ints){
-        StringBuffer buf = new StringBuffer();
+        StringBuilder buf = new StringBuilder();
         buf.append("Name2: ");
         for (int i = 0; i < ints.length; i++)
         {
diff --git a/test/tools/src/tools/util/Util.java b/test/tools/src/tools/util/Util.java
index 9dc132f..b5de8af 100755
--- a/test/tools/src/tools/util/Util.java
+++ b/test/tools/src/tools/util/Util.java
@@ -768,7 +768,7 @@
     public static String gobbleUpReader(Reader in)
             throws Exception
     {
-        StringBuffer buf = new StringBuffer();
+        StringBuilder buf = new StringBuilder();
         int c;
 
         while (-1 != (c = in.read()))
@@ -1126,7 +1126,7 @@
             return str;
 
         int last = 0;
-        StringBuffer buf = new StringBuffer();
+        StringBuilder buf = new StringBuilder();
         Matcher m = p.matcher(str);
 
         while (m.find())
