diff --git a/src/xercesc/dom/impl/DOMDeepNodeListImpl.cpp b/src/xercesc/dom/impl/DOMDeepNodeListImpl.cpp
index 2efb62054b9d99ec8505101c0cabb2e2fc6a28aa..6adc58a76dd255156e9f17d3fd3d4d7d5e67e94c 100644
--- a/src/xercesc/dom/impl/DOMDeepNodeListImpl.cpp
+++ b/src/xercesc/dom/impl/DOMDeepNodeListImpl.cpp
@@ -79,7 +79,7 @@ DOMDeepNodeListImpl::DOMDeepNodeListImpl(const DOMNode *rootNode,
     , fMatchURIandTagname(false)
 {
     fTagName = ((DOMDocumentImpl *)(castToNodeImpl(rootNode)->getOwnerDocument()))->getPooledString(tagName);
-    fMatchAll = (XMLString::compareString(fTagName, kAstr) == 0);
+    fMatchAll = XMLString::equals(fTagName, kAstr);
 }
 
 
@@ -95,8 +95,8 @@ DOMDeepNodeListImpl::DOMDeepNodeListImpl(const DOMNode *rootNode,
     , fMatchURIandTagname(true)
 {
     fTagName = ((DOMDocumentImpl *)(castToNodeImpl(rootNode)->getOwnerDocument()))->getPooledString(localName);
-    fMatchAll = (XMLString::compareString(fTagName, kAstr) == 0);
-    fMatchAllURI = (XMLString::compareString(namespaceURI, kAstr) == 0);
+    fMatchAll = XMLString::equals(fTagName, kAstr);
+    fMatchAllURI = XMLString::equals(namespaceURI, kAstr);
     fNamespaceURI = ((DOMDocumentImpl *)(castToNodeImpl(rootNode)->getOwnerDocument()))->getPooledString(namespaceURI);
 }
 
@@ -231,18 +231,15 @@ DOMNode *DOMDeepNodeListImpl::nextMatchingElementAfter(DOMNode *current)
 
             if (!fMatchURIandTagname) {        //DOM Level 1
                 if (fMatchAll ||
-                    (XMLString::compareString(currElement->getTagName(),
-                                              fTagName) == 0))
+                    XMLString::equals(currElement->getTagName(), fTagName))
                     return current;
             } else {        //DOM Level 2
                 if (!fMatchAllURI &&
-                    (XMLString::compareString(current -> getNamespaceURI(),
-                                              fNamespaceURI) != 0))
+                    !XMLString::equals(current->getNamespaceURI(), fNamespaceURI))
                     continue;
 
                 if (fMatchAll ||
-                    (XMLString::compareString(current -> getLocalName(),
-                                              fTagName) == 0))
+                    XMLString::equals(current->getLocalName(), fTagName))
                     return current;
             }
         }
