diff --git a/src/main/java/org/apache/commons/ognl/ASTAdd.java b/src/main/java/org/apache/commons/ognl/ASTAdd.java
index 89885e9..950c9de 100644
--- a/src/main/java/org/apache/commons/ognl/ASTAdd.java
+++ b/src/main/java/org/apache/commons/ognl/ASTAdd.java
@@ -143,7 +143,7 @@
     {
         try
         {
-            String result = "";
+            StringBuilder result = new StringBuilder();
             NodeType lastType = null;
 
             // go through once to determine the ultimate type
@@ -183,7 +183,7 @@
                 {
                     if ( i > 0 )
                     {
-                        result += " " + getExpressionOperator( i ) + " ";
+                        result.append(" ").append(getExpressionOperator(i)).append(" ");
                     }
 
                     String expr = children[i].toGetSourceString( context, target );
@@ -282,7 +282,7 @@
                         }
                     }
 
-                    result += expr;
+                    result.append(expr);
 
                     // hanlde addition for numeric types when applicable or just string concatenation
 
@@ -298,10 +298,10 @@
                                 || ASTProperty.class.isInstance( children[i] )
                                 || ASTChain.class.isInstance( children[i] ) )
                             {
-                                result += ".";
+                                result.append(".");
                             }
 
-                            result += OgnlRuntime.getNumericValueGetter( context.getCurrentType() );
+                            result.append(OgnlRuntime.getNumericValueGetter(context.getCurrentType()));
                             context.setCurrentType( OgnlRuntime.getPrimitiveWrapperClass( context.getCurrentType() ) );
                         }
                     }
@@ -335,7 +335,7 @@
                 throw OgnlOps.castToRuntime( t );
             }
 
-            return result;
+            return result.toString();
 
         }
         catch ( Throwable t )
diff --git a/src/main/java/org/apache/commons/ognl/ASTCtor.java b/src/main/java/org/apache/commons/ognl/ASTCtor.java
index b3d33cc..37603d3 100644
--- a/src/main/java/org/apache/commons/ognl/ASTCtor.java
+++ b/src/main/java/org/apache/commons/ognl/ASTCtor.java
@@ -142,7 +142,7 @@
 
     public String toGetSourceString( OgnlContext context, Object target )
     {
-        String result = "new " + className;
+        StringBuilder result = new StringBuilder("new " + className);
 
         Class clazz = null;
         Object ctorValue = null;
@@ -179,30 +179,28 @@
                 if ( children[0] instanceof ASTConst )
                 {
 
-                    result = result + "[" + children[0].toGetSourceString( context, target ) + "]";
+                    result.append("[").append(children[0].toGetSourceString(context, target)).append("]");
                 }
                 else if ( ASTProperty.class.isInstance( children[0] ) )
                 {
 
-                    result =
-                        result + "[" + ExpressionCompiler.getRootExpression( children[0], target, context )
-                            + children[0].toGetSourceString( context, target ) + "]";
+                    result.append("[").append(ExpressionCompiler.getRootExpression(children[0], target, context)).append(children[0].toGetSourceString(context, target)).append("]");
                 }
                 else if ( ASTChain.class.isInstance( children[0] ) )
                 {
 
-                    result = result + "[" + children[0].toGetSourceString( context, target ) + "]";
+                    result.append("[").append(children[0].toGetSourceString(context, target)).append("]");
                 }
                 else
                 {
 
-                    result = result + "[] " + children[0].toGetSourceString( context, target );
+                    result.append("[] ").append(children[0].toGetSourceString(context, target));
                 }
 
             }
             else
             {
-                result = result + "(";
+                result.append("(");
 
                 if ( ( children != null ) && ( children.length > 0 ) )
                 {
@@ -284,7 +282,7 @@
                     {
                         if ( i > 0 )
                         {
-                            result = result + ", ";
+                            result.append(", ");
                         }
 
                         String value = expressions[i];
@@ -329,11 +327,11 @@
                             }
                         }
 
-                        result += value;
+                        result.append(value);
                     }
 
                 }
-                result = result + ")";
+                result.append(")");
             }
 
             context.setCurrentType( ctorValue != null ? ctorValue.getClass() : clazz );
@@ -348,7 +346,7 @@
 
         context.remove( "_ctorClass" );
 
-        return result;
+        return result.toString();
     }
 
     public String toSetSourceString( OgnlContext context, Object target )
diff --git a/src/main/java/org/apache/commons/ognl/ASTList.java b/src/main/java/org/apache/commons/ognl/ASTList.java
index 9709c5d..f481c6c 100644
--- a/src/main/java/org/apache/commons/ognl/ASTList.java
+++ b/src/main/java/org/apache/commons/ognl/ASTList.java
@@ -66,14 +66,8 @@
 
     public String toGetSourceString( OgnlContext context, Object target )
     {
-        String result = "";
-        boolean array = false;
-
-        if ( parent != null && ASTCtor.class.isInstance( parent ) && ( (ASTCtor) parent ).isArray() )
-        {
-
-            array = true;
-        }
+        StringBuilder result = new StringBuilder();
+        boolean array = ASTCtor.class.isInstance(parent) && ((ASTCtor) parent).isArray();
 
         context.setCurrentType( List.class );
         context.setCurrentAccessor( List.class );
@@ -84,10 +78,10 @@
             {
                 return "java.util.Arrays.asList( new Object[0])";
             }
-            result += "java.util.Arrays.asList( new Object[] ";
+            result.append("java.util.Arrays.asList( new Object[] ");
         }
 
