diff --git a/src/xercesc/util/Transcoders/Uniconv390/XMLUTF8Transcoder390.cpp b/src/xercesc/util/Transcoders/Uniconv390/XMLUTF8Transcoder390.cpp
index 1a46888101703675874fd8a6bf82ce2f5ba11147..2260bfbe0d984a89c1dedddd111807a3646e9337 100644
--- a/src/xercesc/util/Transcoders/Uniconv390/XMLUTF8Transcoder390.cpp
+++ b/src/xercesc/util/Transcoders/Uniconv390/XMLUTF8Transcoder390.cpp
@@ -16,6 +16,9 @@
 
 /*
  * $Log$
+ * Revision 1.6  2005/02/23 15:57:48  cargilld
+ * Copy performance change made to XMLUTF8Transcoder.cpp to the 390 version.
+ *
  * Revision 1.5  2004/09/08 13:56:46  peiyongz
  * Apache License Version 2.0
  *
@@ -226,9 +229,18 @@ XMLUTF8Transcoder390::transcodeFrom(const  XMLByte* const          srcData
         
         if (*srcPtr <= 127)
         {
-            *outPtr++ = XMLCh(*srcPtr++);
-            *sizePtr++ = 1;
-            continue;
+            // Handle ASCII in groups instead of single character at a time.
+            const XMLByte* srcPtr_save = srcPtr;
+            do
+            {
+                *outPtr++ = XMLCh(*srcPtr++);
+            } while (*srcPtr <= 127    &&
+                      srcPtr != srcEnd &&
+                      outPtr != outEnd );
+            memset(sizePtr,1,srcPtr - srcPtr_save);
+            sizePtr += srcPtr - srcPtr_save;
+            if (srcPtr == srcEnd || outPtr == outEnd)
+                break;
         }
         
         // See how many trailing src bytes this sequence is going to require