Index: /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/FCKeditor.java
===================================================================
--- /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/FCKeditor.java	(revision 2576)
+++ /FCKeditor.Java/trunk/java-core/src/main/java/net/fckeditor/FCKeditor.java	(revision 2577)
@@ -204,17 +204,36 @@
 	 */
 	private String escapeXml(String str) {
-		if (Utils.isEmpty(str))
-			return str;
-
-		/*
-		 * TODO Strings are inefficient. It should be done like in Commons Lang
-		 * 2.4 StringUtils#replaceEach(String, String[], String[])
-		 */
-		str = str.replaceAll("&", "&amp;");
-		str = str.replaceAll("<", "&lt;");
-		str = str.replaceAll(">", "&gt;");
-		str = str.replaceAll("\"", "&quot;");
-		str = str.replaceAll("'", "&#39;");
-		return str;
+
+		StringBuffer sb = new StringBuffer();
+
+		int len = str.length();
+		char c;
+		
+		for (int i = 0; i < len; i++) {
+			
+			c = str.charAt(i);
+			switch (c) {
+			case '&':
+				sb.append("&amp;");
+				break;
+			case '<':
+				sb.append("&lt;");
+				break;
+			case '>':
+				sb.append("&gt;");
+				break;
+			case '"':
+				sb.append("&quot;");
+				break;
+			case '\'':
+				sb.append("&#39;");
+				break;
+			default:
+				sb.append(c);
+				break;
+			}
+		}
+
+		return sb.toString();
 	}
 
Index: /FCKeditor.Java/trunk/src/changes/changes.xml
===================================================================
--- /FCKeditor.Java/trunk/src/changes/changes.xml	(revision 2576)
+++ /FCKeditor.Java/trunk/src/changes/changes.xml	(revision 2577)
@@ -16,5 +16,5 @@
 			<action type="update" issue="2583">ConnectorServlet#init fails on some application servers</action>
 			<action type="add" issue="2592">Add more logging statements</action>
-			
+			<action type="update" issue="2605">Move escapeXml method to a StringBuffer</action>
 			
 		</release>
