diff --git a/src/xercesc/dom/impl/DOMLSSerializerImpl.cpp b/src/xercesc/dom/impl/DOMLSSerializerImpl.cpp
index 8b5725df48a4817299aa7e1256b6a1eb29537a9f..2ca0eacd4874bcdbe77d70c315773c1429e523ac 100644
--- a/src/xercesc/dom/impl/DOMLSSerializerImpl.cpp
+++ b/src/xercesc/dom/impl/DOMLSSerializerImpl.cpp
@@ -1683,7 +1683,8 @@ void DOMLSSerializerImpl::processBOM()
     else if ((XMLString::compareIStringASCII(fEncodingUsed, XMLUni::fgUCS4EncodingString)  == 0) ||
              (XMLString::compareIStringASCII(fEncodingUsed, XMLUni::fgUCS4EncodingString2) == 0) ||
              (XMLString::compareIStringASCII(fEncodingUsed, XMLUni::fgUCS4EncodingString3) == 0) ||
-             (XMLString::compareIStringASCII(fEncodingUsed, XMLUni::fgUCS4EncodingString4) == 0)  )
+             (XMLString::compareIStringASCII(fEncodingUsed, XMLUni::fgUCS4EncodingString4) == 0) ||
+             (XMLString::compareIStringASCII(fEncodingUsed, XMLUni::fgUCS4EncodingString5) == 0)  )
     {
 		if (XMLPlatformUtils::fgXMLChBigEndian)
 	        fFormatter->writeBOM(BOM_ucs4be, 4);
diff --git a/src/xercesc/internal/XMLReader.cpp b/src/xercesc/internal/XMLReader.cpp
index bf4c0ea51621a4248d28442acc5c2cab0d4eecd8..63805b2e973ee9075c9dfe9790de73168fc51db1 100644
--- a/src/xercesc/internal/XMLReader.cpp
+++ b/src/xercesc/internal/XMLReader.cpp
@@ -1270,13 +1270,13 @@ bool XMLReader::setEncoding(const XMLCh* const newEncoding)
     //  are already in one of the endian versions of those encodings,
     //  then just keep it and go on. Otherwise, its not valid.
     //
-    if (!XMLString::compareString(inputEncoding, XMLUni::fgUTF16EncodingString)
-    ||  !XMLString::compareString(inputEncoding, XMLUni::fgUTF16EncodingString2)
-    ||  !XMLString::compareString(inputEncoding, XMLUni::fgUTF16EncodingString3)
-    ||  !XMLString::compareString(inputEncoding, XMLUni::fgUTF16EncodingString4)
-    ||  !XMLString::compareString(inputEncoding, XMLUni::fgUTF16EncodingString5)
-    ||  !XMLString::compareString(inputEncoding, XMLUni::fgUTF16EncodingString6)
-    ||  !XMLString::compareString(inputEncoding, XMLUni::fgUTF16EncodingString7))
+    if (XMLString::equals(inputEncoding, XMLUni::fgUTF16EncodingString)
+    ||  XMLString::equals(inputEncoding, XMLUni::fgUTF16EncodingString2)
+    ||  XMLString::equals(inputEncoding, XMLUni::fgUTF16EncodingString3)
+    ||  XMLString::equals(inputEncoding, XMLUni::fgUTF16EncodingString4)
+    ||  XMLString::equals(inputEncoding, XMLUni::fgUTF16EncodingString5)
+    ||  XMLString::equals(inputEncoding, XMLUni::fgUTF16EncodingString6)
+    ||  XMLString::equals(inputEncoding, XMLUni::fgUTF16EncodingString7))
     {
         fMemoryManager->deallocate(inputEncoding);
 
@@ -1300,10 +1300,11 @@ bool XMLReader::setEncoding(const XMLCh* const newEncoding)
             fEncodingStr = XMLString::replicate(XMLUni::fgUTF16BEncodingString, fMemoryManager);
         }
     }