-        result += "{ ";
+        result.append("{ ");
 
         try
         {
@@ -96,7 +90,7 @@
             {
                 if ( i > 0 )
                 {
-                    result = result + ", ";
+                    result.append(", ");
                 }
 
                 Class prevType = context.getCurrentType();
@@ -194,7 +188,7 @@
                 {
                     value = "null";
                 }
-                result += value;
+                result.append(value);
             }
 
         }
@@ -206,13 +200,13 @@
         context.setCurrentType( List.class );
         context.setCurrentAccessor( List.class );
 
-        result += "}";
+        result.append("}");
 
         if ( !array )
         {
-            result += ")";
+            result.append(")");
         }
-        return result;
+        return result.toString();
     }
 
     public String toSetSourceString( OgnlContext context, Object target )
diff --git a/src/main/java/org/apache/commons/ognl/ASTMethod.java b/src/main/java/org/apache/commons/ognl/ASTMethod.java
index 4b369aa..80d33b3 100644
--- a/src/main/java/org/apache/commons/ognl/ASTMethod.java
+++ b/src/main/java/org/apache/commons/ognl/ASTMethod.java
@@ -274,7 +274,7 @@
         }
 
         String post = "";
-        String result = "." + method.getName() + "(";
+        StringBuilder result = new StringBuilder("." + method.getName() + "(");
 
         if ( method.getReturnType() != void.class && method.getReturnType().isPrimitive() && ( parent == null
             || !ASTTest.class.isInstance( parent ) ) )
@@ -310,7 +310,7 @@
                 {
                     if ( i > 0 )
                     {
-                        result += ", ";
+                        result.append(", ");
                     }
 
                     Class prevType = context.getCurrentType();
@@ -373,7 +373,7 @@
                             ASTMethodUtil.getParmString( context, parms[i], parmString, child, valueClass, ".class)" );
                     }
 
-                    result += parmString;
+                    result.append(parmString);
                 }
 
                 if ( prevCast != null )
diff --git a/src/main/java/org/apache/commons/ognl/ASTStaticMethod.java b/src/main/java/org/apache/commons/ognl/ASTStaticMethod.java
index c41a8bb..586bc33 100644
--- a/src/main/java/org/apache/commons/ognl/ASTStaticMethod.java
+++ b/src/main/java/org/apache/commons/ognl/ASTStaticMethod.java
@@ -84,7 +84,7 @@
 
     public String toGetSourceString( OgnlContext context, Object target )
     {
-        String result = className + "#" + methodName + "(";
+        StringBuilder result = new StringBuilder(className + "#" + methodName + "(");
 
         try
         {
@@ -113,7 +113,7 @@
                 {
                     if ( i > 0 )
                     {
-                        result = result + ", ";
+                        result.append(", ");
                     }
 
                     Class prevType = context.getCurrentType();
@@ -162,11 +162,11 @@
                         }
                     }
 
-                    result += parmString;
+                    result.append(parmString);
                 }
             }
 
-            result += ")";
+            result.append(")");
 
             try
             {
@@ -192,7 +192,7 @@
             throw OgnlOps.castToRuntime( t );
         }
 
-        return result;
+        return result.toString();
     }
 
     public String toSetSourceString( OgnlContext context, Object target )
diff --git a/src/main/java/org/apache/commons/ognl/Evaluation.java b/src/main/java/org/apache/commons/ognl/Evaluation.java
index 7b1b121..e348dac 100644
--- a/src/main/java/org/apache/commons/ognl/Evaluation.java
+++ b/src/main/java/org/apache/commons/ognl/Evaluation.java
@@ -277,33 +277,32 @@
      */
     public String toString( boolean compact, boolean showChildren, String depth )
     {
-        String stringResult;
+        StringBuilder stringResult;
 
         if ( compact )
         {
-            stringResult = depth + "<" + node.getClass().getName() + " " + System.identityHashCode( this ) + ">";
+            stringResult = new StringBuilder(depth + "<" + node.getClass().getName() + " " + System.identityHashCode(this) + ">");
         }
         else
         {
             String ss = ( source != null ) ? source.getClass().getName() : "null", rs =
                 ( result != null ) ? result.getClass().getName() : "null";
 
-            stringResult =
-                depth + "<" + node.getClass().getName() + ": [" + ( setOperation ? "set" : "get" ) + "] source = " + ss
-                    + ", result = " + result + " [" + rs + "]>";
+            stringResult = new StringBuilder(depth + "<" + node.getClass().getName() + ": [" + (setOperation ? "set" : "get") + "] source = " + ss
+                    + ", result = " + result + " [" + rs + "]>");
         }
         if ( showChildren )
         {
             Evaluation child = firstChild;
 
-            stringResult += "\n";
+            stringResult.append("\n");
             while ( child != null )
             {
-                stringResult += child.toString( compact, depth + "  " );
+                stringResult.append(child.toString(compact, depth + "  "));
                 child = child.next;
             }
         }
-        return stringResult;
+        return stringResult.toString();
     }
 
     /**