diff --git a/src/xercesc/dom/impl/DOMDeepNodeListPool.c b/src/xercesc/dom/impl/DOMDeepNodeListPool.c
index adf4607867c1719f7a9095ab74c93ebaacac79ca..da266cc45ab9c89161a98c5d52aebffbf8398697 100644
--- a/src/xercesc/dom/impl/DOMDeepNodeListPool.c
+++ b/src/xercesc/dom/impl/DOMDeepNodeListPool.c
@@ -359,7 +359,7 @@ findBucketElem(const void* const key1, const XMLCh* const key2, const XMLCh* con
     {
         //key2 and key3 are XMLCh*, compareString takes null pointer vs zero len string the same
         //but we need them to be treated as different keys in this case
-        if (fHash->equals(key1, curElem->fKey1) && (!XMLString::compareString(key2, curElem->fKey2)) && (!XMLString::compareString(key3, curElem->fKey3))) {
+        if (fHash->equals(key1, curElem->fKey1) && (XMLString::equals(key2, curElem->fKey2)) && (XMLString::equals(key3, curElem->fKey3))) {
             if (!key2 || !curElem->fKey2) {
                 if (key2 || curElem->fKey2) {
                     curElem = curElem->fNext;
@@ -395,7 +395,7 @@ findBucketElem(const void* const key1, const XMLCh* const key2, const XMLCh* con
     {
         //key2 and key3 are XMLCh*, compareString takes null pointer vs zero len string the same
         //but we need them to be treated as different keys in this case
-        if (fHash->equals(key1, curElem->fKey1) && (!XMLString::compareString(key2, curElem->fKey2)) && (!XMLString::compareString(key3, curElem->fKey3))) {
+        if (fHash->equals(key1, curElem->fKey1) && (XMLString::equals(key2, curElem->fKey2)) && (XMLString::equals(key3, curElem->fKey3))) {
             if (!key2 || !curElem->fKey2) {
                 if (key2 || curElem->fKey2) {
                     curElem = curElem->fNext;
diff --git a/src/xercesc/dom/impl/DOMDocumentTypeImpl.cpp b/src/xercesc/dom/impl/DOMDocumentTypeImpl.cpp
index 386d6290185729b3516079bd6ad800563fe97893..97280e2d222fea767c4b3668954d851bb44434b5 100644
--- a/src/xercesc/dom/impl/DOMDocumentTypeImpl.cpp
+++ b/src/xercesc/dom/impl/DOMDocumentTypeImpl.cpp
@@ -495,7 +495,7 @@ bool DOMDocumentTypeImpl::isEqualNode(const DOMNode* arg)
             return false;
         }
     }
-    else if (XMLString::compareString(getPublicId(), argDT->getPublicId())) {
+    else if (!XMLString::equals(getPublicId(), argDT->getPublicId())) {
         return false;
     }
 
@@ -504,7 +504,7 @@ bool DOMDocumentTypeImpl::isEqualNode(const DOMNode* arg)
             return false;
         }
     }
-    else if (XMLString::compareString(getSystemId(), argDT->getSystemId())) {
+    else if (!XMLString::equals(getSystemId(), argDT->getSystemId())) {
         return false;
     }
 
@@ -513,7 +513,7 @@ bool DOMDocumentTypeImpl::isEqualNode(const DOMNode* arg)
             return false;
         }
     }
-    else if (XMLString::compareString(getInternalSubset(), argDT->getInternalSubset())) {
+    else if (!XMLString::equals(getInternalSubset(), argDT->getInternalSubset())) {
         return false;
     }
 
diff --git a/src/xercesc/dom/impl/DOMElementImpl.cpp b/src/xercesc/dom/impl/DOMElementImpl.cpp
index 24684a1d0b6d4441367633bc4be96162eb0dd42b..f5bb3eb139a95090afb7a6deb2e6334398d13b2a 100644
--- a/src/xercesc/dom/impl/DOMElementImpl.cpp
+++ b/src/xercesc/dom/impl/DOMElementImpl.cpp
@@ -478,7 +478,7 @@ const XMLCh* DOMElementImpl::getBaseURI() const
         DOMNode* attrNode = fAttributes->getNamedItem(xmlBaseString);
         if (attrNode) {
             const XMLCh* uri =  attrNode->getNodeValue();
-            if (XMLString::stringLen(uri) != 0 ) {// attribute value is always empty string
+            if (uri && *uri) {// attribute value is always empty string
                 try {
                     XMLUri temp(baseURI);
                     XMLUri temp2(&temp, uri);
diff --git a/src/xercesc/dom/impl/DOMImplementationImpl.cpp b/src/xercesc/dom/impl/DOMImplementationImpl.cpp
index a1ba3a1a34609c68c6ecc8554e98a0f78f1d5d6f..076f3288680734fd87e1c57d7a8b9cd9e49d1fbc 100644
--- a/src/xercesc/dom/impl/DOMImplementationImpl.cpp
+++ b/src/xercesc/dom/impl/DOMImplementationImpl.cpp
@@ -148,10 +148,10 @@ bool  DOMImplementationImpl::hasFeature(const  XMLCh * feature,  const  XMLCh *
     if (!feature)
         return false;
 
-    bool anyVersion = (version == 0 || XMLString::stringLen(version) == 0);
-    bool version1_0 = (XMLString::compareString(version, g1_0) == 0);
-    bool version2_0 = (XMLString::compareString(version, g2_0) == 0);
-    bool version3_0 = (XMLString::compareString(version, g3_0) == 0);
+    bool anyVersion = (version == 0 || !*version);
+    bool version1_0 = XMLString::equals(version, g1_0);
+    bool version2_0 = XMLString::equals(version, g2_0);
+    bool version3_0 = XMLString::equals(version, g3_0);
 
     // Currently, we support only XML Level 1 version 1.0
     if (XMLString::compareIString(feature, gXML) == 0
diff --git a/src/xercesc/dom/impl/DOMNamedNodeMapImpl.cpp b/src/xercesc/dom/impl/DOMNamedNodeMapImpl.cpp
index 7931946e12ba27d4941af739bb24edaefb4b4601..cce5a9c91f52e271e6896a44233f5e7b3bcad76c 100644
--- a/src/xercesc/dom/impl/DOMNamedNodeMapImpl.cpp
+++ b/src/xercesc/dom/impl/DOMNamedNodeMapImpl.cpp
@@ -315,12 +315,12 @@ int DOMNamedNodeMapImpl::findNamePoint(const XMLCh *namespaceURI,
         DOMNode *node = fNodes -> elementAt(i);
         const XMLCh * nNamespaceURI = node->getNamespaceURI();
         const XMLCh * nLocalName = node->getLocalName();
-        if (XMLString::compareString(nNamespaceURI, namespaceURI))    //URI not match
+        if (!XMLString::equals(nNamespaceURI, namespaceURI))    //URI not match
             continue;
         else {
-            if (XMLString::compareString(localName, nLocalName) == 0
+            if (XMLString::equals(localName, nLocalName)
                 ||
-                (nLocalName == 0 && (XMLString::compareString(localName, node->getNodeName()) == 0)))
+                (nLocalName == 0 && XMLString::equals(localName, node->getNodeName())))
                 return i;
         }
     }
diff --git a/src/xercesc/dom/impl/DOMNodeIDMap.cpp b/src/xercesc/dom/impl/DOMNodeIDMap.cpp
index 52a8a44375972cf509a5dbfa27a7e03396611e69..0bfe4e8af907d10fb22b317573ea97772025abdb 100644
--- a/src/xercesc/dom/impl/DOMNodeIDMap.cpp
+++ b/src/xercesc/dom/impl/DOMNodeIDMap.cpp
@@ -216,7 +216,7 @@ DOMAttr *DOMNodeIDMap::find(const XMLCh *id)
         }
 
 
-        if ((tableSlot != (DOMAttr *)-1) && XMLString::compareString(tableSlot->getValue(), id) == 0)
+        if ((tableSlot != (DOMAttr *)-1) && XMLString::equals(tableSlot->getValue(), id))
             return tableSlot;
 
         currentHash += initalHash;  // rehash
diff --git a/src/xercesc/dom/impl/DOMStringPool.cpp b/src/xercesc/dom/impl/DOMStringPool.cpp
index fbc81785ec2384523cfad699921aa128df8c0457..e5ac23c3ab8c9a5239d2f0f4727cb4976ae32fbf 100644
--- a/src/xercesc/dom/impl/DOMStringPool.cpp
+++ b/src/xercesc/dom/impl/DOMStringPool.cpp
@@ -129,7 +129,7 @@ const XMLCh *DOMStringPool::getPooledString(const XMLCh *in)
     pspe = &fHashTable[inHash];
     while (*pspe != 0)
     {
-        if (XMLString::compareString((*pspe)->fString, in) == 0)
+        if (XMLString::equals((*pspe)->fString, in))
             return (*pspe)->fString;
         pspe = &((*pspe)->fNext);
     }
diff --git a/src/xercesc/internal/ReaderMgr.cpp b/src/xercesc/internal/ReaderMgr.cpp
index 0ff4f112270efb0e3e2978ab8aa47fd153a5e51e..aedf5712d8e2161eb5aef257bdd1f8529c0b443d 100644
--- a/src/xercesc/internal/ReaderMgr.cpp
+++ b/src/xercesc/internal/ReaderMgr.cpp
@@ -845,7 +845,7 @@ bool ReaderMgr::pushReader(         XMLReader* const        reader
             const XMLEntityDecl* curDecl = fEntityStack->elementAt(index);
             if (curDecl)
             {
-                if (!XMLString::compareString(theName, curDecl->getName()))
+                if (XMLString::equals(theName, curDecl->getName()))
                 {
                     // Oops, already there so delete reader and return
                     delete reader;
diff --git a/src/xercesc/internal/VecAttrListImpl.cpp b/src/xercesc/internal/VecAttrListImpl.cpp
index a1c643f6d7eeab35afb6ee2bec9ba6a99d5f25c3..1a8ed419dcdd3302eec4c0c8307789cf9c5da55f 100644
--- a/src/xercesc/internal/VecAttrListImpl.cpp
+++ b/src/xercesc/internal/VecAttrListImpl.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.4  2002/09/24 20:02:20  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
  * Revision 1.3  2002/07/05 20:12:35  tng
  * [Bug 9788] VecAttrListImpl::getValue skips prefix if SAX namespace validation is on.
  *
@@ -165,7 +168,7 @@ const XMLCh* VecAttrListImpl::getType(const XMLCh* const name) const
     {
         const XMLAttr* curElem = fVector->elementAt(index);
 
-        if (!XMLString::compareString(curElem->getQName(), name))
+        if (XMLString::equals(curElem->getQName(), name))
             return XMLAttDef::getAttTypeString(curElem->getType());
     }
     return 0;
@@ -181,7 +184,7 @@ const XMLCh* VecAttrListImpl::getValue(const XMLCh* const name) const
     {
         const XMLAttr* curElem = fVector->elementAt(index);
 
-        if (!XMLString::compareString(curElem->getQName(), name))
+        if (XMLString::equals(curElem->getQName(), name))
             return curElem->getValue();
     }
     return 0;
@@ -201,7 +204,7 @@ const XMLCh* VecAttrListImpl::getValue(const char* const name) const
     {
         const XMLAttr* curElem = fVector->elementAt(index);
 
-        if (!XMLString::compareString(curElem->getQName(), wideName))
+        if (XMLString::equals(curElem->getQName(), wideName))
             return curElem->getValue();
     }
     return 0;
diff --git a/src/xercesc/internal/VecAttributesImpl.cpp b/src/xercesc/internal/VecAttributesImpl.cpp
index b5fb45dc078d05d801b2f559278d1e88c096e81c..3b487ac87114905efc05d1f9296edea1f51936a7 100644
--- a/src/xercesc/internal/VecAttributesImpl.cpp
+++ b/src/xercesc/internal/VecAttributesImpl.cpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:21:58  peiyongz
- * Initial revision
+ * Revision 1.2  2002/09/24 20:02:20  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
+ * Revision 1.1.1.1  2002/02/01 22:21:58  peiyongz
+ * sane_include
  *
  * Revision 1.7  2001/10/05 17:57:39  peiyongz
  * [BUG# 3831]: -1 returned from getIndex() needs to be checked
@@ -188,8 +191,8 @@ int VecAttributesImpl::getIndex(const XMLCh* const uri, const XMLCh* const local
 
         fScanner->getURIText(curElem->getURIId(), uriBuffer) ;
 
-        if ( (!XMLString::compareString(curElem->getName(), localPart)) &&
-             (!XMLString::compareString(uriBuffer.getRawBuffer(), uri)) )
+        if ( (XMLString::equals(curElem->getName(), localPart)) &&
+             (XMLString::equals(uriBuffer.getRawBuffer(), uri)) )
             return index ;
     }
     return -1;
@@ -205,7 +208,7 @@ int VecAttributesImpl::getIndex(const XMLCh* const qName ) const
     {
         const XMLAttr* curElem = fVector->elementAt(index);
 
-        if (!XMLString::compareString(curElem->getQName(), qName))
+        if (XMLString::equals(curElem->getQName(), qName))
             return index ;
     }
     return -1;
diff --git a/src/xercesc/internal/XMLScanner.cpp b/src/xercesc/internal/XMLScanner.cpp
index 9dffb31f04f7716819813ae3121651fc364d03b1..7da22112fb1afebb3408a318d5c708714117e94d 100644
--- a/src/xercesc/internal/XMLScanner.cpp
+++ b/src/xercesc/internal/XMLScanner.cpp
@@ -1775,7 +1775,7 @@ void XMLScanner::scanEndTag(bool& gotData)
     // Make sure that its the end of the element that we expect
     XMLElementDecl* tempElement = topElem->fThisElement;
     if (fDoNamespaces && fGrammarType == Grammar::SchemaGrammarType) {
-        if ((topUri != uriId) || (XMLString::compareString(tempElement->getBaseName(), bbName.getRawBuffer())))
+        if ((topUri != uriId) || (!XMLString::equals(tempElement->getBaseName(), bbName.getRawBuffer())))
         {
             emitError
             (
@@ -1785,7 +1785,7 @@ void XMLScanner::scanEndTag(bool& gotData)
         }
     }
     else {
-        if (XMLString::compareString(tempElement->getFullName(), qnameBuf.getRawBuffer()))
+        if (!XMLString::equals(tempElement->getFullName(), qnameBuf.getRawBuffer()))
         {
             emitError
             (
@@ -2701,7 +2701,7 @@ bool XMLScanner::scanStartTag(bool& gotData)
         if (fValidate)
         {
             //  If a DocType exists, then check if it matches the root name there.
-            if (fRootElemName && XMLString::compareString(fQNameBuf.getRawBuffer(), fRootElemName))
+            if (fRootElemName && !XMLString::equals(fQNameBuf.getRawBuffer(), fRootElemName))
                 fValidator->emitError(XMLValid::RootElemNotLikeDocType);
 
             //  Some validators may also want to check the root, call the
@@ -3332,7 +3332,7 @@ bool XMLScanner::scanStartTagNS(bool& gotData)
                     {
                         const XMLCh* rawPtr = curDef.getFullName();
                         if (!XMLString::compareNString(rawPtr, XMLUni::fgXMLNSColonString, 6)
-                        ||  !XMLString::compareString(rawPtr, XMLUni::fgXMLNSString))
+                        ||  XMLString::equals(rawPtr, XMLUni::fgXMLNSString))
                             updateNSMap(rawPtr, curDef.getValue());
                     }
                 }
@@ -3646,7 +3646,7 @@ bool XMLScanner::scanStartTagNS(bool& gotData)
         if (fValidate)
         {
             //  If a DocType exists, then check if it matches the root name there.
-            if (fRootElemName && XMLString::compareString(qnameRawBuf, fRootElemName))
+            if (fRootElemName && !XMLString::equals(qnameRawBuf, fRootElemName))
                 fValidator->emitError(XMLValid::RootElemNotLikeDocType);
 
             //  Some validators may also want to check the root, call the
@@ -3926,11 +3926,11 @@ void XMLScanner::scanXMLDecl(const DeclTypes type)
             emitError(XMLErrs::ExpectedDeclString);
 
         // See if it matches any of our expected strings
-        if (!XMLString::compareString(nameBuf.getRawBuffer(), XMLUni::fgVersionString))
+        if (XMLString::equals(nameBuf.getRawBuffer(), XMLUni::fgVersionString))
             curString = VersionString;
-        else if (!XMLString::compareString(nameBuf.getRawBuffer(), XMLUni::fgEncodingString))
+        else if (XMLString::equals(nameBuf.getRawBuffer(), XMLUni::fgEncodingString))
             curString = EncodingString;
-        else if (!XMLString::compareString(nameBuf.getRawBuffer(), XMLUni::fgStandaloneString))
+        else if (XMLString::equals(nameBuf.getRawBuffer(), XMLUni::fgStandaloneString))
             curString = StandaloneString;
         else
             curString = UnknownString;
@@ -3968,7 +3968,7 @@ void XMLScanner::scanXMLDecl(const DeclTypes type)
         const XMLCh* rawValue = buffers[curString]->getRawBuffer();
         if (curString == VersionString)
         {
-            if (XMLString::compareString(rawValue, XMLUni::fgSupportedVersion))
+            if (!XMLString::equals(rawValue, XMLUni::fgSupportedVersion))
                 emitError(XMLErrs::UnsupportedXMLVersion, rawValue);
         }
          else if (curString == EncodingString)
@@ -3978,9 +3978,9 @@ void XMLScanner::scanXMLDecl(const DeclTypes type)
         }
          else if (curString == StandaloneString)
         {
-            if (!XMLString::compareString(rawValue, XMLUni::fgYesString))
+            if (XMLString::equals(rawValue, XMLUni::fgYesString))
                 fStandalone = true;
-            else if (!XMLString::compareString(rawValue, XMLUni::fgNoString))
+            else if (XMLString::equals(rawValue, XMLUni::fgNoString))
                 fStandalone = false;
             else
             {
@@ -4159,9 +4159,9 @@ XMLScanner::resolveQName(   const   XMLCh* const        qName
         //  to map to by the NS spec. xmlns gets mapped to a special place holder
         //  URI that we define (so that it maps to something checkable.)
         //
-        if (!XMLString::compareString(prefixBuf.getRawBuffer(), XMLUni::fgXMLNSString))
+        if (XMLString::equals(prefixBuf.getRawBuffer(), XMLUni::fgXMLNSString))
             uriId = fXMLNSNamespaceId;
-        else if (!XMLString::compareString(prefixBuf.getRawBuffer(), XMLUni::fgXMLString))
+        else if (XMLString::equals(prefixBuf.getRawBuffer(), XMLUni::fgXMLString))
             uriId = fXMLNamespaceId;
         else
         {
diff --git a/src/xercesc/internal/XMLScanner2.cpp b/src/xercesc/internal/XMLScanner2.cpp
index 6e7810891f29a75fbe5a9b9cdcff886ed4d15036..d5786ab3213ce6dc891c6d609399fd3dcdc5ead6 100644
--- a/src/xercesc/internal/XMLScanner2.cpp
+++ b/src/xercesc/internal/XMLScanner2.cpp
@@ -206,8 +206,8 @@ XMLScanner::buildAttList(const  RefVectorOf<KVStringPair>&  providedAttrs
         //
         const bool isNSAttr = (uriId == fXMLNSNamespaceId)
                               || (uriId == fXMLNamespaceId)
-                              || !XMLString::compareString(suffPtr, XMLUni::fgXMLNSString)
-                              || !XMLString::compareString(getURIText(uriId), SchemaSymbols::fgURI_XSI);
+                              || XMLString::equals(suffPtr, XMLUni::fgXMLNSString)
+                              || XMLString::equals(getURIText(uriId), SchemaSymbols::fgURI_XSI);
 
 
         //
@@ -836,9 +836,9 @@ XMLScanner::resolvePrefix(  const   XMLCh* const        prefix
     //  to map to by the NS spec. xmlns gets mapped to a special place holder
     //  URI that we define (so that it maps to something checkable.)
     //
-    if (!XMLString::compareString(prefix, XMLUni::fgXMLNSString))
+    if (XMLString::equals(prefix, XMLUni::fgXMLNSString))
         return fXMLNSNamespaceId;
-    else if (!XMLString::compareString(prefix, XMLUni::fgXMLString))
+    else if (XMLString::equals(prefix, XMLUni::fgXMLString))
         return fXMLNamespaceId;
 
 
@@ -868,9 +868,9 @@ XMLScanner::resolvePrefix(  const   XMLCh* const        prefix
     //  to map to by the NS spec. xmlns gets mapped to a special place holder
     //  URI that we define (so that it maps to something checkable.)
     //
-    if (!XMLString::compareString(prefix, XMLUni::fgXMLNSString))
+    if (XMLString::equals(prefix, XMLUni::fgXMLNSString))
         return fXMLNSNamespaceId;
-    else if (!XMLString::compareString(prefix, XMLUni::fgXMLString))
+    else if (XMLString::equals(prefix, XMLUni::fgXMLString))
         return fXMLNamespaceId;
 
     //
@@ -1323,14 +1323,14 @@ void XMLScanner::scanRawAttrListforNameSpaces(const RefVectorOf<KVStringPair>* t
         //  "xmlns", then use it to update the map.
         //
         if (!XMLString::compareNString(rawPtr, XMLUni::fgXMLNSColonString, 6)
-        ||  !XMLString::compareString(rawPtr, XMLUni::fgXMLNSString))
+        ||  XMLString::equals(rawPtr, XMLUni::fgXMLNSString))
         {
             const XMLCh* valuePtr = curPair->getValue();
 
             updateNSMap(rawPtr, valuePtr);
 
             // if the schema URI is seen in the the valuePtr, set the boolean seeXsi
-            if (!XMLString::compareString(valuePtr, SchemaSymbols::fgURI_XSI)) {
+            if (XMLString::equals(valuePtr, SchemaSymbols::fgURI_XSI)) {
                 fSeeXsi = true;
             }
         }
@@ -1361,17 +1361,17 @@ void XMLScanner::scanRawAttrListforNameSpaces(const RefVectorOf<KVStringPair>* t
                 const XMLCh* valuePtr = curPair->getValue();
                 const XMLCh* suffPtr = attName.getLocalPart();
 
-                if (!XMLString::compareString(suffPtr, SchemaSymbols::fgXSI_SCHEMALOCACTION))
+                if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_SCHEMALOCACTION))
                     parseSchemaLocation(valuePtr);
-                else if (!XMLString::compareString(suffPtr, SchemaSymbols::fgXSI_NONAMESPACESCHEMALOCACTION))
+                else if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_NONAMESPACESCHEMALOCACTION))
                     resolveSchemaGrammar(valuePtr, XMLUni::fgZeroLenString);
 
-                if (!XMLString::compareString(suffPtr, SchemaSymbols::fgXSI_TYPE)) {
+                if (XMLString::equals(suffPtr, SchemaSymbols::fgXSI_TYPE)) {
                         fXsiType.set(valuePtr);
                 }
-                else if (!XMLString::compareString(suffPtr, SchemaSymbols::fgATT_NILL)
+                else if (XMLString::equals(suffPtr, SchemaSymbols::fgATT_NILL)
                          && fValidator && fValidator->handlesSchema()
-                         && !XMLString::compareString(valuePtr, SchemaSymbols::fgATTVAL_TRUE)) {
+                         && XMLString::equals(valuePtr, SchemaSymbols::fgATTVAL_TRUE)) {
                             ((SchemaValidator*)fValidator)->setNillable(true);
                 }
             }
@@ -1501,7 +1501,7 @@ void XMLScanner::resolveSchemaGrammar(const XMLCh* const loc, const XMLCh* const
             if (root != 0)
             {
                 const XMLCh* newUri = root->getAttribute(SchemaSymbols::fgATT_TARGETNAMESPACE);
-                if (XMLString::compareString(newUri, uri)) {
+                if (!XMLString::equals(newUri, uri)) {
                     if (fValidate)
                         fValidator->emitError(XMLValid::WrongTargetNamespace, loc, uri);
                     grammar = fGrammarResolver->getGrammar(newUri);
@@ -3095,7 +3095,7 @@ bool XMLScanner::laxElementValidation(QName* element, ContentLeafNameTypeVector*
 
             if (type == ContentSpecNode::Leaf) {
                 if (((uri == elementURI)
-                      && !XMLString::compareString(fElemMap->getLocalPart(), element->getLocalPart()))
+                      && XMLString::equals(fElemMap->getLocalPart(), element->getLocalPart()))
                     || comparator.isEquivalentTo(element, fElemMap)) {
 
                     nextState = cm->getNextState(currState, i);
diff --git a/src/xercesc/parsers/AbstractDOMParser.cpp b/src/xercesc/parsers/AbstractDOMParser.cpp
index 0ccf85d11225bb4d92d4e8030becd0642ab5179a..0c71e4b841f11a3fd2e37dc52a0fca4a4c6eef0a 100644
--- a/src/xercesc/parsers/AbstractDOMParser.cpp
+++ b/src/xercesc/parsers/AbstractDOMParser.cpp
@@ -568,7 +568,7 @@ void AbstractDOMParser::endEntityReference(const XMLEntityDecl& entDecl)
 
                         // retrive the baseURI from the entity decl
                         const XMLCh* baseURI = erImpl->getBaseURI();
-                        if (baseURI != 0 && XMLString::compareString(baseURI,fDocument->getDocumentURI())) {
+                        if (baseURI != 0 && !XMLString::equals(baseURI,fDocument->getDocumentURI())) {
                             if (fScanner -> getDoNamespaces()) {
                                 ((DOMElement*)fCurrentNode)->setAttributeNS(DOMNodeImpl::getXmlURIString(), baseString, baseURI);
                             } else {
@@ -656,15 +656,7 @@ void AbstractDOMParser::startDocument()
     fCurrentNode   = fDocument;
     // set DOM error checking off
     fDocument->setErrorChecking(false);
-
-    const XMLCh* systemId = fScanner->getLocator()->getSystemId();
-    if (systemId) {
-        XMLBufBid bbURI(&fBufMgr);
-        XMLBuffer& bufURI = bbURI.getBuffer();
-        XMLString::fixURI(systemId, bufURI);
-
-        fDocument->setDocumentURI(bufURI.getRawBuffer());
-    }
+    fDocument->setDocumentURI(fScanner->getLocator()->getSystemId());
     fDocument->setActualEncoding(fScanner->getReaderMgr()->getCurrentEncodingStr());
 }
 
@@ -719,7 +711,7 @@ void AbstractDOMParser::startElement(const  XMLElementDecl&         elemDecl
             const XMLAttr* oneAttrib = attrList.elementAt(index);
             unsigned int attrURIId = oneAttrib -> getURIId();
             namespaceURI = 0;
-            if (!XMLString::compareString(oneAttrib -> getName(), XMLNS))    //for xmlns=...
+            if (XMLString::equals(oneAttrib -> getName(), XMLNS))    //for xmlns=...
                 attrURIId = fScanner->getXMLNSNamespaceId();
             if (attrURIId != fScanner->getEmptyNamespaceId()) {  //TagName has a prefix
                 fScanner->getURIText(attrURIId, bufURI);   //get namespaceURI
@@ -810,7 +802,7 @@ void AbstractDOMParser::startElement(const  XMLElementDecl&         elemDecl
                         unsigned int uriId = fScanner->resolveQName(qualifiedName, nameBuf, prefixBuf, ElemStack::Mode_Attribute);
 
                         const XMLCh* namespaceURI = 0;
-                        if (!XMLString::compareString(qualifiedName, XMLNS))    //for xmlns=...
+                        if (XMLString::equals(qualifiedName, XMLNS))    //for xmlns=...
                             uriId = fScanner->getXMLNSNamespaceId();
                         if (uriId != fScanner->getEmptyNamespaceId()) {  //TagName has a prefix
                             namespaceURI = fScanner->getURIText(uriId);
@@ -892,7 +884,7 @@ void AbstractDOMParser::XMLDecl(const   XMLCh* const version
                                 , const XMLCh* const standalone
                                 , const XMLCh* const actualEncStr)
 {
-    fDocument->setStandalone(!XMLString::compareString(XMLUni::fgYesString, standalone));
+    fDocument->setStandalone(XMLString::equals(XMLUni::fgYesString, standalone));
 
     fDocument->setVersion(version);
     fDocument->setEncoding(encoding);
@@ -1180,7 +1172,7 @@ void AbstractDOMParser::endAttList
 
                         XMLString::subString(prefix ,qualifiedName, 0, index);
 
-                        if (!XMLString::compareString(prefix,XMLNS))
+                        if (XMLString::equals(prefix,XMLNS))
                             buf.append(XMLUni::fgXMLNSURIName);
                         else
                             buf.append(XMLUni::fgXMLURIName);
@@ -1190,7 +1182,7 @@ void AbstractDOMParser::endAttList
                     }
                     else {
                         //   No prefix
-                        if (!XMLString::compareString(qualifiedName,XMLNS))
+                        if (XMLString::equals(qualifiedName,XMLNS))
                             buf.append(XMLUni::fgXMLNSURIName);
                     }
 
@@ -1245,14 +1237,7 @@ void AbstractDOMParser::entityDecl
     entity->setPublicId(entityDecl.getPublicId());
     entity->setSystemId(entityDecl.getSystemId());
     entity->setNotationName(entityDecl.getNotationName());
-    if (entityDecl.getBaseURI())
-    {
-        XMLBufBid bbURI(&fBufMgr);
-        XMLBuffer& bufURI = bbURI.getBuffer();
-        XMLString::fixURI(entityDecl.getBaseURI(), bufURI);
-
-        entity->setBaseURI(bufURI.getRawBuffer());
-    }
+    entity->setBaseURI(entityDecl.getBaseURI());
 
     DOMEntityImpl *previousDef = (DOMEntityImpl *)
 	    fDocumentType->getEntities()->setNamedItem( entity );
@@ -1323,14 +1308,7 @@ void AbstractDOMParser::notationDecl
     DOMNotationImpl* notation = (DOMNotationImpl *)fDocument->createNotation(notDecl.getName());
     notation->setPublicId(notDecl.getPublicId());
     notation->setSystemId(notDecl.getSystemId());
-    if (notDecl.getBaseURI())
-    {
-        XMLBufBid bbURI(&fBufMgr);
-        XMLBuffer& bufURI = bbURI.getBuffer();
-        XMLString::fixURI(notDecl.getBaseURI(), bufURI);
-
-        notation->setBaseURI(bufURI.getRawBuffer());
-    }
+    notation->setBaseURI(notDecl.getBaseURI());
 
     DOMNode* rem = fDocumentType->getNotations()->setNamedItem( notation );
     if (rem)
diff --git a/src/xercesc/parsers/SAX2XMLReaderImpl.cpp b/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
index 3d09515822ee2db82ee4c34efa6ac8b423e80141..14e1c40b7d6c1579bcb2f87465d5552e2d4a2e45 100644
--- a/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
+++ b/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.11  2002/09/24 20:00:32  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
  * Revision 1.10  2002/08/14 15:20:38  knoaman
  * [Bug 3111] Problem with LexicalHandler::startDTD() and LexicalHandler::endDTD().
  *
@@ -816,9 +819,9 @@ startElement(   const   XMLElementDecl&         elemDecl
             for (unsigned int i = 0; i < attrCount; i++)
             {
                 tempAttr = attrList.elementAt(i);
-                if (XMLString::compareString(tempAttr->getQName(), nsString) == 0)
+                if (XMLString::equals(tempAttr->getQName(), nsString))
                     nsURI = tempAttr->getValue();
-                if (XMLString::compareString(tempAttr->getPrefix(), nsString) == 0)
+                if (XMLString::equals(tempAttr->getPrefix(), nsString))
                 {
                     nsPrefix = tempAttr->getName();
                     nsURI = tempAttr->getValue();
diff --git a/src/xercesc/util/MsgLoaders/InMemory/InMemMsgLoader.cpp b/src/xercesc/util/MsgLoaders/InMemory/InMemMsgLoader.cpp
index 9b5c4dfa198253d20e3f6758be022b8e55e61c56..a3c1e43485e8bc157a669f83b41ddd6b57837776 100644
--- a/src/xercesc/util/MsgLoaders/InMemory/InMemMsgLoader.cpp
+++ b/src/xercesc/util/MsgLoaders/InMemory/InMemMsgLoader.cpp
@@ -1,37 +1,37 @@
 /*
  * The Apache Software License, Version 1.1
- * 
+ *
  * Copyright (c) 1999-2000 The Apache Software Foundation.  All rights
  * reserved.
- * 
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
- * 
+ *
  * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- * 
+ *    notice, this list of conditions and the following disclaimer.
+ *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
- * 
+ *
  * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following acknowledgment:  
+ *    if any, must include the following acknowledgment:
  *       "This product includes software developed by the
  *        Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself,
  *    if and wherever such third-party acknowledgments normally appear.
- * 
+ *
  * 4. The names "Xerces" and "Apache Software Foundation" must
  *    not be used to endorse or promote products derived from this
- *    software without prior written permission. For written 
+ *    software without prior written permission. For written
  *    permission, please contact apache\@apache.org.
- * 
+ *
  * 5. Products derived from this software may not be called "Apache",
  *    nor may "Apache" appear in their name, without prior written
  *    permission of the Apache Software Foundation.
- * 
+ *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -45,7 +45,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * ====================================================================
- * 
+ *
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Apache Software Foundation, and was
  * originally based on software copyright (c) 1999, International
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2002/09/24 19:57:59  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
  * Revision 1.2  2002/09/23 22:14:37  peiyongz
  * Code sharing and Array boundary checking added
  *
@@ -106,9 +109,9 @@
 InMemMsgLoader::InMemMsgLoader(const XMLCh* const msgDomain)
 :fMsgDomain(0)
 {
-    if (XMLString::compareString(msgDomain, XMLUni::fgXMLErrDomain)
-    &&  XMLString::compareString(msgDomain, XMLUni::fgExceptDomain)
-    &&  XMLString::compareString(msgDomain, XMLUni::fgValidityDomain))
+    if (!XMLString::equals(msgDomain, XMLUni::fgXMLErrDomain)
+    &&  !XMLString::equals(msgDomain, XMLUni::fgExceptDomain)
+    &&  !XMLString::equals(msgDomain, XMLUni::fgValidityDomain))
     {
         XMLPlatformUtils::panic(XMLPlatformUtils::Panic_UnknownMsgDomain);
     }
@@ -140,21 +143,21 @@ bool InMemMsgLoader::loadMsg(const  XMLMsgLoader::XMLMsgId  msgToLoad
     XMLCh* outPtr = toFill;
     const XMLCh* srcPtr = 0;
 
-    if (!XMLString::compareString(fMsgDomain, XMLUni::fgXMLErrDomain))
+    if (XMLString::equals(fMsgDomain, XMLUni::fgXMLErrDomain))
     {
         if ( msgToLoad > gXMLErrArraySize)
             return false;
         else
             srcPtr = gXMLErrArray[msgToLoad - 1];
     }
-     else if (!XMLString::compareString(fMsgDomain, XMLUni::fgExceptDomain))
+     else if (XMLString::equals(fMsgDomain, XMLUni::fgExceptDomain))
     {
          if ( msgToLoad > gXMLExceptArraySize)
             return false;
          else
              srcPtr = gXMLExceptArray[msgToLoad - 1];
     }
-     else if (!XMLString::compareString(fMsgDomain, XMLUni::fgValidityDomain))
+     else if (XMLString::equals(fMsgDomain, XMLUni::fgValidityDomain))
     {
          if ( msgToLoad > gXMLValidityArraySize)
             return false;
diff --git a/src/xercesc/util/MsgLoaders/MsgCatalog/MsgCatalogLoader.cpp b/src/xercesc/util/MsgLoaders/MsgCatalog/MsgCatalogLoader.cpp
index 5420f625505dbd6ceae2d4b9a27671deaae54630..3653c036c0bc3ec378aa0782afb36f9913ade8b3 100644
--- a/src/xercesc/util/MsgLoaders/MsgCatalog/MsgCatalogLoader.cpp
+++ b/src/xercesc/util/MsgLoaders/MsgCatalog/MsgCatalogLoader.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.4  2002/09/24 19:58:33  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
  * Revision 1.3  2002/09/23 21:05:40  peiyongz
  * remove debugging code
  *
@@ -119,9 +122,9 @@ MsgCatalogLoader::MsgCatalogLoader(const XMLCh* const msgDomain)
 ,fMsgDomain(0)
 ,fMsgSet(0)
 {
-    if (XMLString::compareString(msgDomain, XMLUni::fgXMLErrDomain)
-    &&  XMLString::compareString(msgDomain, XMLUni::fgExceptDomain)
-    &&  XMLString::compareString(msgDomain, XMLUni::fgValidityDomain))
+    if (!XMLString::equals(msgDomain, XMLUni::fgXMLErrDomain)
+    &&  !XMLString::equals(msgDomain, XMLUni::fgExceptDomain)
+    &&  !XMLString::equals(msgDomain, XMLUni::fgValidityDomain))
     {
         XMLPlatformUtils::panic(XMLPlatformUtils::Panic_UnknownMsgDomain);
     }
@@ -144,11 +147,11 @@ MsgCatalogLoader::MsgCatalogLoader(const XMLCh* const msgDomain)
 
     fMsgDomain = XMLString::replicate(msgDomain);
 
-    if (!XMLString::compareString(fMsgDomain, XMLUni::fgXMLErrDomain))
+    if (XMLString::equals(fMsgDomain, XMLUni::fgXMLErrDomain))
         fMsgSet = CatId_XMLErrs;
-    else if (!XMLString::compareString(fMsgDomain, XMLUni::fgExceptDomain))
+    else if (XMLString::equals(fMsgDomain, XMLUni::fgExceptDomain))
         fMsgSet = CatId_XMLExcepts;
-    else if (!XMLString::compareString(fMsgDomain, XMLUni::fgValidityDomain))
+    else if (XMLString::equals(fMsgDomain, XMLUni::fgValidityDomain))
         fMsgSet = CatId_XMLValid;
 }
 
@@ -172,8 +175,8 @@ bool MsgCatalogLoader::loadMsg(const  XMLMsgLoader::XMLMsgId  msgToLoad
 
     // catgets returns a pointer to msgString if it fails to locate the message
     // from the message catalog
-    if (XMLString::compareString(catMessage, msgString) == 0)
-        return false;   
+    if (XMLString::equals(catMessage, msgString))
+        return false;
     else
     {
         XMLString::transcode(catMessage, toFill, maxChars);
diff --git a/src/xercesc/util/MsgLoaders/MsgFile/MsgLoader.cpp b/src/xercesc/util/MsgLoaders/MsgFile/MsgLoader.cpp
index 424fd2ead735c43e816fb8b8e347ae73f5e4b9a1..289434c85f0a401b9bd4311f5489a34840a131bd 100644
--- a/src/xercesc/util/MsgLoaders/MsgFile/MsgLoader.cpp
+++ b/src/xercesc/util/MsgLoaders/MsgFile/MsgLoader.cpp
@@ -203,16 +203,16 @@ bool MsgCatalogLoader::loadMsg(const  XMLMsgLoader::XMLMsgId  msgToLoad
     char * msgId;
     char * repTexts = NULL;
     int size = 0;
-    if (!XMLString::compareString(fMsgDomain, XMLUni::fgXMLErrDomain))
+    if (XMLString::equals(fMsgDomain, XMLUni::fgXMLErrDomain))
     {
 	if(msgToLoad < 7)	// Warning messages
 	    msgId = Warnings[msgToLoad - 2];
 	else			// Fatal Errors
 	    msgId = Errors[msgToLoad - 9];
     }
-    else if (!XMLString::compareString(fMsgDomain, XMLUni::fgExceptDomain))
+    else if (XMLString::equals(fMsgDomain, XMLUni::fgExceptDomain))
         msgId = Exceptions[msgToLoad - 2];
-    else if (!XMLString::compareString(fMsgDomain, XMLUni::fgValidityDomain))
+    else if (XMLString::equals(fMsgDomain, XMLUni::fgValidityDomain))
 	msgId = Invalid[msgToLoad - 2];
 
     if (!localMsg(msgId, toFill, maxChars, repTexts, size))
@@ -233,16 +233,16 @@ bool MsgCatalogLoader::loadMsg(const  XMLMsgLoader::XMLMsgId  msgToLoad
     char * msgId;
     int size=0;
     char* repTexts = PackingRepText(repText1, repText2, repText3, repText4, size);
-    if (!XMLString::compareString(fMsgDomain, XMLUni::fgXMLErrDomain))
+    if (XMLString::equals(fMsgDomain, XMLUni::fgXMLErrDomain))
     {
 	if(msgToLoad < 7)
 	    msgId = Warnings[msgToLoad - 2];
 	else
 	    msgId = Errors[msgToLoad - 9];
     }
-    else if (!XMLString::compareString(fMsgDomain, XMLUni::fgExceptDomain))
+    else if (XMLString::equals(fMsgDomain, XMLUni::fgExceptDomain))
         msgId = Exceptions[msgToLoad - 2];
-    else if (!XMLString::compareString(fMsgDomain, XMLUni::fgValidityDomain))
+    else if (XMLString::equals(fMsgDomain, XMLUni::fgValidityDomain))
 	msgId = Invalid[msgToLoad - 2];
 
     // Call the other version to load up the message
diff --git a/src/xercesc/util/MsgLoaders/Win32/Win32MsgLoader.cpp b/src/xercesc/util/MsgLoaders/Win32/Win32MsgLoader.cpp
index b623c37ec556ace0c36b8974fc317bf5f38cd49c..72300a7499b174045b4aff77bebd57c9aa4918a8 100644
--- a/src/xercesc/util/MsgLoaders/Win32/Win32MsgLoader.cpp
+++ b/src/xercesc/util/MsgLoaders/Win32/Win32MsgLoader.cpp
@@ -126,11 +126,11 @@ Win32MsgLoader::Win32MsgLoader(const XMLCh* const msgDomain) :
     fMsgDomain = XMLString::replicate(msgDomain);
 
     // And precalc the id offset we use for this domain
-    if (!XMLString::compareString(fMsgDomain, XMLUni::fgXMLErrDomain))
+    if (XMLString::equals(fMsgDomain, XMLUni::fgXMLErrDomain))
         fDomainOfs = 0;
-    else if (!XMLString::compareString(fMsgDomain, XMLUni::fgExceptDomain))
+    else if (XMLString::equals(fMsgDomain, XMLUni::fgExceptDomain))
         fDomainOfs = 0x2000;
-    else if (!XMLString::compareString(fMsgDomain, XMLUni::fgValidityDomain))
+    else if (XMLString::equals(fMsgDomain, XMLUni::fgValidityDomain))
         fDomainOfs = 0x4000;
     else
         XMLPlatformUtils::panic(XMLPlatformUtils::Panic_UnknownMsgDomain);
diff --git a/src/xercesc/util/regx/BlockRangeFactory.cpp b/src/xercesc/util/regx/BlockRangeFactory.cpp
index b40c1dff1aea3c6e95905876cc69e271eada688e..b3cb2f7302fd843ab4d0ee0358f375b0bc2ca6e4 100644
--- a/src/xercesc/util/regx/BlockRangeFactory.cpp
+++ b/src/xercesc/util/regx/BlockRangeFactory.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2002/09/24 19:59:36  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
  * Revision 1.2  2002/02/05 13:20:06  tng
  * [Bug 5716] Can't parse with Validation more than one file.
  *
@@ -411,11 +414,11 @@ void BlockRangeFactory::buildRanges() {
         RangeToken* tok = tokFactory->createRange();
         tok->addRange(blockRanges[i*2], blockRanges[(i*2)+1]);
 
-        if (!foundSpecial && !XMLString::compareString((XMLCh*)fgBlockNames[i] , (XMLCh*) fgBlockIsSpecials)) {
+        if (!foundSpecial && XMLString::equals((XMLCh*)fgBlockNames[i] , (XMLCh*) fgBlockIsSpecials)) {
             tok->addRange(0xFFF0, 0xFFFD);
             foundSpecial = true;
         }
-        if (!foundPrivate && !XMLString::compareString((XMLCh*)fgBlockNames[i] , (XMLCh*) fgBlockIsPrivateUse)) {
+        if (!foundPrivate && XMLString::equals((XMLCh*)fgBlockNames[i] , (XMLCh*) fgBlockIsPrivateUse)) {
             tok->addRange(0xF0000, 0xFFFFD);
             tok->addRange(0x100000, 0x10FFFD);
             foundPrivate = true;
diff --git a/src/xercesc/validators/DTD/DTDScanner.cpp b/src/xercesc/validators/DTD/DTDScanner.cpp
index ac8b656649da051d32a9180b8c637d6a6451fb94..4608efcf6eab93dc1d381ab5c9ef189ed93b16a3 100644
--- a/src/xercesc/validators/DTD/DTDScanner.cpp
+++ b/src/xercesc/validators/DTD/DTDScanner.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.13  2002/09/24 20:10:30  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
  * Revision 1.12  2002/08/22 21:05:29  tng
  * [Bug 7475] Xerces-C++ reports validation error with Docbook.
  *
@@ -657,7 +660,7 @@ DTDScanner::scanAttDef(DTDElementDecl& parentElem, XMLBuffer& bufToUse)
         // if attdef is xml:space, check correct enumeration (default|preserve)
         const XMLCh fgXMLSpace[] = { chLatin_x, chLatin_m, chLatin_l, chColon, chLatin_s, chLatin_p, chLatin_a, chLatin_c, chLatin_e, chNull };
 
-        if (!XMLString::compareString(decl->getFullName(),fgXMLSpace)) {
+        if (XMLString::equals(decl->getFullName(),fgXMLSpace)) {
             const XMLCh fgPreserve[] = { chLatin_p, chLatin_r, chLatin_e, chLatin_s, chLatin_e, chLatin_r, chLatin_v, chLatin_e, chNull };
             const XMLCh fgDefault[] = { chLatin_d, chLatin_e, chLatin_f, chLatin_a, chLatin_u, chLatin_l, chLatin_t, chNull };
             bool ok = false;
@@ -665,14 +668,14 @@ DTDScanner::scanAttDef(DTDElementDecl& parentElem, XMLBuffer& bufToUse)
                 RefVectorOf<XMLCh>* enumVector = XMLString::tokenizeString(decl->getEnumeration());
                 int size = enumVector->size();
                 ok = (size == 1 &&
-                     (!XMLString::compareString(enumVector->elementAt(0), fgDefault) ||
-                      !XMLString::compareString(enumVector->elementAt(0), fgPreserve))) ||
+                     (XMLString::equals(enumVector->elementAt(0), fgDefault) ||
+                      XMLString::equals(enumVector->elementAt(0), fgPreserve))) ||
                      (size == 2 &&
-                     (!XMLString::compareString(enumVector->elementAt(0), fgDefault) &&
-                      !XMLString::compareString(enumVector->elementAt(1), fgPreserve))) ||
+                     (XMLString::equals(enumVector->elementAt(0), fgDefault) &&
+                      XMLString::equals(enumVector->elementAt(1), fgPreserve))) ||
                      (size == 2 &&
-                     (!XMLString::compareString(enumVector->elementAt(1), fgDefault) &&
-                      !XMLString::compareString(enumVector->elementAt(0), fgPreserve)));
+                     (XMLString::equals(enumVector->elementAt(1), fgDefault) &&
+                      XMLString::equals(enumVector->elementAt(0), fgPreserve)));
                 delete enumVector;
             }
             if (!ok)
@@ -3661,7 +3664,7 @@ void DTDScanner::scanTextDecl()
         }
 
         // If its not our supported version, issue an error but continue
-        if (XMLString::compareString(bbVersion.getRawBuffer(), XMLUni::fgSupportedVersion))
+        if (!XMLString::equals(bbVersion.getRawBuffer(), XMLUni::fgSupportedVersion))
             fScanner->emitError(XMLErrs::UnsupportedXMLVersion, bbVersion.getRawBuffer());
     }
 
diff --git a/src/xercesc/validators/DTD/DTDValidator.cpp b/src/xercesc/validators/DTD/DTDValidator.cpp
index 5a9902484708c8e9693fdceec6e5e6f0ec0e7b23..51b96934b98c5005839705f9c420dc059ef192b2 100644
--- a/src/xercesc/validators/DTD/DTDValidator.cpp
+++ b/src/xercesc/validators/DTD/DTDValidator.cpp
@@ -222,7 +222,7 @@ DTDValidator::validateAttrValue(const   XMLAttDef*      attDef
     //
     if (defType == XMLAttDef::Fixed && !preValidation)
     {
-        if (XMLString::compareString(attrValue, valueText))
+        if (!XMLString::equals(attrValue, valueText))
             emitError(XMLValid::NotSameAsFixedValue, fullName, attrValue, valueText);
     }
 
diff --git a/src/xercesc/validators/schema/ComplexTypeInfo.hpp b/src/xercesc/validators/schema/ComplexTypeInfo.hpp
index b30133a49a498d388c2a9bc7d1c40f500260ba2f..03fc9c16689b7a5824d150fd5ac83f278128b550 100644
--- a/src/xercesc/validators/schema/ComplexTypeInfo.hpp
+++ b/src/xercesc/validators/schema/ComplexTypeInfo.hpp
@@ -510,8 +510,7 @@ inline bool ComplexTypeInfo::contains(const XMLCh* const attName) {
 
     while (enumDefs.hasMoreElements()) {
 
-        if (XMLString::compareString(attName,
-                enumDefs.nextElement().getAttName()->getLocalPart()) == 0) {
+        if (XMLString::equals(attName, enumDefs.nextElement().getAttName()->getLocalPart())) {
             return true;
         }
     }
diff --git a/src/xercesc/validators/schema/SchemaInfo.cpp b/src/xercesc/validators/schema/SchemaInfo.cpp
index 2ab9ce3cae88f8a355addca0756382d3e7ec8b35..9c4a8ba46770e1ca0edffa7862db74371bc2db37 100644
--- a/src/xercesc/validators/schema/SchemaInfo.cpp
+++ b/src/xercesc/validators/schema/SchemaInfo.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.8  2002/09/24 20:12:48  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
  * Revision 1.7  2002/06/21 11:52:24  knoaman
  * cleanup
  *
@@ -237,7 +240,7 @@ SchemaInfo::getTopLevelComponent(const unsigned short compCategory,
         for (unsigned int i= 0; i < listLen; i++) {
 
             child = compList->elementAt(i);
-            if (!XMLString::compareString(child->getAttribute(SchemaSymbols::fgATT_NAME), name))
+            if (XMLString::equals(child->getAttribute(SchemaSymbols::fgATT_NAME), name))
                 return child;
         }
     }
@@ -245,19 +248,19 @@ SchemaInfo::getTopLevelComponent(const unsigned short compCategory,
     DOMElement* redefParent = (DOMElement*) child->getParentNode();
 
     // Parent is not "redefine"
-    if (XMLString::compareString(redefParent->getLocalName(),SchemaSymbols::fgELT_REDEFINE))
+    if (!XMLString::equals(redefParent->getLocalName(),SchemaSymbols::fgELT_REDEFINE))
         redefParent = 0;
 
     while (child != 0) {
 
-        if (!XMLString::compareString(child->getLocalName(), compName)) {
+        if (XMLString::equals(child->getLocalName(), compName)) {
 
             compList->addElement(child);
 
-            if (!XMLString::compareString(child->getAttribute(SchemaSymbols::fgATT_NAME), name))
+            if (XMLString::equals(child->getAttribute(SchemaSymbols::fgATT_NAME), name))
                 return child;
         }
-        else if (!XMLString::compareString(child->getLocalName(),SchemaSymbols::fgELT_REDEFINE)
+        else if (XMLString::equals(child->getLocalName(),SchemaSymbols::fgELT_REDEFINE)
                  && (!fFailedRedefineList || !fFailedRedefineList->containsElement(child))) { // if redefine
 
             DOMElement* redefineChild = XUtil::getFirstChildElement(child);
@@ -265,11 +268,11 @@ SchemaInfo::getTopLevelComponent(const unsigned short compCategory,
             while (redefineChild != 0) {
 
                 if ((!fFailedRedefineList || !fFailedRedefineList->containsElement(redefineChild))
-                    && !XMLString::compareString(redefineChild->getLocalName(), compName)) {
+                    && XMLString::equals(redefineChild->getLocalName(), compName)) {
 
                     compList->addElement(redefineChild);
 
-                    if (!XMLString::compareString(redefineChild->getAttribute(SchemaSymbols::fgATT_NAME), name))
+                    if (XMLString::equals(redefineChild->getAttribute(SchemaSymbols::fgATT_NAME), name))
                         return redefineChild;
                 }
 
diff --git a/src/xercesc/validators/schema/SchemaValidator.cpp b/src/xercesc/validators/schema/SchemaValidator.cpp
index 28c858045258bd96e9cd75abc21da89b11d98823..4900e7761545b2bf119b57cdd407fa1442561f64 100644
--- a/src/xercesc/validators/schema/SchemaValidator.cpp
+++ b/src/xercesc/validators/schema/SchemaValidator.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.16  2002/09/24 20:12:48  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
  * Revision 1.15  2002/09/16 20:37:08  tng
  * Infinite loop for malformed xml (e.g. simple has "XXXX") w/ setexitonfirstfatal(false).
  *
@@ -272,7 +275,7 @@ int SchemaValidator::checkContent (XMLElementDecl* const elemDecl
         // character or element information item [children].
         //
         if (fNil) {
-            if (childCount > 0 || XMLString::compareString(fDatatypeBuffer.getRawBuffer(), XMLUni::fgZeroLenString))
+            if (childCount > 0 || !XMLString::equals(fDatatypeBuffer.getRawBuffer(), XMLUni::fgZeroLenString))
                 emitError(XMLValid::NilAttrNotEmpty, elemDecl->getFullName());
 
         }
@@ -318,7 +321,7 @@ int SchemaValidator::checkContent (XMLElementDecl* const elemDecl
                         if (fNil)
                             emitError(XMLValid::NilAttrNotEmpty, elemDecl->getFullName());
 
-                        if (!XMLString::compareString(value, XMLUni::fgZeroLenString)) {
+                        if (XMLString::equals(value, XMLUni::fgZeroLenString)) {
                             // if this element didn't specified any value
                             // use default value
                             if (getScanner()->getDocHandler())
@@ -341,7 +344,7 @@ int SchemaValidator::checkContent (XMLElementDecl* const elemDecl
                     }
                     else {
                         // no default value, then check nillable
-                        if (!XMLString::compareString(value, XMLUni::fgZeroLenString)) {
+                        if (XMLString::equals(value, XMLUni::fgZeroLenString)) {
                             if ((((SchemaElementDecl*)elemDecl)->getMiscFlags() & SchemaSymbols::NILLABLE) == 0)
                                 fCurrentDV->validate(value);
                         }
@@ -436,7 +439,7 @@ void SchemaValidator::validateAttrValue (const   XMLAttDef* attDef
     if ((defType == XMLAttDef::Fixed || defType == XMLAttDef::Required_And_Fixed) && !preValidation)
     {
         const XMLCh* const valueText = attDef->getValue();
-        if (XMLString::compareString(attrValue, valueText))
+        if (!XMLString::equals(attrValue, valueText))
             emitError(XMLValid::NotSameAsFixedValue, fullName, attrValue, valueText);
     }
 
@@ -563,7 +566,7 @@ void SchemaValidator::validateElement(const   XMLElementDecl*  elemDef)
             if (!sGrammar) {
 
                 // Check built-in simple types
-                if (!XMLString::compareString(uriStr, SchemaSymbols::fgURI_SCHEMAFORSCHEMA)) {
+                if (XMLString::equals(uriStr, SchemaSymbols::fgURI_SCHEMAFORSCHEMA)) {
 
                     fXsiTypeValidator = fGrammarResolver->getDatatypeValidator(uriStr, localPart);
 
@@ -622,7 +625,7 @@ void SchemaValidator::validateElement(const   XMLElementDecl*  elemDef)
                         if (destType) {
 
                             while (tempType) {
-                                if (!XMLString::compareString(tempType->getTypeName(), destType->getTypeName()))
+                                if (XMLString::equals(tempType->getTypeName(), destType->getTypeName()))
                                     break;
                                 tempType = tempType->getBaseComplexTypeInfo();
                             }
@@ -1407,7 +1410,7 @@ SchemaValidator::checkNameAndTypeOK(SchemaGrammar* const currentGrammar,
     const XMLCh* derivedName = derivedSpecNode->getElement()->getLocalPart();
     const XMLCh* baseName = baseSpecNode->getElement()->getLocalPart();
 
-    if (XMLString::compareString(derivedName, baseName) || derivedURI != baseURI) {
+    if (!XMLString::equals(derivedName, baseName) || derivedURI != baseURI) {
         ThrowXML(RuntimeException, XMLExcepts::PD_NameTypeOK1);
     }
 
@@ -1458,7 +1461,7 @@ SchemaValidator::checkNameAndTypeOK(SchemaGrammar* const currentGrammar,
 
     if (baseDefVal && (baseFlags & SchemaSymbols::FIXED) != 0 &&
         ((derivedFlags & SchemaSymbols::FIXED) == 0 ||
-         XMLString::compareString(derivedDefVal, baseDefVal))) {
+         !XMLString::equals(derivedDefVal, baseDefVal))) {
         ThrowXML1(RuntimeException, XMLExcepts::PD_NameTypeOK3, derivedName);
     }
 
diff --git a/src/xercesc/validators/schema/SubstitutionGroupComparator.cpp b/src/xercesc/validators/schema/SubstitutionGroupComparator.cpp
index 4ab22f5004e0405c215109d9a379884b70997a5f..3666c70eabb66e4cbb8609dac571a4c1ce5f49aa 100644
--- a/src/xercesc/validators/schema/SubstitutionGroupComparator.cpp
+++ b/src/xercesc/validators/schema/SubstitutionGroupComparator.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.4  2002/09/24 20:12:48  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
  * Revision 1.3  2002/07/12 15:17:48  knoaman
  * For a given global element, store info about a substitution group element
  * as a SchemaElementDecl and not as a string.
@@ -119,7 +122,7 @@ bool SubstitutionGroupComparator::isEquivalentTo(QName* const anElement
         return false;
 
 
-    if ((XMLString::compareString(anElement->getLocalPart(), exemplar->getLocalPart()) == 0) &&
+    if (XMLString::equals(anElement->getLocalPart(), exemplar->getLocalPart()) &&
         (anElement->getURI() == exemplar->getURI()))
         return true; // they're the same!
 
@@ -161,7 +164,7 @@ bool SubstitutionGroupComparator::isEquivalentTo(QName* const anElement
 
     while (pElemDecl) //(substitutionGroupFullName)
     {
-        if ((XMLString::compareString(pElemDecl->getBaseName(), exemplar->getLocalPart()) == 0) &&
+        if (XMLString::equals(pElemDecl->getBaseName(), exemplar->getLocalPart()) &&
             (pElemDecl->getURI() == exemplar->getURI()))
         {
             // time to check for block value on element
diff --git a/src/xercesc/validators/schema/XSDErrorReporter.cpp b/src/xercesc/validators/schema/XSDErrorReporter.cpp
index 4fe2da4be3f4a3b972ebe22562d0a22708698669..4de23786f3d3622925e96564ff16a730dc90a828 100644
--- a/src/xercesc/validators/schema/XSDErrorReporter.cpp
+++ b/src/xercesc/validators/schema/XSDErrorReporter.cpp
@@ -56,6 +56,9 @@
 
 /**
   * $Log$
+  * Revision 1.3  2002/09/24 20:12:48  tng
+  * Performance: use XMLString::equals instead of XMLString::compareString
+  *
   * Revision 1.2  2002/05/22 20:54:14  knoaman
   * Prepare for DOM L3 :
   * - Make use of the XMLEntityHandler/XMLErrorReporter interfaces, instead of using
@@ -197,7 +200,7 @@ void XSDErrorReporter::emitError(const unsigned int toEmit,
     XMLMsgLoader* msgLoader = gErrMsgLoader;
     XMLErrorReporter::ErrTypes errType = XMLErrs::errorType((XMLErrs::Codes) toEmit);
 
-    if (!XMLString::compareString(msgDomain, XMLUni::fgValidityDomain)) {
+    if (XMLString::equals(msgDomain, XMLUni::fgValidityDomain)) {
 
         errType = XMLValid::errorType((XMLValid::Codes) toEmit);
         msgLoader = gValidMsgLoader;
@@ -244,7 +247,7 @@ void XSDErrorReporter::emitError(const unsigned int toEmit,
     XMLMsgLoader* msgLoader = gErrMsgLoader;
     XMLErrorReporter::ErrTypes errType = XMLErrs::errorType((XMLErrs::Codes) toEmit);
 
-    if (!XMLString::compareString(msgDomain, XMLUni::fgValidityDomain)) {
+    if (XMLString::equals(msgDomain, XMLUni::fgValidityDomain)) {
 
         errType = XMLValid::errorType((XMLValid::Codes) toEmit);
         msgLoader = gValidMsgLoader;
diff --git a/src/xercesc/validators/schema/XUtil.cpp b/src/xercesc/validators/schema/XUtil.cpp
index 3596109a07794be70071d478c58577395e2d2c53..f7b1b183abc115d3f7a2f9723bc77fd55a886573 100644
--- a/src/xercesc/validators/schema/XUtil.cpp
+++ b/src/xercesc/validators/schema/XUtil.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.4  2002/09/24 20:12:48  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
  * Revision 1.3  2002/05/21 19:31:45  tng
  * DOM Reorganization: modify to use the new DOM interface and remove obsolete code in XUtil.
  *
@@ -130,8 +133,8 @@ DOMElement* XUtil::getFirstChildElementNS(const DOMNode* const parent
 		{
             for (unsigned int i = 0; i < length; i++)
 			{
-                if (!XMLString::compareString(child->getNamespaceURI(), uriStr) &&
-                    !XMLString::compareString(child->getLocalName(), elemNames[i]))
+                if (XMLString::equals(child->getNamespaceURI(), uriStr) &&
+                    XMLString::equals(child->getLocalName(), elemNames[i]))
                     return (DOMElement*)child;
 			}
 		}
@@ -174,8 +177,8 @@ DOMElement* XUtil::getNextSiblingElementNS(const DOMNode* const node
 		{
             for (unsigned int i = 0; i < length; i++)
 			{
-                if (!XMLString::compareString(sibling->getNamespaceURI(), uriStr) &&
-                    !XMLString::compareString(sibling->getLocalName(), elemNames[i]))
+                if (XMLString::equals(sibling->getNamespaceURI(), uriStr) &&
+                    XMLString::equals(sibling->getLocalName(), elemNames[i]))
                     return (DOMElement*)sibling;
 			}
 		}
diff --git a/src/xercesc/validators/schema/XercesAttGroupInfo.cpp b/src/xercesc/validators/schema/XercesAttGroupInfo.cpp
index 0e6a56195a09978e0a024ee183b41e774d2851d2..a5a122cbe9a9622f5dce26ef12b9837a363c3c1e 100644
--- a/src/xercesc/validators/schema/XercesAttGroupInfo.cpp
+++ b/src/xercesc/validators/schema/XercesAttGroupInfo.cpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:50  peiyongz
- * Initial revision
+ * Revision 1.2  2002/09/24 20:12:48  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:50  peiyongz
+ * sane_include
  *
  * Revision 1.4  2001/11/20 20:21:49  knoaman
  * Add check for attribute derviation ok when redefining attribute group by restriction.
@@ -113,7 +116,7 @@ bool XercesAttGroupInfo::containsAttribute(const XMLCh* const name,
                 QName* attName = fAttributes->elementAt(i)->getAttName();
 
                 if (attName->getURI() == uri &&
-                    !XMLString::compareString(attName->getLocalPart(),name)) {
+                    XMLString::equals(attName->getLocalPart(),name)) {
                     return true;
                 }
             }
@@ -141,7 +144,7 @@ const SchemaAttDef* XercesAttGroupInfo::getAttDef(const XMLCh* const baseName,
         QName* attName = attDef->getAttName();
 
         if (uriId == (int) attName->getURI() &&
-			!XMLString::compareString(baseName, attName->getLocalPart())) {
+			XMLString::equals(baseName, attName->getLocalPart())) {
 
             return attDef;
         }
diff --git a/src/xercesc/validators/schema/identity/IdentityConstraint.cpp b/src/xercesc/validators/schema/identity/IdentityConstraint.cpp
index 1e370430d935b8d5d72dbed6234af1f1d72d7e39..c053970994b7a5e7371ef9cd6fe964a2e0460c8d 100644
--- a/src/xercesc/validators/schema/identity/IdentityConstraint.cpp
+++ b/src/xercesc/validators/schema/identity/IdentityConstraint.cpp
@@ -56,8 +56,11 @@
 
 /*
  * $Log$
- * Revision 1.1  2002/02/01 22:22:50  peiyongz
- * Initial revision
+ * Revision 1.2  2002/09/24 19:57:20  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
+ * Revision 1.1.1.1  2002/02/01 22:22:50  peiyongz
+ * sane_include
  *
  * Revision 1.2  2001/11/15 17:10:19  knoaman
  * Particle derivation checking support.
@@ -109,7 +112,7 @@ bool IdentityConstraint::operator ==(const IdentityConstraint& other) const {
     if (getType() != other.getType())
         return false;
 
-    if (XMLString::compareString(fIdentityConstraintName, other.fIdentityConstraintName))
+    if (!XMLString::equals(fIdentityConstraintName, other.fIdentityConstraintName))
         return false;
 
     if (*fSelector != *(other.fSelector))
diff --git a/src/xercesc/validators/schema/identity/ValueStore.cpp b/src/xercesc/validators/schema/identity/ValueStore.cpp
index c4e4b0014742225ea842ae20aba5ece6652cccf9..2cd850274bc5b5d1d247533d878595e79a698f9c 100644
--- a/src/xercesc/validators/schema/identity/ValueStore.cpp
+++ b/src/xercesc/validators/schema/identity/ValueStore.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2002/09/24 19:57:20  tng
+ * Performance: use XMLString::equals instead of XMLString::compareString
+ *
  * Revision 1.2  2002/02/18 06:26:50  jberry
  * Quiet codewarrior compiler warnings
  *
@@ -251,7 +254,7 @@ bool ValueStore::contains(const FieldValueMap* const other) {
             }
         }
     }
-    
+
     return false;
 }
 
@@ -260,7 +263,7 @@ bool ValueStore::isDuplicateOf(DatatypeValidator* const dv1, const XMLCh* const
 
     // if either validator's null, fall back on string comparison
     if(!dv1 || !dv2) {
-        return ((XMLString::compareString(val1, val2)) == 0);
+        return (XMLString::equals(val1, val2));
     }
 
     unsigned int val1Len = XMLString::stringLen(val1);
@@ -283,7 +286,7 @@ bool ValueStore::isDuplicateOf(DatatypeValidator* const dv1, const XMLCh* const
     // As always we are obliged to compare by reference...
     if (dv1 == dv2) {
         return ((dv1->compare(val1, val2)) == 0);
-    } 
+    }
 
     // see if this.fValidator is derived from value.fValidator:
     DatatypeValidator* tempVal = dv1;
@@ -301,7 +304,7 @@ bool ValueStore::isDuplicateOf(DatatypeValidator* const dv1, const XMLCh* const
     }
 
     // if we're here it means the types weren't related.  Must fall back to strings:
-    return ((XMLString::compareString(val1, val2)) == 0); 
+    return (XMLString::equals(val1, val2));
 }
 
 
@@ -347,7 +350,7 @@ void ValueStore::endDcocumentFragment(ValueStoreCache* const valueStoreCache) {
 void ValueStore::reportNilError(IdentityConstraint* const ic) {
 
     if (fDoReportError && ic->getType() == IdentityConstraint::KEY) {
-        fScanner->getValidator()->emitError(XMLValid::IC_KeyMatchesNillable, 
+        fScanner->getValidator()->emitError(XMLValid::IC_KeyMatchesNillable,
                                             ic->getElementName());
     }
 }