-    else if (!XMLString::compareString(inputEncoding, XMLUni::fgUCS4EncodingString)
-         ||  !XMLString::compareString(inputEncoding, XMLUni::fgUCS4EncodingString2)
-         ||  !XMLString::compareString(inputEncoding, XMLUni::fgUCS4EncodingString3)
-         ||  !XMLString::compareString(inputEncoding, XMLUni::fgUCS4EncodingString4))
+    else if (XMLString::equals(inputEncoding, XMLUni::fgUCS4EncodingString)
+         ||  XMLString::equals(inputEncoding, XMLUni::fgUCS4EncodingString2)
+         ||  XMLString::equals(inputEncoding, XMLUni::fgUCS4EncodingString3)
+         ||  XMLString::equals(inputEncoding, XMLUni::fgUCS4EncodingString4)
+         ||  XMLString::equals(inputEncoding, XMLUni::fgUCS4EncodingString5))
     {
         fMemoryManager->deallocate(inputEncoding);
 
diff --git a/src/xercesc/util/TransService.cpp b/src/xercesc/util/TransService.cpp
index 69d49c7825e09d0c2a7ad422600ddf4c2de1da5e..c53d83b3b1e26235da718a35bc85b5daebf55bcc 100644
--- a/src/xercesc/util/TransService.cpp
+++ b/src/xercesc/util/TransService.cpp
@@ -82,11 +82,11 @@ XMLTransService::~XMLTransService()
 }
 
 // ---------------------------------------------------------------------------
-//	Allow user specific encodings to be added to the mappings table.
-//	Should be called after platform init
+//    Allow user specific encodings to be added to the mappings table.
+//    Should be called after platform init
 // ---------------------------------------------------------------------------
 void XMLTransService::addEncoding(const XMLCh* const encoding,
-								  ENameMap* const ownMapping)
+                                  ENameMap* const ownMapping)
 {
     gMappings->put((void *) encoding, ownMapping);
 }
