diff --git a/src/xercesc/framework/MemBufInputSource.cpp b/src/xercesc/framework/MemBufInputSource.cpp
index b425adb99db9c0c23253b25014bd34a7d62419b1..7c2d72b8ee34face2d6a85ee36b09978d3310463 100644
--- a/src/xercesc/framework/MemBufInputSource.cpp
+++ b/src/xercesc/framework/MemBufInputSource.cpp
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.4  2003/05/16 03:11:30  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.3  2003/05/15 18:26:07  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -139,6 +142,7 @@ BinInputStream* MemBufInputSource::makeStream() const
         , fByteCount
         , fCopyBufToStream ? BinMemInputStream::BufOpt_Copy
                            : BinMemInputStream::BufOpt_Reference
+        , getMemoryManager()
     );
 }
 
diff --git a/src/xercesc/framework/StdInInputSource.cpp b/src/xercesc/framework/StdInInputSource.cpp
index 58f2b3a3d80ecf8d7033d499e48c87af3de273dd..7c6f2f95b331fd7fbb9492cfe38b152732b7b9f2 100644
--- a/src/xercesc/framework/StdInInputSource.cpp
+++ b/src/xercesc/framework/StdInInputSource.cpp
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.3  2003/05/16 03:11:30  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.2  2002/11/04 15:00:21  tng
  * C++ Namespace Support.
  *
@@ -93,7 +96,7 @@ XERCES_CPP_NAMESPACE_BEGIN
 BinInputStream* StdInInputSource::makeStream() const
 {
     // Open a binary file stream for the standard input file handle
-    BinFileInputStream* retStream = new BinFileInputStream
+    BinFileInputStream* retStream = new (getMemoryManager()) BinFileInputStream
     (
         XMLPlatformUtils::openStdInHandle()
     );
diff --git a/src/xercesc/util/BinFileInputStream.cpp b/src/xercesc/util/BinFileInputStream.cpp
index 225a9e2d876946181c412abdc8e63d82f02f893d..51a240a7e90a7e7fe70a7651f5a4dc8a8fbcccad 100644
--- a/src/xercesc/util/BinFileInputStream.cpp
+++ b/src/xercesc/util/BinFileInputStream.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2003/05/16 03:11:22  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.2  2002/11/04 15:22:03  tng
  * C++ Namespace Support.
  *
@@ -107,13 +110,14 @@ BinFileInputStream::BinFileInputStream(const XMLCh* const fileName) :
     fSource = XMLPlatformUtils::openFile(fileName);
 }
 
