Index: /Users/osi/java/src/mina-trunk/core/src/main/java/org/apache/mina/common/ByteBuffer.java
===================================================================
--- /Users/osi/java/src/mina-trunk/core/src/main/java/org/apache/mina/common/ByteBuffer.java	(revision 383230)
+++ /Users/osi/java/src/mina-trunk/core/src/main/java/org/apache/mina/common/ByteBuffer.java	(working copy)
@@ -1149,6 +1149,8 @@
 
         encoder.reset();
 
+		  int expandedState = 0; 
+
         for (;;) {
             CoderResult cr;
             if( in.hasRemaining() )
@@ -1166,8 +1168,23 @@
             }
             if( cr.isOverflow() && isAutoExpand() )
             {
-                autoExpand( expectedLength );
-                continue;
+					switch( expandedState ) {
+						case 0:
+							autoExpand( in.remaining() * (int)Math.ceil( encoder.averageBytesPerChar() ) );
+							++expandedState;
+							break;
+						case 1:
+							autoExpand( in.remaining() * (int)Math.ceil( encoder.maxBytesPerChar() ) );
+							++expandedState;
+							break;
+						default:
+							throw new RuntimeException( "Expanded by " +
+														in.remaining() * (int)Math.ceil( encoder.maxBytesPerChar() ) +
+														" but that wasn't enough for '" + val + "'");
+
+					}
+					
+					continue;
             }
             cr.throwException();
         }