@@ -142,7 +142,7 @@ XMLTransService::makeNewTranscoderFor(  const   XMLCh* const            encoding
 
     // If we found it, then call the factory method for it
     if (ourMapping)
-	{
+    {
        XMLTranscoder* temp = ourMapping->makeNew(blockSize, manager);
        resValue = temp ? XMLTransService::Ok : XMLTransService::InternalFailure;
        return temp;
@@ -181,7 +181,7 @@ XMLTransService::makeNewTranscoderFor(  XMLRecognizer::Encodings        encoding
     ENameMap* ourMapping = gMappingsRecognizer->elementAt(encodingEnum);
 
     // If we found it, then call the factory method for it
-    if (ourMapping)	{
+    if (ourMapping)    {
        XMLTranscoder* temp = ourMapping->makeNew(blockSize, manager);
        resValue = temp ? XMLTransService::Ok : XMLTransService::InternalFailure;
        return temp;
@@ -260,7 +260,7 @@ void XMLTransService::initTransService()
     gMappingsRecognizer->setElementAt(new EEndianNameMapFor<XMLUTF16Transcoder>(XMLUni::fgUTF16LEncodingString, swapped), XMLRecognizer::UTF_16L);
     gMappings->put
     (
-		(void*)XMLUni::fgUTF16LEncodingString,
+        (void*)XMLUni::fgUTF16LEncodingString,
         new EEndianNameMapFor<XMLUTF16Transcoder>
         (
             XMLUni::fgUTF16LEncodingString
@@ -270,7 +270,7 @@ void XMLTransService::initTransService()
 
     gMappings->put
     (
-		(void*)XMLUni::fgUTF16LEncodingString2,
+        (void*)XMLUni::fgUTF16LEncodingString2,
         new EEndianNameMapFor<XMLUTF16Transcoder>
         (
             XMLUni::fgUTF16LEncodingString2
@@ -281,7 +281,7 @@ void XMLTransService::initTransService()
     gMappingsRecognizer->setElementAt(new EEndianNameMapFor<XMLUCS4Transcoder>(XMLUni::fgUCS4LEncodingString, swapped), XMLRecognizer::UCS_4L);
     gMappings->put
     (
-		(void*)XMLUni::fgUCS4LEncodingString,
+        (void*)XMLUni::fgUCS4LEncodingString,
         new EEndianNameMapFor<XMLUCS4Transcoder>
         (
             XMLUni::fgUCS4LEncodingString
@@ -291,7 +291,7 @@ void XMLTransService::initTransService()
 
     gMappings->put
     (
-		(void*)XMLUni::fgUCS4LEncodingString2,
+        (void*)XMLUni::fgUCS4LEncodingString2,
         new EEndianNameMapFor<XMLUCS4Transcoder>
         (
             XMLUni::fgUCS4LEncodingString2
@@ -307,7 +307,7 @@ void XMLTransService::initTransService()
     gMappingsRecognizer->setElementAt(new EEndianNameMapFor<XMLUTF16Transcoder>(XMLUni::fgUTF16BEncodingString, swapped), XMLRecognizer::UTF_16B);
     gMappings->put
     (
-		(void*)XMLUni::fgUTF16BEncodingString,
+        (void*)XMLUni::fgUTF16BEncodingString,
         new EEndianNameMapFor<XMLUTF16Transcoder>
         (
             XMLUni::fgUTF16BEncodingString
@@ -317,7 +317,7 @@ void XMLTransService::initTransService()
 
     gMappings->put
     (
-		(void*)XMLUni::fgUTF16BEncodingString2,
+        (void*)XMLUni::fgUTF16BEncodingString2,
         new EEndianNameMapFor<XMLUTF16Transcoder>
         (
             XMLUni::fgUTF16BEncodingString2
@@ -328,7 +328,7 @@ void XMLTransService::initTransService()
     gMappingsRecognizer->setElementAt(new EEndianNameMapFor<XMLUCS4Transcoder>(XMLUni::fgUCS4BEncodingString, swapped), XMLRecognizer::UCS_4B);
     gMappings->put
     (
-		(void*)XMLUni::fgUCS4BEncodingString,
+        (void*)XMLUni::fgUCS4BEncodingString,
         new EEndianNameMapFor<XMLUCS4Transcoder>
         (
             XMLUni::fgUCS4BEncodingString
@@ -338,7 +338,7 @@ void XMLTransService::initTransService()
 
     gMappings->put
     (
-		(void*)XMLUni::fgUCS4BEncodingString2,
+        (void*)XMLUni::fgUCS4BEncodingString2,
         new EEndianNameMapFor<XMLUCS4Transcoder>
         (
             XMLUni::fgUCS4BEncodingString2
@@ -353,7 +353,7 @@ void XMLTransService::initTransService()
 
     gMappings->put
     (
-		(void*)XMLUni::fgUTF16EncodingString,
+        (void*)XMLUni::fgUTF16EncodingString,
         new EEndianNameMapFor<XMLUTF16Transcoder>
         (
             XMLUni::fgUTF16EncodingString
@@ -362,7 +362,7 @@ void XMLTransService::initTransService()
     );
     gMappings->put
     (
-		(void*)XMLUni::fgUTF16EncodingString2,
+        (void*)XMLUni::fgUTF16EncodingString2,
         new EEndianNameMapFor<XMLUTF16Transcoder>
         (
             XMLUni::fgUTF16EncodingString2
@@ -371,7 +371,7 @@ void XMLTransService::initTransService()
     );
     gMappings->put
     (
-		(void*)XMLUni::fgUTF16EncodingString3,
+        (void*)XMLUni::fgUTF16EncodingString3,
         new EEndianNameMapFor<XMLUTF16Transcoder>
         (
             XMLUni::fgUTF16EncodingString3
@@ -380,7 +380,7 @@ void XMLTransService::initTransService()
     );
     gMappings->put
     (
-		(void*)XMLUni::fgUTF16EncodingString4,
+        (void*)XMLUni::fgUTF16EncodingString4,
         new EEndianNameMapFor<XMLUTF16Transcoder>
         (
             XMLUni::fgUTF16EncodingString4
@@ -389,7 +389,7 @@ void XMLTransService::initTransService()
     );
     gMappings->put
     (
-		(void*)XMLUni::fgUTF16EncodingString5,
+        (void*)XMLUni::fgUTF16EncodingString5,
         new EEndianNameMapFor<XMLUTF16Transcoder>
         (
             XMLUni::fgUTF16EncodingString5
@@ -398,7 +398,7 @@ void XMLTransService::initTransService()
     );
     gMappings->put
     (
-		(void*)XMLUni::fgUTF16EncodingString6,
+        (void*)XMLUni::fgUTF16EncodingString6,
         new EEndianNameMapFor<XMLUTF16Transcoder>
         (
             XMLUni::fgUTF16EncodingString6
@@ -407,7 +407,7 @@ void XMLTransService::initTransService()
     );
     gMappings->put
     (
-		(void*)XMLUni::fgUTF16EncodingString7,
+        (void*)XMLUni::fgUTF16EncodingString7,
         new EEndianNameMapFor<XMLUTF16Transcoder>
         (
             XMLUni::fgUTF16EncodingString7
@@ -416,7 +416,7 @@ void XMLTransService::initTransService()
     );
     gMappings->put
     (
-		(void*)XMLUni::fgUCS4EncodingString,
+        (void*)XMLUni::fgUCS4EncodingString,
         new EEndianNameMapFor<XMLUCS4Transcoder>
         (
             XMLUni::fgUCS4EncodingString
@@ -425,7 +425,7 @@ void XMLTransService::initTransService()
     );
     gMappings->put
     (
-		(void*)XMLUni::fgUCS4EncodingString2,
+        (void*)XMLUni::fgUCS4EncodingString2,
         new EEndianNameMapFor<XMLUCS4Transcoder>
         (
             XMLUni::fgUCS4EncodingString2
@@ -434,7 +434,7 @@ void XMLTransService::initTransService()
     );
     gMappings->put
     (
-		(void*)XMLUni::fgUCS4EncodingString3,
+        (void*)XMLUni::fgUCS4EncodingString3,
         new EEndianNameMapFor<XMLUCS4Transcoder>
         (
             XMLUni::fgUCS4EncodingString3
@@ -443,13 +443,22 @@ void XMLTransService::initTransService()
     );
     gMappings->put
     (
-		(void*)XMLUni::fgUCS4EncodingString4,
+        (void*)XMLUni::fgUCS4EncodingString4,
         new EEndianNameMapFor<XMLUCS4Transcoder>
         (
             XMLUni::fgUCS4EncodingString4
             , false
         )
     );
+    gMappings->put
+    (
+        (void*)XMLUni::fgUCS4EncodingString5,
+        new EEndianNameMapFor<XMLUCS4Transcoder>
+        (
+            XMLUni::fgUCS4EncodingString5
+            , false
+        )
+    );
 
     //
     //  Add in our mappings for IBM037, and the one alias we support for
diff --git a/src/xercesc/util/XMLUni.cpp b/src/xercesc/util/XMLUni.cpp
index dcbf0a440321bc9f18db29286bd329b8e5a84032..d1cb40efd8e25868ec6b7e611b203aad3458107c 100644
--- a/src/xercesc/util/XMLUni.cpp
+++ b/src/xercesc/util/XMLUni.cpp
@@ -361,6 +361,12 @@ const XMLCh XMLUni::fgUCS4EncodingString4[] =
     chLatin_U, chLatin_T, chLatin_F, chDash, chDigit_3, chDigit_2, chNull
 };
 
+const XMLCh XMLUni::fgUCS4EncodingString5[] =
+{
+    chLatin_I, chLatin_S, chLatin_O, chDash, chDigit_1, chDigit_0, chDigit_6, chDigit_4, chDigit_6, 
+    chDash, chLatin_U, chLatin_C, chLatin_S, chDash, chDigit_4, chNull
+};
+
 const XMLCh XMLUni::fgUCS4BEncodingString[] =
 {
     chLatin_U, chLatin_C, chLatin_S, chDash, chDigit_4, chSpace, chOpenParen, chLatin_B, chLatin_E, chCloseParen, chNull
diff --git a/src/xercesc/util/XMLUni.hpp b/src/xercesc/util/XMLUni.hpp
index 3c497e5f4e52d88589104e975aab5a91ab8788d6..355d5a64960199009afb28872aef24ea8615d15d 100644
--- a/src/xercesc/util/XMLUni.hpp
+++ b/src/xercesc/util/XMLUni.hpp
@@ -106,6 +106,7 @@ public :
     static const XMLCh fgUCS4EncodingString2[];
     static const XMLCh fgUCS4EncodingString3[];
     static const XMLCh fgUCS4EncodingString4[];
+    static const XMLCh fgUCS4EncodingString5[];
     static const XMLCh fgUCS4BEncodingString[];
     static const XMLCh fgUCS4BEncodingString2[];
     static const XMLCh fgUCS4LEncodingString[];