-BinFileInputStream::BinFileInputStream(const char* const fileName) :
+BinFileInputStream::BinFileInputStream(const char* const fileName,
+                                       MemoryManager* const manager) :
 
     fSource(0)
 {
     // Transcode the file name and put a janitor on the temp buffer
-    XMLCh* realName = XMLString::transcode(fileName);
-    ArrayJanitor<XMLCh> janName(realName);
+    XMLCh* realName = XMLString::transcode(fileName, manager);
+    ArrayJanitor<XMLCh> janName(realName, manager);
 
     // Try to open the file
     fSource = XMLPlatformUtils::openFile(realName);
diff --git a/src/xercesc/util/BinFileInputStream.hpp b/src/xercesc/util/BinFileInputStream.hpp
index 6f80bf471926958466e9bf1b55cb600e48b1fc30..7d1853bd3decc964cfa7c1ce671ed346e04addff 100644
--- a/src/xercesc/util/BinFileInputStream.hpp
+++ b/src/xercesc/util/BinFileInputStream.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2003/05/16 03:11:22  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.2  2002/11/04 15:22:03  tng
  * C++ Namespace Support.
  *
@@ -97,6 +100,7 @@ public :
     BinFileInputStream
     (
         const   char* const     fileName
+        , MemoryManager* const  manager
     );
 
     BinFileInputStream
diff --git a/src/xercesc/util/BinMemInputStream.cpp b/src/xercesc/util/BinMemInputStream.cpp
index de561ab12f393b69df16c3647f4e371bc95d88f7..60c86d4dca8e08c4568fc37bf510bfc91ab1512f 100644
--- a/src/xercesc/util/BinMemInputStream.cpp
+++ b/src/xercesc/util/BinMemInputStream.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2003/05/16 03:11:22  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.2  2002/11/04 15:22:03  tng
  * C++ Namespace Support.
  *
@@ -89,6 +92,7 @@
 //  Includes
 // ---------------------------------------------------------------------------
 #include <xercesc/util/BinMemInputStream.hpp>
+#include <xercesc/framework/MemoryManager.hpp>
 #include <string.h>
 
 XERCES_CPP_NAMESPACE_BEGIN
@@ -96,18 +100,23 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 //  BinMemInputStream: Constructors and Destructor
 // ---------------------------------------------------------------------------
-BinMemInputStream::BinMemInputStream(   const   XMLByte* const  initData
-                                        , const unsigned int    capacity
-                                        , const BufOpts         bufOpt) :
+BinMemInputStream::BinMemInputStream( const XMLByte* const       initData
+                                    , const unsigned int         capacity
+                                    , const BufOpts              bufOpt
+                                    ,       MemoryManager* const manager) :
     fBuffer(0)
     , fBufOpt(bufOpt)
     , fCapacity(capacity)
     , fCurIndex(0)
+    , fMemoryManager(manager)
 {
     // According to the buffer option, do the right thing
     if (fBufOpt == BufOpt_Copy)
     {
-        XMLByte* tmpBuf = new XMLByte[fCapacity];
+        XMLByte* tmpBuf = (XMLByte*) fMemoryManager->allocate
+        (
+            fCapacity * sizeof(XMLByte)
+        );//new XMLByte[fCapacity];
         memcpy(tmpBuf, initData, capacity);
         fBuffer = tmpBuf;
     }
@@ -124,7 +133,7 @@ BinMemInputStream::~BinMemInputStream()
     //  cast off the const'ness in that case in order to delete it.
     //
     if ((fBufOpt == BufOpt_Adopt) || (fBufOpt == BufOpt_Copy))
-        delete [] (XMLByte*)fBuffer;
+        fMemoryManager->deallocate((XMLByte*)fBuffer);//delete [] (XMLByte*)fBuffer;
 }
 
 
diff --git a/src/xercesc/util/BinMemInputStream.hpp b/src/xercesc/util/BinMemInputStream.hpp
index a728cae6e2f9b99f0d2f5b2d54bd79c7e071d349..b69cc7b85674206600e17d5d00edde077e0587f8 100644
--- a/src/xercesc/util/BinMemInputStream.hpp
+++ b/src/xercesc/util/BinMemInputStream.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2003/05/16 03:11:22  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.2  2002/11/04 15:22:03  tng
  * C++ Namespace Support.
  *
@@ -80,6 +83,7 @@
 #define BINMEMINPUTSTREAM_HPP
 
 #include <xercesc/util/BinInputStream.hpp>
+#include <xercesc/util/PlatformUtils.hpp>
 
 XERCES_CPP_NAMESPACE_BEGIN
 
@@ -105,6 +109,7 @@ public :
         const   XMLByte* const  initData
         , const unsigned int    capacity
         , const BufOpts         bufOpt = BufOpt_Copy
+        , MemoryManager* const  manager = XMLPlatformUtils::fgMemoryManager
     );
     virtual ~BinMemInputStream();
 
@@ -149,6 +154,7 @@ private :
     BufOpts         fBufOpt;
     unsigned int    fCapacity;
     unsigned int    fCurIndex;
+    MemoryManager*  fMemoryManager;
 };
 
 
