diff --git a/src/common/org/apache/xmlbeans/impl/common/QNameHelper.java b/src/common/org/apache/xmlbeans/impl/common/QNameHelper.java
index b6c4458..8ca53ed 100644
--- a/src/common/org/apache/xmlbeans/impl/common/QNameHelper.java
+++ b/src/common/org/apache/xmlbeans/impl/common/QNameHelper.java
@@ -108,7 +108,7 @@
 
     public static String hexsafe(String s)
     {
-        StringBuffer result = new StringBuffer();
+        StringBuilder result = new StringBuilder();
         for (int i = 0; i < s.length(); i++)
         {
             char ch = s.charAt(i);
@@ -157,7 +157,7 @@
             }
             byte[] digest = md.digest(inputBytes);
             assert(digest.length == 20); // SHA1 160 bits == 20 bytes
-            result = new StringBuffer(URI_SHA1_PREFIX);
+            result = new StringBuilder(URI_SHA1_PREFIX);
             for (int j = 0; j < digest.length; j++)
             {
                 result.append(hexdigits[(digest[j] >> 4) & 0xF]);
diff --git a/src/common/org/apache/xmlbeans/impl/common/XPath.java b/src/common/org/apache/xmlbeans/impl/common/XPath.java
index e3edd92..fe8a2ff 100644
--- a/src/common/org/apache/xmlbeans/impl/common/XPath.java
+++ b/src/common/org/apache/xmlbeans/impl/common/XPath.java
@@ -580,7 +580,7 @@
             if (!isNCNameStart())
                 throw newError( "Expected non-colonized name" );
 
-            StringBuffer sb = new StringBuffer();
+            StringBuilder sb = new StringBuilder();
 
             sb.append( (char) currChar() );
 
@@ -622,7 +622,7 @@
             else
                 throw newError( "Expected quote (\" or ')" );
 
-            StringBuffer sb = new StringBuffer();
+            StringBuilder sb = new StringBuilder();
 
             for ( ; ; )
             {
diff --git a/src/store/org/apache/xmlbeans/impl/store/Jsr173.java b/src/store/org/apache/xmlbeans/impl/store/Jsr173.java
index 7bff79d..0cf6883 100755
--- a/src/store/org/apache/xmlbeans/impl/store/Jsr173.java
+++ b/src/store/org/apache/xmlbeans/impl/store/Jsr173.java
@@ -287,7 +287,7 @@
             if (!isStartElement())
                 throw new IllegalStateException();
 
-            StringBuffer sb = new StringBuffer();
+            StringBuilder sb = new StringBuilder();
 
             for ( ; ; )
             {
diff --git a/src/tools/org/apache/xmlbeans/impl/xsd2inst/SampleXmlUtil.java b/src/tools/org/apache/xmlbeans/impl/xsd2inst/SampleXmlUtil.java
index 210646d..708b4cf 100644
--- a/src/tools/org/apache/xmlbeans/impl/xsd2inst/SampleXmlUtil.java
+++ b/src/tools/org/apache/xmlbeans/impl/xsd2inst/SampleXmlUtil.java
@@ -176,7 +176,7 @@
         if (sType.getSimpleVariety() == SchemaType.LIST)
         {
             SchemaType itemType = sType.getListItemType();
-            StringBuffer sb = new StringBuffer();
+            StringBuilder sb = new StringBuilder();
             int length = pickLength(sType);
             if (length > 0)
                 sb.append(sampleDataForSimpleType(itemType));
@@ -374,7 +374,7 @@
     
     private String pickDigits(int digits)
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         while (digits-- > 0)
             sb.append(Integer.toString(pick(10)));
         return sb.toString();
diff --git a/src/typeimpl/org/apache/xmlbeans/impl/regex/RangeToken.java b/src/typeimpl/org/apache/xmlbeans/impl/regex/RangeToken.java
index 482ff08..537fdc4 100644
--- a/src/typeimpl/org/apache/xmlbeans/impl/regex/RangeToken.java
+++ b/src/typeimpl/org/apache/xmlbeans/impl/regex/RangeToken.java
@@ -543,7 +543,7 @@
             else if (this == Token.token_spaces)
                 ret = "\\s";
             else {
-                StringBuffer sb = new StringBuffer();
+                StringBuilder sb = new StringBuilder();
                 sb.append("[");
                 for (int i = 0;  i < this.ranges.length;  i += 2) {
                     if ((options & RegularExpression.SPECIAL_COMMA) != 0 && i > 0)  sb.append(",");
@@ -566,7 +566,7 @@
             else if (this == Token.token_not_spaces)
                 ret = "\\S";
             else {
-                StringBuffer sb = new StringBuffer();
+                StringBuilder sb = new StringBuilder();
                 sb.append("[^");
                 for (int i = 0;  i < this.ranges.length;  i += 2) {
                     if ((options & RegularExpression.SPECIAL_COMMA) != 0 && i > 0)  sb.append(",");
diff --git a/src/typeimpl/org/apache/xmlbeans/impl/regex/Token.java b/src/typeimpl/org/apache/xmlbeans/impl/regex/Token.java
index 6d85fb2..6d333e2 100644
--- a/src/typeimpl/org/apache/xmlbeans/impl/regex/Token.java
+++ b/src/typeimpl/org/apache/xmlbeans/impl/regex/Token.java
@@ -1490,7 +1490,7 @@
                     } else
                         ret = ch.toString(options)+ch2.toString(options);
                 } else {
-                    StringBuffer sb = new StringBuffer();
+                    StringBuilder sb = new StringBuilder();
                     for (int i = 0;  i < this.children.size();  i ++) {
                         sb.append(((Token)this.children.elementAt(i)).toString(options));
                     }
@@ -1504,7 +1504,7 @@
                        && this.getChild(0).type == EMPTY) {
                 ret = this.getChild(1).toString(options)+"??";
             } else {
-                StringBuffer sb = new StringBuffer();
+                StringBuilder sb = new StringBuilder();
                 sb.append(((Token)this.children.elementAt(0)).toString(options));
                 for (int i = 1;  i < this.children.size();  i ++) {
                     sb.append((char)'|');
diff --git a/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java b/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
index 57a2805..e128f3b 100644
--- a/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
+++ b/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePrinter.java
@@ -120,7 +120,7 @@
 
     String encodeString ( String s )
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
 
         sb.append( '"' );
 
@@ -696,7 +696,7 @@
         if (sImpl == null)
             return "";
 
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
 
         InterfaceExtension[] exts = sImpl.getInterfaceExtensions();
         if (exts != null) for (int i = 0; i < exts.length; i++)
@@ -869,7 +869,7 @@
             }
             return str;
         }
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         for (int i = 0; i < str.length(); i++)
         {
             char ch = str.charAt(i);
diff --git a/src/typeimpl/org/apache/xmlbeans/impl/schema/StscTranslator.java b/src/typeimpl/org/apache/xmlbeans/impl/schema/StscTranslator.java
index 2e3fa3a..7a7299e 100644
--- a/src/typeimpl/org/apache/xmlbeans/impl/schema/StscTranslator.java
+++ b/src/typeimpl/org/apache/xmlbeans/impl/schema/StscTranslator.java
@@ -1315,7 +1315,7 @@
 
     private static String removeWhitespace(String xpath)
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         for (int i = 0; i < xpath.length(); i++)
         {
             char ch = xpath.charAt(i);
diff --git a/src/typeimpl/org/apache/xmlbeans/impl/values/XmlListImpl.java b/src/typeimpl/org/apache/xmlbeans/impl/values/XmlListImpl.java
index bd1dbf5..c432447 100644
--- a/src/typeimpl/org/apache/xmlbeans/impl/values/XmlListImpl.java
+++ b/src/typeimpl/org/apache/xmlbeans/impl/values/XmlListImpl.java
@@ -59,7 +59,7 @@
         if (xList.size() == 0)
             return "";
 
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         sb.append(nullAsEmpty(((SimpleValue)xList.get(0)).getStringValue()));
 
         for (int i = 1; i < xList.size(); i++)
diff --git a/src/typeimpl/org/apache/xmlbeans/soap/SOAPArrayType.java b/src/typeimpl/org/apache/xmlbeans/soap/SOAPArrayType.java
index 5f8a7aa..db24214 100644
--- a/src/typeimpl/org/apache/xmlbeans/soap/SOAPArrayType.java
+++ b/src/typeimpl/org/apache/xmlbeans/soap/SOAPArrayType.java
@@ -309,7 +309,7 @@
      */
     public String soap11DimensionString(int[] actualDimensions)
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         for (int i = 0; i < _ranks.length; i++)
         {
             sb.append('[');
@@ -383,7 +383,7 @@
      */
     public String soap12DimensionString(int[] actualDimensions)
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
 
         for (int i = 0; i < actualDimensions.length; i++)
         {
diff --git a/src/xmlcomp/org/apache/xmlbeans/impl/tool/RunXQuery.java b/src/xmlcomp/org/apache/xmlbeans/impl/tool/RunXQuery.java
index c93c6c1..b782a1f 100644
--- a/src/xmlcomp/org/apache/xmlbeans/impl/tool/RunXQuery.java
+++ b/src/xmlcomp/org/apache/xmlbeans/impl/tool/RunXQuery.java
@@ -122,7 +122,7 @@
                 FileInputStream is = new FileInputStream( queryFile );
                 InputStreamReader r = new InputStreamReader( is );
                 
-                StringBuffer sb = new StringBuffer();
+                StringBuilder sb = new StringBuilder();
 
                 for ( ; ; )
                 {
diff --git a/src/xmlcomp/org/apache/xmlbeans/impl/tool/XSTCTester.java b/src/xmlcomp/org/apache/xmlbeans/impl/tool/XSTCTester.java
index f7ea835..b88fd9c 100644
--- a/src/xmlcomp/org/apache/xmlbeans/impl/tool/XSTCTester.java
+++ b/src/xmlcomp/org/apache/xmlbeans/impl/tool/XSTCTester.java
@@ -349,7 +349,7 @@
     
     public static String makeHTMLDescription(TestCase testCase)
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         sb.append("<a class=noline href='javascript:openWindow(\"");
         if (testCase.getSchemaFile() == null)
             sb.append("about:No schema");
diff --git a/src/xmlpublic/org/apache/xmlbeans/QNameSet.java b/src/xmlpublic/org/apache/xmlbeans/QNameSet.java
index 246e874..c423e1b 100644
--- a/src/xmlpublic/org/apache/xmlbeans/QNameSet.java
+++ b/src/xmlpublic/org/apache/xmlbeans/QNameSet.java
@@ -417,7 +417,7 @@
      */ 
     public String toString()
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         sb.append("QNameSet");
         sb.append(_inverted ? "-(" : "+(");
         for (Iterator i = _includedURIs.iterator(); i.hasNext(); )
diff --git a/src/xmlpublic/org/apache/xmlbeans/QNameSetBuilder.java b/src/xmlpublic/org/apache/xmlbeans/QNameSetBuilder.java
index 2594561..13d8e7e 100644
--- a/src/xmlpublic/org/apache/xmlbeans/QNameSetBuilder.java
+++ b/src/xmlpublic/org/apache/xmlbeans/QNameSetBuilder.java
@@ -682,7 +682,7 @@
      */ 
     public String toString()
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         sb.append("QNameSetBuilder");
         sb.append(_inverted ? "-(" : "+(");
         for (Iterator i = _includedURIs.iterator(); i.hasNext(); )
diff --git a/src/xmlpublic/org/apache/xmlbeans/XmlError.java b/src/xmlpublic/org/apache/xmlbeans/XmlError.java
index 72b1f7a..e9d48d3 100644
--- a/src/xmlpublic/org/apache/xmlbeans/XmlError.java
+++ b/src/xmlpublic/org/apache/xmlbeans/XmlError.java
@@ -584,7 +584,7 @@
         // workshop.workspace.ant.AntLogger regex
         // which also matches javac (davidbau)
 
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
 
         String source = formattedFileName(getSourceName(), base);
 
diff --git a/test/src/misc/checkin/CharUtilTests.java b/test/src/misc/checkin/CharUtilTests.java
index 28302e5..66b865b 100644
--- a/test/src/misc/checkin/CharUtilTests.java
+++ b/test/src/misc/checkin/CharUtilTests.java
@@ -53,7 +53,7 @@
     
     private String randomString ( )
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
 
         for ( int i = rnd( 128 ) ; i >= 0 ; i-- )
             sb.append( randomChar() );
diff --git a/test/src/misc/detailed/JiraRegression1_50Test.java b/test/src/misc/detailed/JiraRegression1_50Test.java
index ab929a4..7cd9492 100644
--- a/test/src/misc/detailed/JiraRegression1_50Test.java
+++ b/test/src/misc/detailed/JiraRegression1_50Test.java
@@ -388,7 +388,7 @@
         Thread.sleep(6000);
         System.out.println("Done with RegEx Threading Test...");
 
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         for (int i = 0; i < threads.length; i++) {
             if (threads[i].getException() != null)
                 sb.append(threads[i].getException().getMessage() + "\n");
diff --git a/test/src/misc/detailed/JiraRegression50_100Test.java b/test/src/misc/detailed/JiraRegression50_100Test.java
index 28cab1d..8507713 100644
--- a/test/src/misc/detailed/JiraRegression50_100Test.java
+++ b/test/src/misc/detailed/JiraRegression50_100Test.java
@@ -424,7 +424,7 @@
         //System.out.println("System: "+ doc2Props.getDoctypeSystemId() + " = " + docType.getSystemId());
         //System.out.println("Public: "+ doc2Props.getDoctypePublicId()+ " = " + docType.getPublicId());
 
-        StringBuffer compareText = new StringBuffer();
+        StringBuilder compareText = new StringBuilder();
         //check values - compare to expected and DOM
         if (doc2Props != null) {
             if (doc2Props.getDoctypeName() == null ||
@@ -619,7 +619,7 @@
     @Test
     @Ignore
     public void test_jira_xmlbeans96() throws Exception {
-        StringBuffer xmlstringbuf = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
+        StringBuilder xmlstringbuf = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
         xmlstringbuf.append("<test>");
         xmlstringbuf.append("<testchild attr=\"abcd\"> Jira02 </testchild>");
         xmlstringbuf.append("</test>");
@@ -715,7 +715,7 @@
     */
     @Test
     public void test_jira_xmlbeans99_b() throws Exception {
-        StringBuffer xmlstringbuf = new StringBuffer("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?> \n");
+        StringBuilder xmlstringbuf = new StringBuilder("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?> \n");
         xmlstringbuf.append("                <x:dummy xmlns:x=\"http://dufourrault\" xmlns:xsi=\"http://www.w3.org/2000/10/XMLSchema-instance\" xsi:SchemaLocation=\"dummy.xsd\">\n");
         xmlstringbuf.append("                    <x:father>\n");
         xmlstringbuf.append("                     <x:son>toto</x:son> \n");
diff --git a/test/src/misc/detailed/SampleRunner.java b/test/src/misc/detailed/SampleRunner.java
index bfaa8f6..e118f1e 100644
--- a/test/src/misc/detailed/SampleRunner.java
+++ b/test/src/misc/detailed/SampleRunner.java
@@ -64,7 +64,7 @@
 
     private String getMessageFromExceptions(ArrayList ex)
     {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         for (int i = 0; i < ex.size(); i += 2)
         {
             sb.append("\n\nFILE:" + (String) ex.get(i));
diff --git a/test/src/random/common/Random.java b/test/src/random/common/Random.java
index 3efa926..d7b0ded 100755
--- a/test/src/random/common/Random.java
+++ b/test/src/random/common/Random.java
@@ -642,7 +642,7 @@
         if (c.isFinish() || c.isNamespace() || c.isText())
             return;
 
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
 
         for (int i = rnd(10); i >= 0; i--)
             sb.append(_chars[rnd(_chars.length)]);
@@ -700,7 +700,7 @@
         if (c.isAnyAttr() || c.isStartdoc())
             return;
 
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
 
         for (int i = rnd(10); i >= 0; i--)
             sb.append(_chars[rnd(_chars.length)]);
diff --git a/test/src/scomp/contentType/simple/detailed/BuiltInType.java b/test/src/scomp/contentType/simple/detailed/BuiltInType.java
index 5f16a12..a85c8d6 100644
--- a/test/src/scomp/contentType/simple/detailed/BuiltInType.java
+++ b/test/src/scomp/contentType/simple/detailed/BuiltInType.java
@@ -129,7 +129,7 @@
     }
 
     private String buildString(String Elt, boolean leadSpace) {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         sb.append("<" + Elt);
         sb.append(" xmlns=\"http://xbean/scomp/contentType/builtIn/String\">");
         if (leadSpace)
diff --git a/test/src/scomp/derivation/detailed/BlockTest.java b/test/src/scomp/derivation/detailed/BlockTest.java
index dd794bb..2b01532 100644
--- a/test/src/scomp/derivation/detailed/BlockTest.java
+++ b/test/src/scomp/derivation/detailed/BlockTest.java
@@ -35,7 +35,7 @@
                               String type,
                               boolean ext,
                               boolean valid) {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         sb.append("<ns:" + elt +
                 "  xmlns:ns=\"http://xbean/scomp/derivation/Block\"");
         sb.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
@@ -54,7 +54,7 @@
 
     public String getInstanceDefault(String elt, String type, boolean ext,
                                      boolean valid) {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         sb.append("<ns:" + elt +
                 "  xmlns:ns=\"http://xbean/scomp/derivation/FinalBlockDefault\"");
         sb.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
diff --git a/test/src/xmlcursor/checkin/StoreTests.java b/test/src/xmlcursor/checkin/StoreTests.java
index 38c98d3..2480a52 100755
--- a/test/src/xmlcursor/checkin/StoreTests.java
+++ b/test/src/xmlcursor/checkin/StoreTests.java
@@ -427,9 +427,9 @@
 
     private static class DocBuilder {
         Random r;
-        StringBuffer sb;
+        StringBuilder sb;
 
-        DocBuilder(Random _r, StringBuffer _sb) {
+        DocBuilder(Random _r, StringBuilder _sb) {
             r = _r;
             sb = _sb;
         }
@@ -679,7 +679,7 @@
     }
 
     private String makeRandomDocument(Random r) {
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
 
         DocBuilder db = new DocBuilder(r, sb);
 
diff --git a/test/src/xmlobject/extensions/interfaceFeature/multInterfaces/checkin/MultInterfacesTest.java b/test/src/xmlobject/extensions/interfaceFeature/multInterfaces/checkin/MultInterfacesTest.java
index 34f47ff..9dc0c74 100755
--- a/test/src/xmlobject/extensions/interfaceFeature/multInterfaces/checkin/MultInterfacesTest.java
+++ b/test/src/xmlobject/extensions/interfaceFeature/multInterfaces/checkin/MultInterfacesTest.java
@@ -50,7 +50,7 @@
         items.setItemArray(it);
         po.setItems(items);
 
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         sb.append(
                 "<pur:purchaseOrder xmlns:pur=\"http://xbean.interface_feature/multInterfaces/PurchaseOrder\">");
 
diff --git a/test/src/xmlobject/extensions/interfaceFeature/readOnlyBean/checkin/ReadOnlyTest.java b/test/src/xmlobject/extensions/interfaceFeature/readOnlyBean/checkin/ReadOnlyTest.java
index 01410c8..c223075 100755
--- a/test/src/xmlobject/extensions/interfaceFeature/readOnlyBean/checkin/ReadOnlyTest.java
+++ b/test/src/xmlobject/extensions/interfaceFeature/readOnlyBean/checkin/ReadOnlyTest.java
@@ -46,7 +46,7 @@
             items.setItemArray(it);
          po.setItems(items);
 
-         StringBuffer sb = new StringBuffer();
+         StringBuilder sb = new StringBuilder();
         sb.append(
                 "<pur:purchaseOrder xmlns:pur=\"http://xbean.interface_feature/readOnlyBean/PurchaseOrder\">");
 
diff --git a/test/src/xmlobject/usertype/multipleItems/checkin/AverageTest.java b/test/src/xmlobject/usertype/multipleItems/checkin/AverageTest.java
index f9cc8d3..76ca345 100644
--- a/test/src/xmlobject/usertype/multipleItems/checkin/AverageTest.java
+++ b/test/src/xmlobject/usertype/multipleItems/checkin/AverageTest.java
@@ -126,7 +126,7 @@
     @Test(expected = XmlValueOutOfRangeException.class)
     public void testBadInput() throws XmlException{
 
-        StringBuffer sb = new StringBuffer();
+        StringBuilder sb = new StringBuilder();
         sb.append("<com:company xmlns:com=\"http://xbean.usertype/multipleItems/company\">");
         sb.append("<departments><consultant name=\"Joe Smith\" age=\"100\">");
         sb.append("<room>000-AB</room><room>0001-AB</room><room>002-AB</room>");
