diff --git a/src/xercesc/framework/ValidationContext.hpp b/src/xercesc/framework/ValidationContext.hpp
index 856f08c091bf11c2b5b2ec5dd4eb2118bf102545..edb32316a778ab0e60940dc8f07113b1167d93f0 100644
--- a/src/xercesc/framework/ValidationContext.hpp
+++ b/src/xercesc/framework/ValidationContext.hpp
@@ -33,6 +33,7 @@ class XMLRefInfo;
 class DTDEntityDecl;
 class DatatypeValidator;
 class ElemStack;
+class NamespaceScope;
 class XMLScanner;
 
 class XMLPARSER_EXPORT ValidationContext : public XMemory
@@ -97,6 +98,7 @@ public :
     virtual void setElemStack(ElemStack* /* elemStack */) {};
     virtual const XMLCh* getURIForPrefix(XMLCh* /*prefix */) { return 0; };
     virtual void setScanner(XMLScanner* /* scanner */) { };
+    virtual void setNamespaceScope(NamespaceScope* /* nsStack */) { };
 
     //@}
 
diff --git a/src/xercesc/internal/IGXMLScanner.cpp b/src/xercesc/internal/IGXMLScanner.cpp
index f5cb5dbf93493f03d08696f5c1d0d2569c4a1c3b..9daec7a26f219280691d9dc3918a30700e7358db 100644
--- a/src/xercesc/internal/IGXMLScanner.cpp
+++ b/src/xercesc/internal/IGXMLScanner.cpp
@@ -1957,7 +1957,7 @@ bool IGXMLScanner::scanStartTag(bool& gotData)
     {
         // N.B.:  this assumes DTD validation.
         XMLAttDefList& attDefList = elemDecl->getAttDefList();
-        for(unsigned int i=0; i<attDefList.getAttDefCount(); i++)
+        for(XMLSize_t i=0; i<attDefList.getAttDefCount(); i++)
         {
             // Get the current att def, for convenience and its def type
             const XMLAttDef& curDef = attDefList.getAttDef(i);
@@ -2221,7 +2221,7 @@ bool IGXMLScanner::scanStartTagNS(bool& gotData)
             if (elemDecl) {
                 if (elemDecl->hasAttDefs()) {
                     XMLAttDefList& attDefList = elemDecl->getAttDefList();
-                    for(unsigned int i=0; i<attDefList.getAttDefCount(); i++)
+                    for(XMLSize_t i=0; i<attDefList.getAttDefCount(); i++)
                     {
                         // Get the current att def, for convenience and its def type
                         const XMLAttDef& curDef = attDefList.getAttDef(i);
diff --git a/src/xercesc/internal/IGXMLScanner2.cpp b/src/xercesc/internal/IGXMLScanner2.cpp
index cf7406490965a472c1fa09b8a8faf18b124f17a2..e3a1fb477d48d31950431da1033361607498e6a8 100644
--- a/src/xercesc/internal/IGXMLScanner2.cpp
+++ b/src/xercesc/internal/IGXMLScanner2.cpp
@@ -791,7 +791,7 @@ IGXMLScanner::buildAttList(const  RefVectorOf<KVStringPair>&  providedAttrs
 
         XMLAttDefList &attDefList = getAttDefList(fGrammarType == Grammar::SchemaGrammarType, currType, elemDecl);
 
-        for(unsigned int i=0; i<attDefList.getAttDefCount(); i++)
+        for(XMLSize_t i=0; i<attDefList.getAttDefCount(); i++)
         {
             // Get the current att def, for convenience and its def type
             const XMLAttDef *curDef = &attDefList.getAttDef(i);
diff --git a/src/xercesc/internal/SGXMLScanner.cpp b/src/xercesc/internal/SGXMLScanner.cpp
index 33e2d554ec8d4c84e1fde8d1f2d2303630e91b67..95ab0f4f7f821ca5c3efc7bc81df0305bfb81f2e 100644
--- a/src/xercesc/internal/SGXMLScanner.cpp
+++ b/src/xercesc/internal/SGXMLScanner.cpp
@@ -2741,7 +2741,7 @@ SGXMLScanner::buildAttList(const  RefVectorOf<KVStringPair>&  providedAttrs
 
         XMLAttDefList& attDefList = getAttDefList(currType, elemDecl);
 
-        for(unsigned int i=0; i<attDefList.getAttDefCount(); i++)
+        for(XMLSize_t i=0; i<attDefList.getAttDefCount(); i++)
         {
             // Get the current att def, for convenience and its def type
             XMLAttDef *curDef = &attDefList.getAttDef(i);
diff --git a/src/xercesc/internal/ValidationContextImpl.cpp b/src/xercesc/internal/ValidationContextImpl.cpp
index c9704e714fe76e70fe7e3e027824cc49111f0e65..11ce5cb65283a2a36746730eb25b84a4b7ba3419 100644
--- a/src/xercesc/internal/ValidationContextImpl.cpp
+++ b/src/xercesc/internal/ValidationContextImpl.cpp
@@ -27,6 +27,7 @@
 #include <xercesc/framework/XMLRefInfo.hpp>
 #include <xercesc/validators/DTD/DTDEntityDecl.hpp>
 #include <xercesc/validators/datatype/InvalidDatatypeValueException.hpp>
+#include <xercesc/validators/schema/NamespaceScope.hpp>
 #include <xercesc/internal/ElemStack.hpp>
 #include <xercesc/internal/XMLScanner.hpp>
 
@@ -50,6 +51,7 @@ ValidationContextImpl::ValidationContextImpl(MemoryManager* const manager)
 ,fValidatingMemberType(0)
 ,fElemStack(0)
 ,fScanner(0)
+,fNamespaceScope(0)
 {
     fIdRefList = new (fMemoryManager) RefHashTableOf<XMLRefInfo>(109, fMemoryManager);
 }
@@ -188,17 +190,23 @@ bool ValidationContextImpl::isPrefixUnknown(XMLCh* prefix) {
         return true;                
     }            
     else if (!XMLString::equals(prefix, XMLUni::fgXMLString)) {
-        fElemStack->mapPrefixToURI(prefix, (ElemStack::MapModes) ElemStack::Mode_Element, unknown);                
+        if(fElemStack && !fElemStack->isEmpty())
+            fElemStack->mapPrefixToURI(prefix, (ElemStack::MapModes) ElemStack::Mode_Element, unknown);
+        else if(fNamespaceScope)
+            unknown = (fNamespaceScope->getNamespaceForPrefix(prefix)==fNamespaceScope->getEmptyNamespaceId());
     }                
     return unknown;
 }
 
 const XMLCh* ValidationContextImpl::getURIForPrefix(XMLCh* prefix) { 
     bool unknown = false;
-    unsigned int uriId = fElemStack->mapPrefixToURI(prefix, (ElemStack::MapModes) ElemStack::Mode_Element, unknown);
-    if (!unknown) {
+    unsigned int uriId;
+    if(fElemStack)
+        uriId = fElemStack->mapPrefixToURI(prefix, (ElemStack::MapModes) ElemStack::Mode_Element, unknown);
+    else if(fNamespaceScope)
+        unknown = ((uriId = fNamespaceScope->getNamespaceForPrefix(prefix))==fNamespaceScope->getEmptyNamespaceId());
+    if (!unknown)
         return fScanner->getURIText(uriId);
-    }
     
     return XMLUni::fgZeroLenString; 
 }
diff --git a/src/xercesc/internal/ValidationContextImpl.hpp b/src/xercesc/internal/ValidationContextImpl.hpp
index cefd8941d3ccddc1f9891fcfe152fec28d6bf22c..3cdc0d88ec031d36214978069434a0b00bd899c4 100644
--- a/src/xercesc/internal/ValidationContextImpl.hpp
+++ b/src/xercesc/internal/ValidationContextImpl.hpp
@@ -26,6 +26,7 @@
 
 XERCES_CPP_NAMESPACE_BEGIN
 class ElemStack;
+class NamespaceScope;
 
 class XMLPARSER_EXPORT ValidationContextImpl : public ValidationContext
 {
@@ -93,6 +94,7 @@ public :
     virtual void setElemStack(ElemStack* elemStack);
     virtual const XMLCh* getURIForPrefix(XMLCh* prefix);
     virtual void setScanner(XMLScanner* scanner);   
+    virtual void setNamespaceScope(NamespaceScope* nsStack);
 
 
     //@}
@@ -126,16 +128,18 @@ private:
     //      will not be accurate unless the type of the most recently-validated
     //      element/attribute is in fact a union datatype.
     //  fElemStack
-    //      Need access to elemstack to look up URI's that are inscope.
+    //      Need access to elemstack to look up URI's that are inscope (while validating an XML).
+    //  fNamespaceScope
+    //      Need access to namespace scope to look up URI's that are inscope (while loading a schema).
     // -----------------------------------------------------------------------
 
     RefHashTableOf<XMLRefInfo>*         fIdRefList;
     const NameIdPool<DTDEntityDecl>*    fEntityDeclPool;
     bool                                fToCheckIdRefList;
     DatatypeValidator *                 fValidatingMemberType;    
-    ElemStack*      fElemStack;
-    XMLScanner*     fScanner;
-
+    ElemStack*                          fElemStack;
+    XMLScanner*                         fScanner;
+    NamespaceScope*                     fNamespaceScope;
 
 };
 
@@ -159,6 +163,10 @@ inline void ValidationContextImpl::setScanner(XMLScanner* scanner) {
     fScanner = scanner;
 }
 
+inline void ValidationContextImpl::setNamespaceScope(NamespaceScope* nsStack) {
+    fNamespaceScope = nsStack;
+}
+
 XERCES_CPP_NAMESPACE_END
 
 #endif
diff --git a/src/xercesc/validators/DTD/DTDValidator.cpp b/src/xercesc/validators/DTD/DTDValidator.cpp
index 72b19d3cf631bf2dc8402bd40ad12c4763384fd9..7f81b25002c0e113745fe70dee9a98385c670afd 100644
--- a/src/xercesc/validators/DTD/DTDValidator.cpp
+++ b/src/xercesc/validators/DTD/DTDValidator.cpp
@@ -478,7 +478,7 @@ void DTDValidator::preContentValidation(bool
         bool seenNOTATION = false;
         bool elemEmpty = (curElem.getModelType() == DTDElementDecl::Empty);
 
-        for(unsigned int i=0; i<attDefList.getAttDefCount(); i++)
+        for(XMLSize_t i=0; i<attDefList.getAttDefCount(); i++)
         {
             const XMLAttDef& curAttDef = attDefList.getAttDef(i);
 
diff --git a/src/xercesc/validators/schema/GeneralAttributeCheck.cpp b/src/xercesc/validators/schema/GeneralAttributeCheck.cpp
index 444de5a60b825384214613b2f0049d729ef01252..657526f2ae3ea9e4d297107e1a9ed475ce7d1dbe 100644
--- a/src/xercesc/validators/schema/GeneralAttributeCheck.cpp
+++ b/src/xercesc/validators/schema/GeneralAttributeCheck.cpp
@@ -152,7 +152,6 @@ void GeneralAttributeCheck::initialize()
 // ---------------------------------------------------------------------------
 GeneralAttributeCheck::GeneralAttributeCheck(MemoryManager* const manager)
     : fMemoryManager(manager)
-    , fValidationContext(0)
     , fIDValidator(manager)
 {
 }
@@ -302,7 +301,7 @@ void GeneralAttributeCheck::validate(const DOMElement* const elem,
     bool isInvalid = false;
     DatatypeValidator* dv = 0;
 
-    fValidationContext = schema->fSchemaInfo->getValidationContext();
+    ValidationContext* fValidationContext = schema->fSchemaInfo->getValidationContext();
     switch (dvIndex) {
     case DV_Form:
         if (!XMLString::equals(attValue, SchemaSymbols::fgATTVAL_QUALIFIED)
diff --git a/src/xercesc/validators/schema/GeneralAttributeCheck.hpp b/src/xercesc/validators/schema/GeneralAttributeCheck.hpp
index 8cfa5e3026854258ffcaff075579968c7f52193b..b98b64a101b1755209378f319f0e20cc12bf10a7 100644
--- a/src/xercesc/validators/schema/GeneralAttributeCheck.hpp
+++ b/src/xercesc/validators/schema/GeneralAttributeCheck.hpp
@@ -187,12 +187,6 @@ public:
     // -----------------------------------------------------------------------
     unsigned short getFacetId(const XMLCh* const facetName, MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
 
-    // -----------------------------------------------------------------------
-    //  Setter methods
-    // -----------------------------------------------------------------------
-
-    inline void setValidationContext(ValidationContext* const);
-
     // -----------------------------------------------------------------------
     //  Validation methods
     // -----------------------------------------------------------------------
@@ -236,7 +230,6 @@ private:
     static unsigned short                    fgElemAttTable[E_Count][A_Count];
     static const XMLCh*                      fAttNames[A_Count];
     MemoryManager*                           fMemoryManager;
-    ValidationContext*                       fValidationContext;
     IDDatatypeValidator                      fIDValidator;
 
 private:
@@ -255,14 +248,6 @@ GeneralAttributeCheck::getFacetId(const XMLCh* const facetName, MemoryManager* c
     return fFacetsMap->get(facetName, manager);
 }
 
-// ---------------------------------------------------------------------------
-//  GeneralAttributeCheck: Setter methods
-// ---------------------------------------------------------------------------
-inline void GeneralAttributeCheck::setValidationContext(ValidationContext* const newValidationContext)
-{
-    fValidationContext = newValidationContext;
-}
-
 XERCES_CPP_NAMESPACE_END
 
 #endif
diff --git a/src/xercesc/validators/schema/NamespaceScope.cpp b/src/xercesc/validators/schema/NamespaceScope.cpp
index 73197b39891fa8c24dcaa1abd97a028a7c5bc534..0e9703f46b9edf942fecbff85d5266e1b1409529 100644
--- a/src/xercesc/validators/schema/NamespaceScope.cpp
+++ b/src/xercesc/validators/schema/NamespaceScope.cpp
@@ -67,11 +67,10 @@ NamespaceScope::NamespaceScope(const NamespaceScope* const initialize, MemoryMan
         reset(initialize->fEmptyNamespaceId);
 
         // copy the existing bindings
-        int startAt = initialize->fStackTop-1;
-        for (int index = startAt; index >= 0; index--)
+        for (unsigned int index = initialize->fStackTop; index > 0; index--)
         {
             // Get a convenience pointer to the current element
-            StackElem* curRow = initialize->fStack[index];
+            StackElem* curRow = initialize->fStack[index-1];
 
             // If no prefixes mapped at this level, then go the next one
             if (!curRow->fMapCount)
@@ -208,11 +207,10 @@ NamespaceScope::getNamespaceForPrefix(const XMLCh* const prefixToMap) const {
     //  Start at the stack top and work backwards until we come to some
     //  element that mapped this prefix.
     //
-    int startAt = fStackTop-1;
-    for (int index = startAt; index >= 0; index--)
+    for (unsigned int index = fStackTop; index > 0; index--)
     {
         // Get a convenience pointer to the current element
-        StackElem* curRow = fStack[index];
+        StackElem* curRow = fStack[index-1];
 
         // If no prefixes mapped at this level, then go the next one
         if (!curRow->fMapCount)
diff --git a/src/xercesc/validators/schema/NamespaceScope.hpp b/src/xercesc/validators/schema/NamespaceScope.hpp
index 13f40de77c8047e6269cab804016d986548b552e..ecd9b5b95e43e1112747ba3240fbd2e31f8fcd2a 100644
--- a/src/xercesc/validators/schema/NamespaceScope.hpp
+++ b/src/xercesc/validators/schema/NamespaceScope.hpp
@@ -100,6 +100,7 @@ public :
     // -----------------------------------------------------------------------
     bool isEmpty() const;
     void reset(const unsigned int emptyId);
+    unsigned int getEmptyNamespaceId() const;
 
 
 private :
@@ -152,6 +153,12 @@ inline bool NamespaceScope::isEmpty() const
     return (fStackTop == 0);
 }
 
+inline unsigned int NamespaceScope::getEmptyNamespaceId() const
+{
+    return fEmptyNamespaceId;
+}
+
+
 XERCES_CPP_NAMESPACE_END
 
 #endif
diff --git a/src/xercesc/validators/schema/SchemaGrammar.hpp b/src/xercesc/validators/schema/SchemaGrammar.hpp
index 190dc2233eeca7d9fd559ebef8e44423b507358f..bce6d2e6607b23b36ac07c66de35fc639a0ae3d6 100644
--- a/src/xercesc/validators/schema/SchemaGrammar.hpp
+++ b/src/xercesc/validators/schema/SchemaGrammar.hpp
@@ -170,6 +170,7 @@ public:
     DatatypeValidatorFactory* getDatatypeRegistry();
     RefHash2KeysTableOf<ElemVector>* getValidSubstitutionGroups() const;
 
+    // @deprecated
     ValidationContext*          getValidationContext() const;
 
     // -----------------------------------------------------------------------
@@ -317,6 +318,7 @@ private:
     RefHashTableOf<XercesGroupInfo>*         fGroupInfoRegistry;
     RefHashTableOf<XercesAttGroupInfo>*      fAttGroupInfoRegistry;
     RefHash2KeysTableOf<ElemVector>*         fValidSubstitutionGroups;
+    // @deprecated
     ValidationContext*                       fValidationContext;
     MemoryManager*                           fMemoryManager;
     XMLSchemaDescription*                    fGramDesc;
@@ -376,6 +378,7 @@ SchemaGrammar::getValidSubstitutionGroups() const {
     return fValidSubstitutionGroups;
 }
 
+// @deprecated
 inline ValidationContext* SchemaGrammar::getValidationContext() const {
 
     return fValidationContext;
diff --git a/src/xercesc/validators/schema/SchemaInfo.cpp b/src/xercesc/validators/schema/SchemaInfo.cpp
index 02ee3892a33e9e1c091361cbe8fcdca88f3c8545..d6bddeecde34fcb50f5b1ec9a6a8522e810392e7 100644
--- a/src/xercesc/validators/schema/SchemaInfo.cpp
+++ b/src/xercesc/validators/schema/SchemaInfo.cpp
@@ -80,6 +80,8 @@ SchemaInfo::SchemaInfo(const unsigned short elemAttrDefaultQualified,
     fNamespaceScope = new (fMemoryManager) NamespaceScope(currNamespaceScope, fMemoryManager);
     fCurrentSchemaURL = XMLString::replicate(schemaURL, fMemoryManager);
 	fTargetNSURIString = XMLString::replicate(targetNSURIString, fMemoryManager);
+
+    fValidationContext->setNamespaceScope(fNamespaceScope);
 }
 
 
diff --git a/src/xercesc/validators/schema/SchemaValidator.cpp b/src/xercesc/validators/schema/SchemaValidator.cpp
index 918d66a04bca0bc2b5c55b3d2c81225ec63d9d01..7d743ef6b43c31d7e75350f9c34b5fb4cc0f55a5 100644
--- a/src/xercesc/validators/schema/SchemaValidator.cpp
+++ b/src/xercesc/validators/schema/SchemaValidator.cpp
@@ -810,7 +810,7 @@ void SchemaValidator::preContentValidation(bool,
                 XMLAttDefList& attDefList = curElem.getAttDefList();
                 bool seenId = false;
 
-                for(unsigned int i=0; i<attDefList.getAttDefCount(); i++)
+                for(XMLSize_t i=0; i<attDefList.getAttDefCount(); i++)
                 {
                     const XMLAttDef& curAttDef = attDefList.getAttDef(i);
 
diff --git a/src/xercesc/validators/schema/TraverseSchema.cpp b/src/xercesc/validators/schema/TraverseSchema.cpp
index a756df61df862c445f68b0ffc8cd74b4db9abe4d..e9ecd0b13e30f53303c51849fb494bb58c7eb5e8 100644
--- a/src/xercesc/validators/schema/TraverseSchema.cpp
+++ b/src/xercesc/validators/schema/TraverseSchema.cpp
@@ -382,8 +382,6 @@ void TraverseSchema::preprocessSchema(DOMElement* const schemaRoot,
         fTargetNSURI = fURIStringPool->addOrFind(fTargetNSURIString);
     }
 
-    fAttributeCheck.setValidationContext(fSchemaGrammar->getValidationContext());
-
     SchemaInfo* currInfo = new (fMemoryManager) SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount,
                                           fSchemaInfo?fSchemaInfo->getNamespaceScope():NULL,
                                           schemaURL,
@@ -2059,7 +2057,7 @@ TraverseSchema::traverseAny(const DOMElement* const elem) {
                 else {
                     try {
                         anyURIDV->validate(tokenElem
-                                         , fSchemaGrammar->getValidationContext()
+                                         , fSchemaInfo->getValidationContext()
                                          , fMemoryManager);
                     }
                     catch(const XMLException& excep) {
@@ -2516,7 +2514,7 @@ void TraverseSchema::traverseAttributeDecl(const DOMElement* const elem,
         }
         try {
             dv->validate(valueToCheck
-                      , fSchemaGrammar->getValidationContext()
+                      , fSchemaInfo->getValidationContext()
                       , fMemoryManager);
         }
         catch (const XMLException& excep) {
@@ -4247,7 +4245,7 @@ SchemaAttDef* TraverseSchema::traverseAnyAttribute(const DOMElement* const elem)
 
                 try {
                     anyURIDV->validate(token
-                                     , fSchemaGrammar->getValidationContext()
+                                     , fSchemaInfo->getValidationContext()
                                      , fMemoryManager);
                 }
                 catch(const XMLException& excep) {
@@ -5147,7 +5145,7 @@ TraverseSchema::findDTValidator(const DOMElement* const elem,
 const XMLCh* TraverseSchema::resolvePrefixToURI(const DOMElement* const elem,
                                                 const XMLCh* const prefix) {
 
-    int nameSpaceIndex = fSchemaInfo->getNamespaceScope()->getNamespaceForPrefix(prefix);
+    unsigned int nameSpaceIndex = fSchemaInfo->getNamespaceScope()->getNamespaceForPrefix(prefix);
     const XMLCh* uriStr = fURIStringPool->getValueForId(nameSpaceIndex);
 
     if ((!uriStr || !*uriStr) && (prefix && *prefix)) {
@@ -6026,7 +6024,7 @@ void TraverseSchema::processAttributeDeclRef(const DOMElement* const elem,
                     else {
                         try {
                             attDV->validate(valueConstraint
-                                          , fSchemaGrammar->getValidationContext()
+                                          , fSchemaInfo->getValidationContext()
                                           , fMemoryManager);
                         }
                         catch(const XMLException& excep) {
@@ -6826,7 +6824,7 @@ void TraverseSchema::processAttributes(const DOMElement* const elem,
         SchemaAttDefList& baseAttList = (SchemaAttDefList&)
                                         baseTypeInfo->getAttDefList();
 
-        for (unsigned int i=0; i<baseAttList.getAttDefCount(); i++) {
+        for (XMLSize_t i=0; i<baseAttList.getAttDefCount(); i++) {
 
             SchemaAttDef& attDef = (SchemaAttDef&) baseAttList.getAttDef(i);
             QName* attName = attDef.getAttName();
@@ -6962,7 +6960,6 @@ void TraverseSchema::restoreSchemaInfo(SchemaInfo* const toRestore,
         fAttributeDeclRegistry = fSchemaGrammar->getAttributeDeclRegistry();
         fComplexTypeRegistry = fSchemaGrammar->getComplexTypeRegistry();
         fValidSubstitutionGroups = fSchemaGrammar->getValidSubstitutionGroups();
-        fAttributeCheck.setValidationContext(fSchemaGrammar->getValidationContext());
 
     }
 
@@ -7892,7 +7889,7 @@ void TraverseSchema::checkAttDerivationOK(const DOMElement* const elem,
     SchemaAttDefList& childAttList = (SchemaAttDefList&) childTypeInfo->getAttDefList();
     const SchemaAttDef* baseAttWildCard = baseTypeInfo->getAttWildCard();
 
-    for (unsigned int i=0; i<childAttList.getAttDefCount(); i++) {
+    for (XMLSize_t i=0; i<childAttList.getAttDefCount(); i++) {
 
         SchemaAttDef& childAttDef = (SchemaAttDef&) childAttList.getAttDef(i);
         QName* childAttName = childAttDef.getAttName();
diff --git a/src/xercesc/validators/schema/XSDDOMParser.cpp b/src/xercesc/validators/schema/XSDDOMParser.cpp
index 08efc1cdacfaadd20393b2aa7205e2b3ec3700bc..71c0d8623795bb1dd7e29e8e6908c6abe4cf467a 100644
--- a/src/xercesc/validators/schema/XSDDOMParser.cpp
+++ b/src/xercesc/validators/schema/XSDDOMParser.cpp
@@ -276,7 +276,7 @@ void XSDDOMParser::startElement( const XMLElementDecl&       elemDecl
     }
 
     DOMElementImpl *elemImpl = (DOMElementImpl *) elem;
-    for (unsigned int index = 0; index < attrCount; ++index)
+    for (XMLSize_t index = 0; index < attrCount; ++index)
     {
         const XMLAttr* oneAttrib = attrList.elementAt(index);
         unsigned int attrURIId = oneAttrib->getURIId();
@@ -319,7 +319,7 @@ void XSDDOMParser::startElement( const XMLElementDecl&       elemDecl
         XMLAttDef* attr = 0;
         DOMAttrImpl * insertAttr = 0;
 
-        for (unsigned int i=0; i<defAttrs->getAttDefCount(); i++)
+        for (XMLSize_t i=0; i<defAttrs->getAttDefCount(); i++)
         {
             attr = &defAttrs->getAttDef(i);
 
diff --git a/tests/src/XSTSHarness/regression/XERCESC-1825/test.xml b/tests/src/XSTSHarness/regression/XERCESC-1825/test.xml
new file mode 100644
index 0000000000000000000000000000000000000000..759181fa9c4d95c9e8737b9251d9f7d5475e5b4e
--- /dev/null
+++ b/tests/src/XSTSHarness/regression/XERCESC-1825/test.xml
@@ -0,0 +1,7 @@
+<t:root xmlns:t="test"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="test test.xsd">
+
+  <qname y="t:y"><a></a></qname>
+
+</t:root>
diff --git a/tests/src/XSTSHarness/regression/XERCESC-1825/test.xsd b/tests/src/XSTSHarness/regression/XERCESC-1825/test.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..332adef2d2ca89661a8329c772e3ca3282030ea6
--- /dev/null
+++ b/tests/src/XSTSHarness/regression/XERCESC-1825/test.xsd
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test">
+
+  <complexType name="qname">
+    <sequence>
+      <element name="a" type="QName" xmlns:z="test" default="z:a"/>
+    </sequence>
+    <attribute name="x" type="QName" default="t:x"/>
+    <attribute name="y" type="QName" fixed="t:y" use="required"/>
+  </complexType>
+
+  <complexType name="type">
+    <sequence>
+      <element name="qname" type="t:qname"/>
+    </sequence>
+  </complexType>
+
+  <element name="root" type="t:type"/>
+
+</schema>
diff --git a/tests/src/XSTSHarness/regression/XERCESC-1825/test2.xsd b/tests/src/XSTSHarness/regression/XERCESC-1825/test2.xsd
new file mode 100644
index 0000000000000000000000000000000000000000..161ca91db23c08774b7597ecb07f11d5363d58c5
--- /dev/null
+++ b/tests/src/XSTSHarness/regression/XERCESC-1825/test2.xsd
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:t="test" targetNamespace="test">
+
+  <complexType name="qname">
+    <sequence>
+      <element name="a" type="QName" default="x:a"/>
+    </sequence>
+    <attribute name="x" type="QName" default="x:x"/>
+    <attribute name="y" type="QName" fixed="x:y" use="required"/>
+  </complexType>
+
+  <complexType name="type">
+    <sequence>
+      <element name="qname" type="t:qname"/>
+    </sequence>
+  </complexType>
+
+  <element name="root" type="t:type"/>
+
+</schema>
diff --git a/tests/src/XSTSHarness/regression/Xerces.testSet b/tests/src/XSTSHarness/regression/Xerces.testSet
index bc03417096ff48b8a78ae00bd07b60abaad99d63..260332110787026544b387c74d7085c4e0d258e2 100644
--- a/tests/src/XSTSHarness/regression/Xerces.testSet
+++ b/tests/src/XSTSHarness/regression/Xerces.testSet
@@ -568,6 +568,33 @@
       <current status="accepted" date="2008-07-17"/>
     </instanceTest>
   </testGroup>
+  <testGroup name="XERCESC-1825-1">
+    <annotation>
+      <documentation>Default value of QName type with non-empty prefix causes segfault</documentation>
+    </annotation>
+    <documentationReference xlink:href="https://issues.apache.org/jira/browse/XERCESC-1825"/>
+    <schemaTest name="XERCESC-1825-1-1">
+      <schemaDocument xlink:href="./XERCESC-1825/test.xsd"/>
+      <expected validity="valid"/>
+      <current status="accepted" date="2008-12-29"/>
+    </schemaTest>
+    <instanceTest name="XERCESC-1825-1-2">
+      <instanceDocument xlink:href="./XERCESC-1825/test.xml"/>
+      <expected validity="valid"/>
+      <current status="accepted" date="2008-12-29"/>
+    </instanceTest>
+  </testGroup>
+  <testGroup name="XERCESC-1825-2">
+    <annotation>
+      <documentation>Default value of QName type with non-empty prefix causes segfault</documentation>
+    </annotation>
+    <documentationReference xlink:href="https://issues.apache.org/jira/browse/XERCESC-1825"/>
+    <schemaTest name="XERCESC-1825-2-1">
+      <schemaDocument xlink:href="./XERCESC-1825/test2.xsd"/>
+      <expected validity="invalid"/>
+      <current status="accepted" date="2008-12-29"/>
+    </schemaTest>
+  </testGroup>
   <testGroup name="XERCESC-1832">
     <annotation>
       <documentation>Namespace definitions attached to xs:extension/xs:restriction are not processed</documentation>