diff --git a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
index d053187517e7460bfd7e9a24880e1768c0d1fcc9..3eafaec1931e12d2f44e3aae8263f8295de4a35c 100644
--- a/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
+++ b/src/main/java/org/sablecc/sablecc/lexer/Lexer.java
@@ -19,7 +19,7 @@ public class Lexer implements ITokenListContainer
     protected int pos;
     private boolean cr;
     private boolean eof;
-    private final StringBuffer text = new StringBuffer();
+    private final StringBuilder text = new StringBuilder();
 
     private List<IToken> tokenList;
     private final Queue<IToken> nextList = new LinkedBlockingQueue<IToken>();
@@ -722,13 +722,7 @@ public class Lexer implements ITokenListContainer
 
     private String getText(int acceptLength)
     {
-        StringBuffer s = new StringBuffer(acceptLength);
-        for(int i = 0; i < acceptLength; i++)
-        {
-            s.append(this.text.charAt(i));
-        }
-
-        return s.toString();
+        return this.text.substring(0, acceptLength);
     }
 
     private static int[][][][] gotoTable;
diff --git a/src/main/java/org/sablecc/sablecc/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java
index f76e51c6bbbc10ca95dc63718f2602da919fbf2c..aadf7435f6aceccef7955e225392839b594c6d00 100644
--- a/src/main/java/org/sablecc/sablecc/parser/Parser.java
+++ b/src/main/java/org/sablecc/sablecc/parser/Parser.java
@@ -10688,7 +10688,7 @@ public class Parser implements IParser
             for(int i = 0; i < errorMessages.length; i++)
             {
                 length = s.readInt();
-                StringBuffer buffer = new StringBuffer();
+                StringBuilder buffer = new StringBuilder();
 
                 for(int j = 0; j < length; j++)
                 {
diff --git a/src/main/resources/org/sablecc/sablecc/lexer.txt b/src/main/resources/org/sablecc/sablecc/lexer.txt
index 2922cf10ee42c337b32f2f01d194648325a5795e..f9ccfb2dc96c980fd734deab2f20a2373e584280 100644
--- a/src/main/resources/org/sablecc/sablecc/lexer.txt
+++ b/src/main/resources/org/sablecc/sablecc/lexer.txt
@@ -43,7 +43,7 @@ public class Lexer implements ITokenListContainer
     protected int pos;
     private boolean cr;
     private boolean eof;
-    private final StringBuffer text = new StringBuffer();
+    private final StringBuilder text = new StringBuilder();
 
     private List<IToken> tokenList;
     private final Queue<IToken> nextList = new LinkedBlockingQueue<IToken>();
@@ -350,13 +350,7 @@ Macro:LexerBody2
 
     private String getText(int acceptLength)
     {
-        StringBuffer s = new StringBuffer(acceptLength);
-        for(int i = 0; i < acceptLength; i++)
-        {
-            s.append(this.text.charAt(i));
-        }
-
-        return s.toString();
+        return this.text.substring(0, acceptLength);
     }
 
     private static int[][][][] gotoTable;
diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt
index 862ac91403b9e7959abd031ce47c6b7a343d1e4e..d6d876b18ead8e26bf711fa9d343eb7fc296c64f 100644
--- a/src/main/resources/org/sablecc/sablecc/parser.txt
+++ b/src/main/resources/org/sablecc/sablecc/parser.txt
@@ -550,7 +550,7 @@ Macro:ParserTail
             for(int i = 0; i < errorMessages.length; i++)
             {
                 length = s.readInt();
-                StringBuffer buffer = new StringBuffer();
+                StringBuilder buffer = new StringBuilder();
 
                 for(int j = 0; j < length; j++)
                 {