diff --git a/src/xercesc/validators/schema/GeneralAttributeCheck.cpp b/src/xercesc/validators/schema/GeneralAttributeCheck.cpp
index 8e50129780ebd529e1430a2755013d0c2072904a..50de0b0140c21a28f3dcb488c5bf464501679e0e 100644
--- a/src/xercesc/validators/schema/GeneralAttributeCheck.cpp
+++ b/src/xercesc/validators/schema/GeneralAttributeCheck.cpp
@@ -16,6 +16,10 @@
 
 /*
  * $Log$
+ * Revision 1.23  2004/09/29 20:58:10  knoaman
+ * [Bug 1209] Problem with id usage across schema
+ * http://issues.apache.org/jira/browse/XERCESC-1209
+ *
  * Revision 1.22  2004/09/08 13:56:56  peiyongz
  * Apache License Version 2.0
  *
@@ -470,6 +474,7 @@ void GeneralAttributeCheck::validate(const DOMElement* const elem,
     bool isInvalid = false;
     DatatypeValidator* dv = 0;
 
+    fValidationContext = schema->fSchemaInfo->getValidationContext();
     switch (dvIndex) {
     case DV_Form:
         if (!XMLString::equals(attValue, SchemaSymbols::fgATTVAL_QUALIFIED)
diff --git a/src/xercesc/validators/schema/SchemaInfo.cpp b/src/xercesc/validators/schema/SchemaInfo.cpp
index 4ee4e2a7eb54fce47cadb228757e2517e1b525d6..54ee4c647373d7a97719d3f0c17670e301a498a1 100644
--- a/src/xercesc/validators/schema/SchemaInfo.cpp
+++ b/src/xercesc/validators/schema/SchemaInfo.cpp
@@ -16,6 +16,10 @@
 
 /*
  * $Log$
+ * Revision 1.13  2004/09/29 20:58:10  knoaman
+ * [Bug 1209] Problem with id usage across schema
+ * http://issues.apache.org/jira/browse/XERCESC-1209
+ *
  * Revision 1.12  2004/09/08 13:56:56  peiyongz
  * Apache License Version 2.0
  *
@@ -80,6 +84,7 @@
 #include <xercesc/validators/schema/XUtil.hpp>
 #include <xercesc/validators/schema/SchemaSymbols.hpp>
 #include <xercesc/util/XMLString.hpp>
+#include <xercesc/internal/ValidationContextImpl.hpp>
 
 XERCES_CPP_NAMESPACE_BEGIN
 
@@ -115,12 +120,14 @@ SchemaInfo::SchemaInfo(const unsigned short elemAttrDefaultQualified,
     , fRecursingAnonTypes(0)
     , fRecursingTypeNames(0)
     , fNonXSAttList(0)
+    , fValidationContext(0)
     , fMemoryManager(manager)
 {
     fImportingInfoList = new (fMemoryManager) RefVectorOf<SchemaInfo>(4, false, fMemoryManager);
     for (unsigned int i = 0; i < C_Count; i++)
         fTopLevelComponents[i] = 0;
     fNonXSAttList = new (fMemoryManager) ValueVectorOf<DOMNode*>(2, fMemoryManager);
+    fValidationContext = new (fMemoryManager) ValidationContextImpl(fMemoryManager);
 }
 
 
@@ -156,6 +163,9 @@ SchemaInfo::~SchemaInfo()
 
     delete fNonXSAttList;
     fNonXSAttList = 0;
+
+    delete fValidationContext;
+    fValidationContext = 0;
 }
 
 // ---------------------------------------------------------------------------
diff --git a/src/xercesc/validators/schema/SchemaInfo.hpp b/src/xercesc/validators/schema/SchemaInfo.hpp
index dee4e0c7138ffe2101dbc223a0beba65380edfb7..46a20bd907020d0ed60cae33862b8b2f09b5119d 100644
--- a/src/xercesc/validators/schema/SchemaInfo.hpp
+++ b/src/xercesc/validators/schema/SchemaInfo.hpp
@@ -43,6 +43,12 @@
 
 XERCES_CPP_NAMESPACE_BEGIN
 
+// ---------------------------------------------------------------------------
+//  Forward Declarations
+// ---------------------------------------------------------------------------
+class ValidationContext;
+
+
 class VALIDATORS_EXPORT SchemaInfo : public XMemory
 {
 public:
@@ -97,7 +103,8 @@ public:
     BaseRefVectorEnumerator<SchemaInfo>   getImportingListEnumerator() const;
     ValueVectorOf<const DOMElement*>* getRecursingAnonTypes() const;
     ValueVectorOf<const XMLCh*>*      getRecursingTypeNames() const;
-    ValueVectorOf<DOMNode*>* getNonXSAttList() const;
+    ValueVectorOf<DOMNode*>*          getNonXSAttList() const;
+    ValidationContext*                getValidationContext() const;
 
     // -----------------------------------------------------------------------
     //  Setter methods
@@ -164,6 +171,7 @@ private:
     ValueVectorOf<const XMLCh*>*      fRecursingTypeNames;
     ValueVectorOf<DOMElement*>*       fTopLevelComponents[C_Count];
     ValueVectorOf<DOMNode*>*          fNonXSAttList;
+    ValidationContext*                fValidationContext;
     MemoryManager*                    fMemoryManager;
 };
 
@@ -339,6 +347,11 @@ inline SchemaInfo* SchemaInfo::getImportInfo(const unsigned int namespaceURI) co
     return currInfo;
 }
 
+inline ValidationContext* SchemaInfo::getValidationContext() const {
+
+    return fValidationContext;
+}
+
 inline bool SchemaInfo::containsInfo(const SchemaInfo* const toCheck,
                                      const ListType aListType) const {