diff --git a/src/xercesc/util/RefArrayVectorOf.c b/src/xercesc/util/RefArrayVectorOf.c
index a89dcbf698d671c736780b02e52a841c8cfc20ea..0f23307400dd49f1041c6d18291c3189f5667fa0 100644
--- a/src/xercesc/util/RefArrayVectorOf.c
+++ b/src/xercesc/util/RefArrayVectorOf.c
@@ -21,7 +21,7 @@ template <class TElem> RefArrayVectorOf<TElem>::~RefArrayVectorOf()
     if (fAdoptedElems)
     {
       for (unsigned int index = 0; index < fCurCount; index++)
-        delete[] fElemList[index];
+        fMemoryManager->deallocate(fElemList[index]);//delete[] fElemList[index];
     }
     fMemoryManager->deallocate(fElemList);//delete [] fElemList;
 }
diff --git a/src/xercesc/util/XMLDouble.cpp b/src/xercesc/util/XMLDouble.cpp
index 954f9e756cf455165ac38f9b1d61474fb05d2371..c56d0081a44a170b91b093e5638dbda0574d903a 100644
--- a/src/xercesc/util/XMLDouble.cpp
+++ b/src/xercesc/util/XMLDouble.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.9  2003/05/16 03:11:22  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.8  2003/03/10 20:55:58  peiyongz
  * Schema Errata E2-40 double/float
  *
@@ -160,8 +163,8 @@ XMLDouble::~XMLDouble()
 
 void XMLDouble::checkBoundary(const XMLCh* const strValue)
 {
-    char *nptr = XMLString::transcode(strValue);
-    ArrayJanitor<char> jan1(nptr);
+    char *nptr = XMLString::transcode(strValue, getMemoryManager());
+    ArrayJanitor<char> jan1(nptr, getMemoryManager());
     int   strLen = strlen(nptr);
     char *endptr = 0;
     errno = 0;
diff --git a/src/xercesc/util/XMLFloat.cpp b/src/xercesc/util/XMLFloat.cpp
index 6d167db926003598506e576ad6c6ead8ebdc628b..472f94c8475e53932967eb4560c9fc425fef9e9d 100644
--- a/src/xercesc/util/XMLFloat.cpp
+++ b/src/xercesc/util/XMLFloat.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.10  2003/05/16 03:11:22  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.9  2003/03/10 20:55:58  peiyongz
  * Schema Errata E2-40 double/float
  *
@@ -155,8 +158,8 @@ XMLFloat::~XMLFloat()
 
 void XMLFloat::checkBoundary(const XMLCh* const strValue)
 {
-    char *nptr = XMLString::transcode(strValue);
-    ArrayJanitor<char> jan1(nptr);
+    char *nptr = XMLString::transcode(strValue, getMemoryManager());
+    ArrayJanitor<char> jan1(nptr, getMemoryManager());
     int   strLen = strlen(nptr);
     char *endptr = 0;
     errno = 0;
diff --git a/src/xercesc/util/XMLStringTokenizer.cpp b/src/xercesc/util/XMLStringTokenizer.cpp
index ce029377d6f17bb2b5d74f6c582cc200149b35e3..5ba485e83882e902ce6cf40cdfe5472025e91a4b 100644
--- a/src/xercesc/util/XMLStringTokenizer.cpp
+++ b/src/xercesc/util/XMLStringTokenizer.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.4  2003/05/16 03:11:22  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.3  2002/12/18 14:17:54  gareth
  * Fix to bug #13438. When you eant a vector that calls delete[] on its members you should use RefArrayVectorOf.
  *
@@ -89,18 +92,20 @@ const XMLCh fgDelimeters[] =
 // ---------------------------------------------------------------------------
 //  XMLStringTokenizer: Constructors and Destructor
 // ---------------------------------------------------------------------------
-XMLStringTokenizer::XMLStringTokenizer(const XMLCh* const srcStr)
+XMLStringTokenizer::XMLStringTokenizer( const XMLCh* const srcStr
+                                      , MemoryManager* const manager)
     : fOffset(0)
     , fStringLen(XMLString::stringLen(srcStr))
-    , fString(XMLString::replicate(srcStr))
+    , fString(XMLString::replicate(srcStr, manager))
     , fTokens(0)
+    , fMemoryManager(manager)
 {
 	try {
 
-        fDelimeters = XMLString::replicate(fgDelimeters);
+        fDelimeters = XMLString::replicate(fgDelimeters, fMemoryManager);
 
         if (fStringLen > 0) {
-            fTokens = new RefArrayVectorOf<XMLCh>(4, true);
+            fTokens = new (fMemoryManager) RefArrayVectorOf<XMLCh>(4, true);
         }
     }
     catch(...) {
@@ -109,18 +114,20 @@ XMLStringTokenizer::XMLStringTokenizer(const XMLCh* const srcStr)
 }
 
 XMLStringTokenizer::XMLStringTokenizer(const XMLCh* const srcStr,
-                                       const XMLCh* const delim)
+                                       const XMLCh* const delim,
+                                       MemoryManager* const manager)
     : fOffset(0)
     , fStringLen(XMLString::stringLen(srcStr))
-    , fString(XMLString::replicate(srcStr))
+    , fString(XMLString::replicate(srcStr, manager))
     , fTokens(0)
+    , fMemoryManager(manager)
 {
 	try {
 
-        fDelimeters = XMLString::replicate(delim);
+        fDelimeters = XMLString::replicate(delim, fMemoryManager);
 
         if (fStringLen > 0) {
-            fTokens = new RefArrayVectorOf<XMLCh>(4, true);
+            fTokens = new (fMemoryManager) RefArrayVectorOf<XMLCh>(4, true);
         }
     }
     catch(...) {
@@ -166,7 +173,10 @@ XMLCh* XMLStringTokenizer::nextToken() {
 
     if (tokFound) {
 
-        XMLCh* tokStr = new XMLCh[(endIndex - startIndex) + 1];
+        XMLCh* tokStr = (XMLCh*) fMemoryManager->allocate
+        (
+            (endIndex - startIndex + 1) * sizeof(XMLCh)
+        );//new XMLCh[(endIndex - startIndex) + 1];
 
         XMLString::subString(tokStr, fString, startIndex, endIndex);
         fTokens->addElement(tokStr);
diff --git a/src/xercesc/util/XMLStringTokenizer.hpp b/src/xercesc/util/XMLStringTokenizer.hpp
index f4613477331deaeb0a32cff0500b85f64ce9c050..5c178f792c98f50eeb68effd912f10e04a491477 100644
--- a/src/xercesc/util/XMLStringTokenizer.hpp
+++ b/src/xercesc/util/XMLStringTokenizer.hpp
@@ -78,7 +78,7 @@ XERCES_CPP_NAMESPACE_BEGIN
   */
 
 
-class XMLUTIL_EXPORT XMLStringTokenizer
+  class XMLUTIL_EXPORT XMLStringTokenizer :public XMemory
 {
 public:
     // -----------------------------------------------------------------------
@@ -97,7 +97,8 @@ public:
       * @param  srcStr  The string to be parsed.
       *
       */
-	XMLStringTokenizer(const XMLCh* const srcStr);
+	XMLStringTokenizer(const XMLCh* const srcStr,
+                       MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
 
     /**
       * Constructs a string tokenizer for the specified string. The characters
@@ -107,7 +108,9 @@ public:
       * @param  srcStr  The string to be parsed.
       * @param  delim   The set of delimiters.
       */
-    XMLStringTokenizer(const XMLCh* const srcStr, const XMLCh* const delim);
+    XMLStringTokenizer(const XMLCh* const srcStr
+                       , const XMLCh* const delim
+                       , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
 
     //@}
 
@@ -189,6 +192,7 @@ private:
 	XMLCh*              fString;
     XMLCh*              fDelimeters;
 	RefArrayVectorOf<XMLCh>* fTokens;
+    MemoryManager*           fMemoryManager;
 };
 
 
@@ -197,8 +201,8 @@ private:
 // ---------------------------------------------------------------------------
 inline void XMLStringTokenizer::cleanUp() {
 
-	delete [] fString;
-    delete [] fDelimeters;
+	fMemoryManager->deallocate(fString);//delete [] fString;
+    fMemoryManager->deallocate(fDelimeters);//delete [] fDelimeters;
     delete fTokens;
 }
 
diff --git a/src/xercesc/validators/DTD/DTDValidator.cpp b/src/xercesc/validators/DTD/DTDValidator.cpp
index 7237995facbf9d1b0971d6535992606bdf66a374..363957ccf04c76517f5b0734e477d8c344f58b87 100644
--- a/src/xercesc/validators/DTD/DTDValidator.cpp
+++ b/src/xercesc/validators/DTD/DTDValidator.cpp
@@ -382,7 +382,7 @@ DTDValidator::validateAttrValue(const   XMLAttDef*      attDef
                 }
                  else
                 {
-                    find = new XMLRefInfo(pszTmpVal);
+                    find = new (getScanner()->getMemoryManager()) XMLRefInfo(pszTmpVal);
                     getScanner()->getIDRefList()->put((void*)find->getRefName(), find);
                 }
 
diff --git a/src/xercesc/validators/schema/SchemaValidator.cpp b/src/xercesc/validators/schema/SchemaValidator.cpp
index ab547d9cd8008c2a85c1d8cb21ceb916b6b8ae46..cba57cf812f1335ff8f5d454836aa3be38dd919d 100644
--- a/src/xercesc/validators/schema/SchemaValidator.cpp
+++ b/src/xercesc/validators/schema/SchemaValidator.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.30  2003/05/16 03:15:51  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.29  2003/05/15 18:57:27  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -268,7 +271,7 @@ SchemaValidator::SchemaValidator( XMLErrorReporter* const errReporter
     , fNil(false)
     , fTypeStack(0)
 {
-    fTypeStack = new ValueStackOf<ComplexTypeInfo*>(8);
+    fTypeStack = new (fMemoryManager) ValueStackOf<ComplexTypeInfo*>(8);
 }
 
 SchemaValidator::~SchemaValidator()
@@ -2039,8 +2042,11 @@ SchemaValidator::checkRecurseUnordered(SchemaGrammar* const currentGrammar,
     XMLExcepts::Codes  codeToThrow = XMLExcepts::NoError;
     unsigned int       derivedCount= derivedNodes->size();
     unsigned int       baseCount = baseNodes->size();
-    bool*              foundIt = new bool[baseCount];
-    ArrayJanitor<bool> janFoundIt(foundIt);
+    bool*              foundIt = (bool*) fMemoryManager->allocate
+    (
+        baseCount * sizeof(bool)
+    );//new bool[baseCount];
+    ArrayJanitor<bool> janFoundIt(foundIt, fMemoryManager);
 
     for (unsigned k=0; k < baseCount; k++) {
         foundIt[k] = false;
diff --git a/src/xercesc/validators/schema/SchemaValidator.hpp b/src/xercesc/validators/schema/SchemaValidator.hpp
index 47af4c384beb084d548149997d95b4d1dac4a8cd..58e24f7ed17f04caf983d31fda25c85a72da30b4 100644
--- a/src/xercesc/validators/schema/SchemaValidator.hpp
+++ b/src/xercesc/validators/schema/SchemaValidator.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.15  2003/05/16 03:15:51  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.14  2003/05/15 18:57:27  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -401,7 +404,7 @@ inline void SchemaValidator::setXsiType(const XMLCh* const        prefix
        , const unsigned int        uriId)
 {
     delete fXsiType;
-    fXsiType = new QName(prefix, localPart, uriId);
+    fXsiType = new (fMemoryManager) QName(prefix, localPart, uriId);
 }
 
 inline void SchemaValidator::setNillable(bool isNil) {
diff --git a/src/xercesc/validators/schema/SubstitutionGroupComparator.hpp b/src/xercesc/validators/schema/SubstitutionGroupComparator.hpp
index c3d009e3f4b1ddb6484a81816c5e2cdd2715fa62..af4f07336ba1702fead6635ba354e8d829da9931 100644
--- a/src/xercesc/validators/schema/SubstitutionGroupComparator.hpp
+++ b/src/xercesc/validators/schema/SubstitutionGroupComparator.hpp
@@ -69,7 +69,7 @@ XERCES_CPP_NAMESPACE_BEGIN
 
 class SchemaGrammar;
 
-class VALIDATORS_EXPORT SubstitutionGroupComparator
+class VALIDATORS_EXPORT SubstitutionGroupComparator : public XMemory
 {
 public:
 
diff --git a/src/xercesc/validators/schema/TraverseSchema.cpp b/src/xercesc/validators/schema/TraverseSchema.cpp
index ac3c0eea4152be90fe6468d732a133068a9951dc..a1eaddaf5733b2281cbe941926bb05ab1915fcb2 100644
--- a/src/xercesc/validators/schema/TraverseSchema.cpp
+++ b/src/xercesc/validators/schema/TraverseSchema.cpp
@@ -3035,7 +3035,7 @@ TraverseSchema::traverseByUnion(const DOMElement* const rootElem,
 
     if (baseTypeName && *baseTypeName) { //base was provided - get proper validator.
 
-        XMLStringTokenizer unionMembers(baseTypeName);
+        XMLStringTokenizer unionMembers(baseTypeName, fMemoryManager);
         int             tokCount = unionMembers.countTokens();
 
         for (int i = 0; i < tokCount; i++) {
@@ -3673,7 +3673,7 @@ SchemaAttDef* TraverseSchema::traverseAnyAttribute(const DOMElement* const elem)
     }
     else {
 
-        XMLStringTokenizer tokenizer(nameSpace);
+        XMLStringTokenizer tokenizer(nameSpace, fMemoryManager);
         DatatypeValidator* anyURIDV = fDatatypeRegistry->getDatatypeValidator(SchemaSymbols::fgDT_ANYURI);
 
         attType = XMLAttDef::Any_List;
@@ -4568,7 +4568,7 @@ int TraverseSchema::parseBlockSet(const DOMElement* const elem,
         return blockSet;
     }
 
-    XMLStringTokenizer tokenizer(blockVal);
+    XMLStringTokenizer tokenizer(blockVal, fMemoryManager);
 
     while (tokenizer.hasMoreTokens()) {
 
@@ -4629,7 +4629,7 @@ int TraverseSchema::parseFinalSet(const DOMElement* const elem,
         return finalSet;
     }
 
-    XMLStringTokenizer tokenizer(finalVal);
+    XMLStringTokenizer tokenizer(finalVal, fMemoryManager);
 
     while (tokenizer.hasMoreTokens()) {
 
diff --git a/src/xercesc/validators/schema/XSDLocator.hpp b/src/xercesc/validators/schema/XSDLocator.hpp
index 7d2fef94191149a48aa6e6d2282728422a19da58..b81be9f5d3a368b6b39f6cf0ead94a283bffd822 100644
--- a/src/xercesc/validators/schema/XSDLocator.hpp
+++ b/src/xercesc/validators/schema/XSDLocator.hpp
@@ -66,11 +66,12 @@
 #ifndef XSDLOCATOR_HPP
 #define XSDLOCATOR_HPP
 
+#include <xercesc/util/XMemory.hpp>
 #include <xercesc/sax/Locator.hpp>
 
 XERCES_CPP_NAMESPACE_BEGIN
 
-class VALIDATORS_EXPORT XSDLocator: public Locator
+class VALIDATORS_EXPORT XSDLocator: public XMemory, public Locator
 {
 public: