diff --git a/src/xercesc/dom/impl/DOMDocumentImpl.cpp b/src/xercesc/dom/impl/DOMDocumentImpl.cpp
index f792dab9f95fce1378f0d33bc7b096c2830b6fa5..1551a838fe2dc45d29b0d01063a3acdb67648ca9 100644
--- a/src/xercesc/dom/impl/DOMDocumentImpl.cpp
+++ b/src/xercesc/dom/impl/DOMDocumentImpl.cpp
@@ -1329,7 +1329,7 @@ void DOMDocumentImpl::releaseDocNotifyUserData(DOMNode* object)
 void DOMDocumentImpl::release(DOMNode* object, NodeObjectType type)
 {
     if (!fRecycleNodePtr)
-        fRecycleNodePtr = new (fMemoryManager) RefArrayOf<DOMNodePtr> (15);
+        fRecycleNodePtr = new (fMemoryManager) RefArrayOf<DOMNodePtr> (15, fMemoryManager);
 
     if (!fRecycleNodePtr->operator[](type))
         fRecycleNodePtr->operator[](type) = new (fMemoryManager) RefStackOf<DOMNode> (15, false);
diff --git a/src/xercesc/dom/impl/DOMDocumentImpl.hpp b/src/xercesc/dom/impl/DOMDocumentImpl.hpp
index 9455027e664e5d0c913ef5cc89f06fc81044027b..7c37f4c00e2777adca467c53d456d8c6a5527bb1 100644
--- a/src/xercesc/dom/impl/DOMDocumentImpl.hpp
+++ b/src/xercesc/dom/impl/DOMDocumentImpl.hpp
@@ -305,6 +305,7 @@ public:
     void                         releaseDocNotifyUserData(DOMNode* object);
     void                         releaseBuffer(DOMBuffer* buffer);
     DOMBuffer*                   popBuffer();
+    MemoryManager*               getMemoryManager() const;
 
     // Factory methods for getting/creating node lists.
     // Because nothing is ever deleted, the implementation caches and recycles
@@ -377,6 +378,11 @@ private:
 
 };
 
+inline MemoryManager* DOMDocumentImpl::getMemoryManager() const
+{
+    return fMemoryManager;
+}
+
 XERCES_CPP_NAMESPACE_END
 
 // ---------------------------------------------------------------------------
diff --git a/src/xercesc/dom/impl/DOMElementImpl.cpp b/src/xercesc/dom/impl/DOMElementImpl.cpp
index 73819947dc82ff0281305d0612708237fe667814..af44c83a729d0476723ec97b9ceaf3557a428574 100644
--- a/src/xercesc/dom/impl/DOMElementImpl.cpp
+++ b/src/xercesc/dom/impl/DOMElementImpl.cpp
@@ -536,8 +536,8 @@ const XMLCh* DOMElementImpl::getBaseURI() const
             const XMLCh* uri =  attrNode->getNodeValue();
             if (uri && *uri) {// attribute value is always empty string
                 try {
-                    XMLUri temp(baseURI);
-                    XMLUri temp2(&temp, uri);
+                    XMLUri temp(baseURI, ((DOMDocumentImpl *)this->getOwnerDocument())->getMemoryManager());
+                    XMLUri temp2(&temp, uri, ((DOMDocumentImpl *)this->getOwnerDocument())->getMemoryManager());
                     uri = ((DOMDocumentImpl *)this->getOwnerDocument())->cloneString(temp2.getUriText());
                 }
                 catch (...){
diff --git a/src/xercesc/dom/impl/DOMElementNSImpl.cpp b/src/xercesc/dom/impl/DOMElementNSImpl.cpp
index 10fe6b0e826adcadac671e2f2b93f90fa0a513b4..7cd46d6914e4b051e072917a8ced684a7ed42ac5 100644
--- a/src/xercesc/dom/impl/DOMElementNSImpl.cpp
+++ b/src/xercesc/dom/impl/DOMElementNSImpl.cpp
@@ -127,8 +127,8 @@ const XMLCh* DOMElementNSImpl::getBaseURI() const
             const XMLCh* uri =  attrNode->getNodeValue();
             if (uri && *uri) {// attribute value is always empty string
                 try {
-                    XMLUri temp(baseURI);
-                    XMLUri temp2(&temp, uri);
+                    XMLUri temp(baseURI, ((DOMDocumentImpl *)this->getOwnerDocument())->getMemoryManager());
+                    XMLUri temp2(&temp, uri, ((DOMDocumentImpl *)this->getOwnerDocument())->getMemoryManager());
                     uri = ((DOMDocumentImpl *)this->getOwnerDocument())->cloneString(temp2.getUriText());
                 }
                 catch (...){
diff --git a/src/xercesc/internal/IGXMLScanner.cpp b/src/xercesc/internal/IGXMLScanner.cpp
index e4ac69b687715c68a458509c6b7ca89c8b3cec64..ee63cd197a48a1a4cfdece26a00e9a3bc689103a 100644
--- a/src/xercesc/internal/IGXMLScanner.cpp
+++ b/src/xercesc/internal/IGXMLScanner.cpp
@@ -698,6 +698,7 @@ IGXMLScanner::rawAttrScan(const   XMLCh* const                elemName
                 (
                     fAttNameBuf.getRawBuffer()
                     , fAttValueBuf.getRawBuffer()
+                    , fMemoryManager
                 );
                 toFill.addElement(curPair);
             }
diff --git a/src/xercesc/internal/ReaderMgr.cpp b/src/xercesc/internal/ReaderMgr.cpp
index 50bd4747a992c35a07e9ce81609a4b5609521e13..06bb4f0610d9dfc86cb32ce8c0193474b3198e95 100644
--- a/src/xercesc/internal/ReaderMgr.cpp
+++ b/src/xercesc/internal/ReaderMgr.cpp
@@ -731,7 +731,8 @@ ReaderMgr::createIntEntReader(  const   XMLCh* const        sysId
                                      (const XMLByte*)dataBuf
                                      , dataLen * sizeof(XMLCh)
                                      , copyBuf ? BinMemInputStream::BufOpt_Copy
-                                                 : BinMemInputStream::BufOpt_Reference
+                                               : BinMemInputStream::BufOpt_Reference
+                                     , fMemoryManager
                                    );
     if (!newStream)
         return 0;
diff --git a/src/xercesc/internal/SGXMLScanner.cpp b/src/xercesc/internal/SGXMLScanner.cpp
index 70c4dd0de3cc46020017f6bd0294fde395cc4b36..a41ff62d30314437038d815fac1c2c6361bbfa22 100644
--- a/src/xercesc/internal/SGXMLScanner.cpp
+++ b/src/xercesc/internal/SGXMLScanner.cpp
@@ -660,6 +660,7 @@ SGXMLScanner::rawAttrScan(const   XMLCh* const                elemName
                 (
                     fAttNameBuf.getRawBuffer()
                     , fAttValueBuf.getRawBuffer()
+                    , fMemoryManager
                 );
                 toFill.addElement(curPair);
             }
diff --git a/src/xercesc/internal/XMLScanner.cpp b/src/xercesc/internal/XMLScanner.cpp
index 21209776733cd0bb4d4627e84f35e07a2a088866..429fb999935b927fcec39614fd156025b6d96a6c 100644
--- a/src/xercesc/internal/XMLScanner.cpp
+++ b/src/xercesc/internal/XMLScanner.cpp
@@ -327,7 +327,7 @@ void XMLScanner::scanDocument(  const   XMLCh* const    systemId)
         //  Create a temporary URL. Since this is the primary document,
         //  it has to be fully qualified. If not, then assume we are just
         //  mistaking a file for a URL.
-        XMLURL tmpURL(systemId);
+        XMLURL tmpURL(systemId, fMemoryManager);
         if (tmpURL.isRelative()) {
             if (!fStandardUriConformant)
                 srcToUse = new (fMemoryManager) LocalFileInputSource(systemId);
@@ -444,7 +444,7 @@ bool XMLScanner::scanFirst( const   XMLCh* const    systemId
         //  Create a temporary URL. Since this is the primary document,
         //  it has to be fully qualified. If not, then assume we are just
         //  mistaking a file for a URL.
-        XMLURL tmpURL(systemId);
+        XMLURL tmpURL(systemId, fMemoryManager);
         if (tmpURL.isRelative()) {
             if (!fStandardUriConformant)
                 srcToUse = new (fMemoryManager) LocalFileInputSource(systemId);
@@ -1571,7 +1571,7 @@ Grammar* XMLScanner::loadGrammar(const   XMLCh* const systemId
             //  Create a temporary URL. Since this is the primary document,
             //  it has to be fully qualified. If not, then assume we are just
             //  mistaking a file for a URL.
-            XMLURL tmpURL(systemId);
+            XMLURL tmpURL(systemId, fMemoryManager);
             if (tmpURL.isRelative())
             {
                 if (!fStandardUriConformant)
diff --git a/src/xercesc/parsers/AbstractDOMParser.cpp b/src/xercesc/parsers/AbstractDOMParser.cpp
index 22bb08dd0f6e54efb7b0b11de24e145bb4af6f65..d470ac61883bebb619ff1d3d9f318f1d6bc45133 100644
--- a/src/xercesc/parsers/AbstractDOMParser.cpp
+++ b/src/xercesc/parsers/AbstractDOMParser.cpp
@@ -160,7 +160,7 @@ void AbstractDOMParser::initialize()
     fScanner->setGrammarResolver(fGrammarResolver);
     fScanner->setURIStringPool(fURIStringPool);
 
-    fNodeStack = new (fMemoryManager) ValueStackOf<DOMNode*>(64);
+    fNodeStack = new (fMemoryManager) ValueStackOf<DOMNode*>(64, fMemoryManager);
     this->reset();
 }
 
diff --git a/src/xercesc/parsers/SAX2XMLReaderImpl.cpp b/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
index 81c7952fd6566ae23f1c1c4d8019c4cda4c44a14..63bd471ca3507580e909883a51de1c161aaf8fdd 100644
--- a/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
+++ b/src/xercesc/parsers/SAX2XMLReaderImpl.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.19  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.18  2003/05/15 18:26:50  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -356,7 +359,7 @@ void SAX2XMLReaderImpl::initialize()
 	
 	fPrefixes    = new (fMemoryManager) RefStackOf<XMLBuffer> (10, false) ;
 	fTempAttrVec  = new (fMemoryManager) RefVectorOf<XMLAttr>  (10, false) ;
-	fPrefixCounts = new (fMemoryManager) ValueStackOf<unsigned int>(10) ;
+	fPrefixCounts = new (fMemoryManager) ValueStackOf<unsigned int>(10, fMemoryManager) ;
 }
 
 
diff --git a/src/xercesc/util/BaseRefVectorOf.c b/src/xercesc/util/BaseRefVectorOf.c
index 441e98738174a1aa63dd10b8f80c8846d7dbf167..03d5e05eaa5a7752e81c70489d0aef649bd8a0dd 100644
--- a/src/xercesc/util/BaseRefVectorOf.c
+++ b/src/xercesc/util/BaseRefVectorOf.c
@@ -65,14 +65,16 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 //  BaseRefVectorOf: Constructors and Destructor
 // ---------------------------------------------------------------------------
-template <class TElem> BaseRefVectorOf<TElem>::
-BaseRefVectorOf(const unsigned int maxElems, const bool adoptElems) :
+template <class TElem>
+BaseRefVectorOf<TElem>::BaseRefVectorOf( const unsigned int maxElems
+                                       , const bool adoptElems
+                                       , MemoryManager* const manager) :
 
     fAdoptedElems(adoptElems)
     , fCurCount(0)
     , fMaxCount(maxElems)
     , fElemList(0)
-    , fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    , fMemoryManager(manager)
 {
     // Allocate and initialize the array
     fElemList = (TElem**) fMemoryManager->allocate(maxElems * sizeof(TElem*));//new TElem*[maxElems];
diff --git a/src/xercesc/util/BaseRefVectorOf.hpp b/src/xercesc/util/BaseRefVectorOf.hpp
index e8b467cd799e1b5189a803d7a5a9137cff51f3f6..352184bf79870905c5e3b510654413e09f37c4c7 100644
--- a/src/xercesc/util/BaseRefVectorOf.hpp
+++ b/src/xercesc/util/BaseRefVectorOf.hpp
@@ -76,7 +76,12 @@ public :
     // -----------------------------------------------------------------------
     //  Constructors and Destructor
     // -----------------------------------------------------------------------
-    BaseRefVectorOf(const unsigned int maxElems, const bool adoptElems = true);
+    BaseRefVectorOf
+    (
+          const unsigned int maxElems
+        , const bool adoptElems = true
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
     virtual ~BaseRefVectorOf() = 0;
 
 
diff --git a/src/xercesc/util/CountedPointer.hpp b/src/xercesc/util/CountedPointer.hpp
index 27646d082e219486ba33c0bc80b2a419c25ada3a..1bd159d7fe3486aea5aced5198505a3f2cd03a7e 100644
--- a/src/xercesc/util/CountedPointer.hpp
+++ b/src/xercesc/util/CountedPointer.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.3  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.2  2002/11/04 15:22:03  tng
  * C++ Namespace Support.
  *
@@ -85,12 +88,11 @@
 #if !defined(COUNTEDPOINTERTO_HPP)
 #define COUNTEDPOINTERTO_HPP
 
-#include <xercesc/util/XercesDefs.hpp>
 #include <xercesc/util/NullPointerException.hpp>
 
 XERCES_CPP_NAMESPACE_BEGIN
 
-template <class T> class CountedPointerTo
+template <class T> class CountedPointerTo : public XMemory
 {
 public:
     // -----------------------------------------------------------------------
diff --git a/src/xercesc/util/KVStringPair.cpp b/src/xercesc/util/KVStringPair.cpp
index 329725fed3d7c11a9f7424f1b0ecb42a9498e655..81393faf577fdf75fb267d9c2d3a86d02b8aaa3b 100644
--- a/src/xercesc/util/KVStringPair.cpp
+++ b/src/xercesc/util/KVStringPair.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.4  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.3  2003/05/15 19:04:35  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -125,9 +128,9 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 //  KVStringPair: Constructors and Destructor
 // ---------------------------------------------------------------------------
-KVStringPair::KVStringPair() :
+KVStringPair::KVStringPair(MemoryManager* const manager) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(manager)
     , fKey(0)
     , fKeyAllocSize(0)
     , fValue(0)
@@ -135,9 +138,11 @@ KVStringPair::KVStringPair() :
 {
 }
 
-KVStringPair::KVStringPair(const XMLCh* const key, const XMLCh* const value) :
+KVStringPair::KVStringPair(const XMLCh* const key,
+                           const XMLCh* const value,
+                           MemoryManager* const manager) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(manager)
     , fKey(0)
     , fKeyAllocSize(0)
     , fValue(0)
@@ -148,7 +153,7 @@ KVStringPair::KVStringPair(const XMLCh* const key, const XMLCh* const value) :
 
 KVStringPair::KVStringPair(const KVStringPair& toCopy) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(toCopy.fMemoryManager)
     , fKey(0)
     , fKeyAllocSize(0)
     , fValue(0)
diff --git a/src/xercesc/util/KVStringPair.hpp b/src/xercesc/util/KVStringPair.hpp
index 9324466301e7b21f93570850d1e2f0e5e23e6eba..665c9dae12a63b66c76ef5286f0c8ab5c87df284 100644
--- a/src/xercesc/util/KVStringPair.hpp
+++ b/src/xercesc/util/KVStringPair.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.4  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.3  2003/05/15 19:04:35  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -135,8 +138,13 @@ public:
     // -----------------------------------------------------------------------
     //  Constructors and Destructor
     // -----------------------------------------------------------------------
-    KVStringPair();
-    KVStringPair(const XMLCh* const key, const XMLCh* const value);
+    KVStringPair(MemoryManager* const manager);
+    KVStringPair
+    (
+        const XMLCh* const key
+        , const XMLCh* const value
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
     KVStringPair(const KVStringPair& toCopy);
     ~KVStringPair();
 
diff --git a/src/xercesc/util/NameIdPool.c b/src/xercesc/util/NameIdPool.c
index 85d4af10b0f8152d7f33e9617f4ad03618055a8d..fd33b77edccbe2d28fb7e7f3b53103b5435ec3b4 100644
--- a/src/xercesc/util/NameIdPool.c
+++ b/src/xercesc/util/NameIdPool.c
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.6  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.5  2003/05/15 19:04:35  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -123,8 +126,9 @@ template <class TElem> NameIdPoolBucketElem<TElem>::~NameIdPoolBucketElem()
 // ---------------------------------------------------------------------------
 template <class TElem>
 NameIdPool<TElem>::NameIdPool( const unsigned int hashModulus
-                             , const unsigned int initSize) :
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+                             , const unsigned int initSize
+                             , MemoryManager* const manager) :
+    fMemoryManager(manager)
     , fBucketList(0)
     , fIdPtrs(0)
     , fIdPtrsCount(initSize)
diff --git a/src/xercesc/util/NameIdPool.hpp b/src/xercesc/util/NameIdPool.hpp
index c1d1d9bf4b6c7f6e8dae1de094e28a58547a83fd..bb7665d69d877552dc7cfb37ae943cb08e61e278 100644
--- a/src/xercesc/util/NameIdPool.hpp
+++ b/src/xercesc/util/NameIdPool.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.6  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.5  2003/05/15 19:04:35  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -164,6 +167,7 @@ public :
     (
         const   unsigned int    hashModulus
         , const unsigned int    initSize = 128
+        , MemoryManager* const  manager = XMLPlatformUtils::fgMemoryManager
     );
 
     ~NameIdPool();
diff --git a/src/xercesc/util/QName.cpp b/src/xercesc/util/QName.cpp
index 8d597e4720657dcaf0b1b9d4b6ef857a0e295f75..b39d53649e1dd44c93aa8d3f36f53b268b21a303 100644
--- a/src/xercesc/util/QName.cpp
+++ b/src/xercesc/util/QName.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.8  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.7  2003/05/15 19:04:35  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -113,9 +116,9 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 //  QName: Constructors and Destructor
 // ---------------------------------------------------------------------------
-QName::QName() :
+QName::QName(MemoryManager* const manager) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(manager)
     , fPrefix(0)
     , fPrefixBufSz(0)
     , fLocalPart(0)
@@ -126,11 +129,12 @@ QName::QName() :
 {
 }
 
-QName::QName( const XMLCh* const prefix
-            , const XMLCh* const localPart
-            , const unsigned int uriId) :
+QName::QName( const XMLCh* const   prefix
+            , const XMLCh* const   localPart
+            , const unsigned int   uriId
+            , MemoryManager* const manager) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(manager)
     , fPrefix(0)
     , fPrefixBufSz(0)
     , fLocalPart(0)
@@ -154,9 +158,10 @@ QName::QName( const XMLCh* const prefix
 }
 
 QName::QName( const XMLCh* const rawName
-            , const unsigned int uriId) :
+            , const unsigned int uriId
+            , MemoryManager* const manager) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(manager)
     , fPrefix(0)
     , fPrefixBufSz(0)
     , fLocalPart(0)
@@ -189,7 +194,7 @@ QName::~QName()
 // ---------------------------------------------------------------------------
 QName::QName(const QName& qname) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(qname.fMemoryManager)
     , fPrefix(0)
     , fPrefixBufSz(0)
     , fLocalPart(0)
diff --git a/src/xercesc/util/QName.hpp b/src/xercesc/util/QName.hpp
index cbe69d8d822aebd6175157692b1d0141a560c23d..e259d37f60794024df81e34a29746993a3c5cb54 100644
--- a/src/xercesc/util/QName.hpp
+++ b/src/xercesc/util/QName.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.7  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.6  2003/05/15 19:04:35  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -120,19 +123,23 @@ public :
     //  Contructors and Destructor
     // -----------------------------------------------------------------------
     /** Default constructor. */
-    QName();
+    QName(MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
 
     /** Constructs a specified qname using prefix, and localpart. */
     QName
-    (   const XMLCh* const        prefix
-      , const XMLCh* const        localPart
-	   , const unsigned int        uriId
+    (
+          const XMLCh* const   prefix
+        , const XMLCh* const   localPart
+	    , const unsigned int   uriId
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
     );
 
     /** Constructs a specified qname using rawName. */
     QName
-    (   const XMLCh* const        rawName
-	   , const unsigned int        uriId
+    (
+          const XMLCh* const   rawName
+	    , const unsigned int   uriId
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
     );
 
     /** Copy constructor. */
diff --git a/src/xercesc/util/RefArrayOf.c b/src/xercesc/util/RefArrayOf.c
index ec0377f3fb0e44023c77e2fa5f2c741a1664eea4..7e31f49ce760e959737eed05f8630e54af79a66a 100644
--- a/src/xercesc/util/RefArrayOf.c
+++ b/src/xercesc/util/RefArrayOf.c
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.4  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.3  2003/05/15 19:04:35  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -94,23 +97,27 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 //  RefArrayOf: Contructors and Destructor
 // ---------------------------------------------------------------------------
-template <class TElem> RefArrayOf<TElem>::RefArrayOf(const unsigned int size) :
+template <class TElem>
+RefArrayOf<TElem>::RefArrayOf(const unsigned int size,
+                              MemoryManager* const manager) :
 
     fSize(size)
     , fArray(0)
-    , fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    , fMemoryManager(manager)
 {
     fArray = (TElem**) fMemoryManager->allocate(fSize * sizeof(TElem*));//new TElem*[fSize];
     for (unsigned int index = 0; index < fSize; index++)
         fArray[index] = 0;
 }
 
-template <class TElem> RefArrayOf<TElem>::
-RefArrayOf(TElem* values[], const unsigned int size) :
+template <class TElem>
+RefArrayOf<TElem>::RefArrayOf(TElem* values[],
+                              const unsigned int size,
+                              MemoryManager* const manager) :
 
     fSize(size)
     , fArray(0)
-    , fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    , fMemoryManager(manager)
 {
     fArray = (TElem**) fMemoryManager->allocate(fSize * sizeof(TElem*));//new TElem*[fSize];
     for (unsigned int index = 0; index < fSize; index++)
@@ -122,7 +129,7 @@ RefArrayOf(const RefArrayOf<TElem>& source) :
 
     fSize(source.fSize)
     , fArray(0)
-    , fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    , fMemoryManager(source.fMemoryManager)
 {
     fArray = (TElem**) fMemoryManager->allocate(fSize * sizeof(TElem*));//new TElem*[fSize];
     for (unsigned int index = 0; index < fSize; index++)
diff --git a/src/xercesc/util/RefArrayOf.hpp b/src/xercesc/util/RefArrayOf.hpp
index 4c2416ab8a156fb5bcaf59a585052a36cad848d6..ad66ce6b563bdd4d2e6c81c36f27995df42f0bcf 100644
--- a/src/xercesc/util/RefArrayOf.hpp
+++ b/src/xercesc/util/RefArrayOf.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2003/05/15 19:04:35  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -104,8 +107,15 @@ public :
     // -----------------------------------------------------------------------
     //  Contructors and Destructor
     // -----------------------------------------------------------------------
-    RefArrayOf(const unsigned int size);
-	RefArrayOf(TElem* values[], const unsigned int size);
+    RefArrayOf
+    (
+          const unsigned int size
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
+	RefArrayOf
+    (
+          TElem* values[]
+        , const unsigned int size
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
 	RefArrayOf(const RefArrayOf<TElem>& source);
 	~RefArrayOf();
 
diff --git a/src/xercesc/util/RefArrayVectorOf.c b/src/xercesc/util/RefArrayVectorOf.c
index 0f23307400dd49f1041c6d18291c3189f5667fa0..28b23faec58fbfa87796b16c715bd6a11044a9dc 100644
--- a/src/xercesc/util/RefArrayVectorOf.c
+++ b/src/xercesc/util/RefArrayVectorOf.c
@@ -11,7 +11,11 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 //  RefArrayVectorOf: Constructor and Destructor
 // ---------------------------------------------------------------------------
-template <class TElem> RefArrayVectorOf<TElem>::RefArrayVectorOf(const unsigned int maxElems, const bool adoptElems) : BaseRefVectorOf<TElem>(maxElems, adoptElems)
+template <class TElem>
+RefArrayVectorOf<TElem>::RefArrayVectorOf( const unsigned int maxElems
+                                         , const bool adoptElems
+                                         , MemoryManager* const manager)
+    : BaseRefVectorOf<TElem>(maxElems, adoptElems, manager)
 {
 }
 
diff --git a/src/xercesc/util/RefArrayVectorOf.hpp b/src/xercesc/util/RefArrayVectorOf.hpp
index 72837b05dc52c431661441becdd18e1173384235..2a3a1d49b21594c109ba330c4a2665259343f85d 100644
--- a/src/xercesc/util/RefArrayVectorOf.hpp
+++ b/src/xercesc/util/RefArrayVectorOf.hpp
@@ -15,7 +15,9 @@ public :
     // -----------------------------------------------------------------------
     //  Constructor
     // -----------------------------------------------------------------------
-    RefArrayVectorOf(const unsigned int maxElems, const bool adoptElems = true);
+    RefArrayVectorOf( const unsigned int   maxElems
+                    , const bool           adoptElems = true
+                    , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
 
     // -----------------------------------------------------------------------
     //  Destructor
diff --git a/src/xercesc/util/RefHash3KeysIdPool.c b/src/xercesc/util/RefHash3KeysIdPool.c
index 5e8716ef1a439fffb2667931e59c00d58a0d55dc..10f5ad05162f9d4ecf16a3a7a3b8ad58536e6a3a 100644
--- a/src/xercesc/util/RefHash3KeysIdPool.c
+++ b/src/xercesc/util/RefHash3KeysIdPool.c
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.4  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.3  2003/05/15 19:04:35  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -97,8 +100,9 @@ XERCES_CPP_NAMESPACE_BEGIN
 template <class TVal>
 RefHash3KeysIdPool<TVal>::RefHash3KeysIdPool( const unsigned int modulus
                                             , const bool         adoptElems
-                                            , const unsigned int initSize) :
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+                                            , const unsigned int initSize
+                                            , MemoryManager* const manager) :
+    fMemoryManager(manager)
     , fAdoptedElems(adoptElems)
     , fBucketList(0)
     , fHashModulus(modulus)
@@ -127,8 +131,9 @@ template <class TVal>
 RefHash3KeysIdPool<TVal>::RefHash3KeysIdPool( const unsigned int modulus
                                             , const bool         adoptElems
                                             , HashBase*          hashBase
-                                            , const unsigned int initSize) :
-	fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+                                            , const unsigned int initSize
+                                            , MemoryManager* const manager) :
+	fMemoryManager(manager)
     , fAdoptedElems(adoptElems)
     , fBucketList(0)
     , fHashModulus(modulus)
@@ -154,8 +159,9 @@ RefHash3KeysIdPool<TVal>::RefHash3KeysIdPool( const unsigned int modulus
 
 template <class TVal>
 RefHash3KeysIdPool<TVal>::RefHash3KeysIdPool( const unsigned int modulus
-                                            , const unsigned int initSize) :
-	fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+                                            , const unsigned int initSize
+                                            , MemoryManager* const manager) :
+	fMemoryManager(manager)
     , fAdoptedElems(true)
     , fBucketList(0)
     , fHashModulus(modulus)
diff --git a/src/xercesc/util/RefHash3KeysIdPool.hpp b/src/xercesc/util/RefHash3KeysIdPool.hpp
index dd7ead5519b15dca962b569cc8e9fcfc4fb820cf..e3d1bf2bab807177a60041a098beac335d2abad0 100644
--- a/src/xercesc/util/RefHash3KeysIdPool.hpp
+++ b/src/xercesc/util/RefHash3KeysIdPool.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2003/05/15 19:04:35  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -150,16 +153,18 @@ public:
     // backwards compatability - default hasher is HashXMLCh
     RefHash3KeysIdPool
     (
-        const unsigned int modulus
-      , const unsigned int    initSize = 128
+          const unsigned int   modulus
+        , const unsigned int   initSize = 128
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
     );
 
     // backwards compatability - default hasher is HashXMLCh
     RefHash3KeysIdPool
     (
-        const unsigned int modulus
-      , const bool adoptElems
-      , const unsigned int initSize = 128
+          const unsigned int   modulus
+        , const bool           adoptElems
+        , const unsigned int   initSize = 128
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
     );
 
     // if a hash function is passed in, it will be deleted when the hashtable is deleted.
@@ -167,9 +172,11 @@ public:
     // may delete the hasher of a different hashtable if both use the same hasher.
     RefHash3KeysIdPool
     (
-         const unsigned int modulus
-       , const bool adoptElems, HashBase* hashBase
-       , const unsigned int initSize = 128
+          const unsigned int   modulus
+        , const bool           adoptElems
+        , HashBase* hashBase
+        , const unsigned int initSize = 128
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
     );
 
     ~RefHash3KeysIdPool();
diff --git a/src/xercesc/util/RefStackOf.c b/src/xercesc/util/RefStackOf.c
index 10f8aec1941608a688a417b9c0331d27ef949eb2..d16ef9eb32cc72dd284da7fd18663c2a3acf708b 100644
--- a/src/xercesc/util/RefStackOf.c
+++ b/src/xercesc/util/RefStackOf.c
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.3  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.2  2002/11/04 15:22:04  tng
  * C++ Namespace Support.
  *
@@ -91,10 +94,12 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 //  RefStackOf: Constructors and Destructor
 // ---------------------------------------------------------------------------
-template <class TElem> RefStackOf<TElem>::
-RefStackOf(const unsigned int initElems, const bool adoptElems) :
+template <class TElem>
+RefStackOf<TElem>::RefStackOf(const unsigned int initElems,
+                              const bool adoptElems,
+                              MemoryManager* const manager) :
 
-    fVector(initElems, adoptElems)
+    fVector(initElems, adoptElems, manager)
 {
 }
 
diff --git a/src/xercesc/util/RefStackOf.hpp b/src/xercesc/util/RefStackOf.hpp
index 25f6768160565f99bbae9e4b2045b5c76cf0e99f..a2f2213c09c932ebdf6186f535e63fc76a28dae4 100644
--- a/src/xercesc/util/RefStackOf.hpp
+++ b/src/xercesc/util/RefStackOf.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2003/05/15 19:07:45  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -108,7 +111,9 @@ public :
     // -----------------------------------------------------------------------
     //  Constructors and Destructor
     // -----------------------------------------------------------------------
-    RefStackOf(const unsigned int initElems, const bool adoptElems = true);
+    RefStackOf(const unsigned int initElems,
+               const bool adoptElems = true,
+               MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
     ~RefStackOf();
 
 
diff --git a/src/xercesc/util/RefVectorOf.c b/src/xercesc/util/RefVectorOf.c
index 2cfe842c4c1b58a9fa0d15fcd6ef218e5189d94d..2ef155dc112f07c4e0a845d2e7d56db9e287cc2a 100644
--- a/src/xercesc/util/RefVectorOf.c
+++ b/src/xercesc/util/RefVectorOf.c
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.9  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.8  2003/05/15 19:07:45  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -118,7 +121,11 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 //  RefVectorOf: Constructors and Destructor
 // ---------------------------------------------------------------------------
-template <class TElem> RefVectorOf<TElem>::RefVectorOf(const unsigned int maxElems, const bool adoptElems) : BaseRefVectorOf<TElem>(maxElems, adoptElems)
+template <class TElem>
+RefVectorOf<TElem>::RefVectorOf(const unsigned int maxElems,
+                                const bool adoptElems,
+                                MemoryManager* const manager)
+    : BaseRefVectorOf<TElem>(maxElems, adoptElems, manager)
 {
 }
 
diff --git a/src/xercesc/util/RefVectorOf.hpp b/src/xercesc/util/RefVectorOf.hpp
index 3d3e3dee086cb2ff342f77778505ff2b0cb4dee7..3989fec5736224a1b800e499ed7eaa542929332f 100644
--- a/src/xercesc/util/RefVectorOf.hpp
+++ b/src/xercesc/util/RefVectorOf.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.8  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.7  2003/05/15 19:07:45  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -118,7 +121,9 @@ public :
     // -----------------------------------------------------------------------
     //  Constructor
     // -----------------------------------------------------------------------
-    RefVectorOf(const unsigned int maxElems, const bool adoptElems = true);
+    RefVectorOf(const unsigned int maxElems,
+                const bool adoptElems = true,
+                MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
 
     // -----------------------------------------------------------------------
     //  Destructor
diff --git a/src/xercesc/util/StringPool.cpp b/src/xercesc/util/StringPool.cpp
index 376eed2582f2195888d17f9477cf73ff32428832..e395692dfebfb1ce4a3f631bd1a3b5fa51a21af3 100644
--- a/src/xercesc/util/StringPool.cpp
+++ b/src/xercesc/util/StringPool.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.4  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.3  2003/05/15 19:07:45  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -103,10 +106,11 @@ XERCES_CPP_NAMESPACE_BEGIN
 //  StringPool::PoolElem: Constructors and Destructor
 // ---------------------------------------------------------------------------
 XMLStringPool::PoolElem::PoolElem( const   XMLCh* const string
-                                 , const unsigned int id) :
+                                 , const unsigned int id
+                                 , MemoryManager* const manager) :
     fId(id)
     , fString(0)
-    , fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    , fMemoryManager(manager)
 {
     fString = XMLString::replicate(string, fMemoryManager);
 }
@@ -133,9 +137,10 @@ XMLStringPool::PoolElem::reset(const XMLCh* const string, const unsigned int id)
 // ---------------------------------------------------------------------------
 //  XMLStringPool: Constructors and Destructor
 // ---------------------------------------------------------------------------
-XMLStringPool::XMLStringPool(const  unsigned int  modulus) :
+XMLStringPool::XMLStringPool(const  unsigned int  modulus,
+                             MemoryManager* const manager) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(manager)
     , fIdMap(0)
     , fHashTable(0)
     , fMapCapacity(64)
@@ -246,7 +251,7 @@ unsigned int XMLStringPool::addNewEntry(const XMLCh* const newString)
     //  this new element in the id map at the current id index, then bump the
     //  id index.
     //
-    PoolElem* newElem = new (fMemoryManager) PoolElem(newString, fCurId);
+    PoolElem* newElem = new (fMemoryManager) PoolElem(newString, fCurId, fMemoryManager);
     fHashTable->put((void*)(newElem->getKey()), newElem);
     fIdMap[fCurId] = newElem;
 
diff --git a/src/xercesc/util/StringPool.hpp b/src/xercesc/util/StringPool.hpp
index 8d82ba3befc6ec1ad5ff0eb2d74ef8ec12dc5ced..ca6b8bda1695c4e3e48e3cf74b2d5f82bd37e211 100644
--- a/src/xercesc/util/StringPool.hpp
+++ b/src/xercesc/util/StringPool.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2003/05/15 19:07:45  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -116,7 +119,8 @@ public :
     // -----------------------------------------------------------------------
     XMLStringPool
     (
-        const   unsigned int    modulus = 109
+          const unsigned int   modulus = 109
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
     );
     ~XMLStringPool();
 
@@ -139,7 +143,9 @@ private :
     class PoolElem : public XMemory
     {
         public :
-            PoolElem(const XMLCh* const string, const unsigned int id);
+            PoolElem(const XMLCh* const string,
+                     const unsigned int id,
+                     MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
             ~PoolElem();
 
             inline const XMLCh* getKey() const { return fString; }
diff --git a/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.cpp b/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.cpp
index bc40178da3041a4e8acf13e85f30d0982dc56352..9f9b1248f71613af7274043b90d680a3c3368e6c 100644
--- a/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.cpp
+++ b/src/xercesc/util/Transcoders/Cygwin/CygwinTransService.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.6  2003/05/16 06:01:57  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.5  2003/05/15 18:47:02  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -144,7 +147,7 @@ static const LCID gLocaleId =
 //  This is the simple CPMapEntry class. It just contains an encoding name
 //  and a code page for that encoding.
 // ---------------------------------------------------------------------------
-class CPMapEntry
+class CPMapEntry : public XMemory
 {
 public :
     // -----------------------------------------------------------------------
diff --git a/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp b/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp
index ab73a9bd7d7483d9bc88ff486c194293b1759536..3a997adc61bd851caa23975d46f60c4106c7f103 100644
--- a/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp
+++ b/src/xercesc/util/Transcoders/Win32/Win32TransService.cpp
@@ -92,7 +92,7 @@ static const XMLCh gMyServiceId[] =
 //  This is the simple CPMapEntry class. It just contains an encoding name
 //  and a code page for that encoding.
 // ---------------------------------------------------------------------------
-class CPMapEntry
+class CPMapEntry : public XMemory
 {
 public :
     // -----------------------------------------------------------------------
@@ -170,7 +170,10 @@ CPMapEntry::CPMapEntry( const   char* const     encodingName
         const unsigned int targetLen = srcLen/charLen;
 
 
-        fEncodingName = new XMLCh[targetLen + 1];
+        fEncodingName = (XMLCh*) XMLPlatformUtils::fgMemoryManager->allocate
+        (
+            (targetLen + 1) * sizeof(XMLCh)
+        );//new XMLCh[targetLen + 1];
         ::mbstowcs(fEncodingName, encodingName, srcLen);
         fEncodingName[targetLen] = 0;
 
@@ -201,7 +204,7 @@ CPMapEntry::CPMapEntry( const   XMLCh* const    encodingName
 
 CPMapEntry::~CPMapEntry()
 {
-    delete [] fEncodingName;
+    XMLPlatformUtils::fgMemoryManager->deallocate(fEncodingName);//delete [] fEncodingName;
 }
 
 
@@ -407,7 +410,10 @@ Win32TransService::Win32TransService()
             if (charLen != -1) {
                 const unsigned int targetLen = srcLen/charLen;
 
-                XMLCh* uniAlias = new XMLCh[targetLen + 1];
+                XMLCh* uniAlias = (XMLCh*) XMLPlatformUtils::fgMemoryManager->allocate
+                (
+                    (targetLen + 1) * sizeof(XMLCh)
+                );//new XMLCh[targetLen + 1];
                 ::mbstowcs(uniAlias, aliasBuf, srcLen);
                 uniAlias[targetLen] = 0;
                 _wcsupr(uniAlias);
@@ -420,7 +426,10 @@ Win32TransService::Win32TransService()
                     const unsigned charLen = ::mblen(nameBuf, MB_CUR_MAX);
                     const unsigned int targetLen = srcLen/charLen;
                     
-                    XMLCh* uniName = new XMLCh[targetLen + 1];
+                    XMLCh* uniName = (XMLCh*) XMLPlatformUtils::fgMemoryManager->allocate
+                    (
+                        (targetLen + 1) * sizeof(XMLCh)
+                    );//new XMLCh[targetLen + 1];
                     ::mbstowcs(uniName, nameBuf, srcLen);
                     uniName[targetLen] = 0;
                     _wcsupr(uniName);
@@ -436,9 +445,9 @@ Win32TransService::Win32TransService()
                         fCPMap->put((void*)newEntry->getEncodingName(), newEntry);
                     }
 
-                    delete [] uniName;
+                    XMLPlatformUtils::fgMemoryManager->deallocate(uniName);//delete [] uniName;
                 }
-                delete [] uniAlias;
+                XMLPlatformUtils::fgMemoryManager->deallocate(uniAlias);//delete [] uniAlias;
             }
         }
 
@@ -866,7 +875,8 @@ unsigned int Win32LCPTranscoder::calcRequiredSize(const XMLCh* const srcText)
     return retVal;
 }
 
-
+// Return value using global operator new
+// Revisit: deprecate ?
 char* Win32LCPTranscoder::transcode(const XMLCh* const toTranscode)
 {
     if (!toTranscode)
@@ -932,7 +942,8 @@ char* Win32LCPTranscoder::transcode(const XMLCh* const toTranscode,
     return retVal;
 }
 
-
+// Return value using global operator new
+// Revisit: deprecate ?
 XMLCh* Win32LCPTranscoder::transcode(const char* const toTranscode)
 {
     if (!toTranscode)
diff --git a/src/xercesc/util/ValueArrayOf.c b/src/xercesc/util/ValueArrayOf.c
index cf379fc68742c158fe97e9f60f6d1667af3a1e9c..30b5ec2128621792627fdbf285b125c6bb40933e 100644
--- a/src/xercesc/util/ValueArrayOf.c
+++ b/src/xercesc/util/ValueArrayOf.c
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.4  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.3  2003/05/15 19:07:46  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -95,23 +98,25 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 //  ValueArrayOf: Contructors and Destructor
 // ---------------------------------------------------------------------------
-template <class TElem> ValueArrayOf<TElem>::
-ValueArrayOf(const unsigned int size) :
+template <class TElem>
+ValueArrayOf<TElem>::ValueArrayOf(const unsigned int size,
+                                  MemoryManager* const manager) :
 
     fSize(size)
     , fArray(0)
-    , fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    , fMemoryManager(manager)
 {
     fArray = (TElem*) fMemoryManager->allocate(fSize * sizeof(TElem)); //new TElem[fSize];
 }
 
 template <class TElem>
 ValueArrayOf<TElem>::ValueArrayOf( const TElem* values
-                                 , const unsigned int size) :
+                                 , const unsigned int size
+                                 , MemoryManager* const manager) :
 
     fSize(size)
     , fArray(0)
-    , fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    , fMemoryManager(manager)
 {
     fArray = (TElem*) fMemoryManager->allocate(fSize * sizeof(TElem)); //new TElem[fSize];
     for (unsigned int index = 0; index < fSize; index++)
@@ -123,7 +128,7 @@ ValueArrayOf<TElem>::ValueArrayOf(const ValueArrayOf<TElem>& source) :
 
     fSize(source.fSize)
     , fArray(0)
-    , fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    , fMemoryManager(source.fMemoryManager)
 {
     fArray = (TElem*) fMemoryManager->allocate(fSize * sizeof(TElem)); //new TElem[fSize];
     for (unsigned int index = 0; index < fSize; index++)
diff --git a/src/xercesc/util/ValueArrayOf.hpp b/src/xercesc/util/ValueArrayOf.hpp
index ae75fdd83e908b0fc59d9eecd02c3dd387e70bce..92a4910c21ca99622a4f02af9dce76184d56e64a 100644
--- a/src/xercesc/util/ValueArrayOf.hpp
+++ b/src/xercesc/util/ValueArrayOf.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2003/05/15 19:07:46  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -105,8 +108,17 @@ public :
     // -----------------------------------------------------------------------
     //  Contructors and Destructor
     // -----------------------------------------------------------------------
-    ValueArrayOf(const unsigned int size);
-	ValueArrayOf(const TElem* values, const unsigned int size);
+    ValueArrayOf
+    (
+           const unsigned int   size
+         , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
+	ValueArrayOf
+    (
+          const TElem*         values
+        , const unsigned int   size
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
 	ValueArrayOf(const ValueArrayOf<TElem>& source);
 	~ValueArrayOf();
 
diff --git a/src/xercesc/util/ValueHashTableOf.c b/src/xercesc/util/ValueHashTableOf.c
index d6cd7520ed156bdecba13b2a89834ed7dd50879b..f69bbe339b0bc906f665d7bf3b29ac90f86ee371 100644
--- a/src/xercesc/util/ValueHashTableOf.c
+++ b/src/xercesc/util/ValueHashTableOf.c
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.6  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.5  2003/05/15 19:07:46  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -84,8 +87,9 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 template <class TVal>
 ValueHashTableOf<TVal>::ValueHashTableOf( const unsigned int modulus
-                                        , HashBase* hashBase)
-    : fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+                                        , HashBase* hashBase
+                                        , MemoryManager* const manager)
+    : fMemoryManager(manager)
     , fBucketList(0)
     , fHashModulus(modulus)
     , fHash(0)
@@ -96,8 +100,9 @@ ValueHashTableOf<TVal>::ValueHashTableOf( const unsigned int modulus
 }
 
 template <class TVal>
-ValueHashTableOf<TVal>::ValueHashTableOf(const unsigned int modulus)
-	: fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+ValueHashTableOf<TVal>::ValueHashTableOf( const unsigned int modulus
+                                        , MemoryManager* const manager)
+	: fMemoryManager(manager)
     , fBucketList(0)
     , fHashModulus(modulus)
     , fHash(0)
diff --git a/src/xercesc/util/ValueHashTableOf.hpp b/src/xercesc/util/ValueHashTableOf.hpp
index 7b3fc2f67539b24c5da7cbb081ecfd2e98dda8af..924f549eb98badd3ff05667d58fdfc811fc043fe 100644
--- a/src/xercesc/util/ValueHashTableOf.hpp
+++ b/src/xercesc/util/ValueHashTableOf.hpp
@@ -105,11 +105,20 @@ public:
     //  Constructors and Destructor
     // -----------------------------------------------------------------------
 	// backwards compatability - default hasher is HashXMLCh
-    ValueHashTableOf(const unsigned int modulus);
+    ValueHashTableOf
+    (
+          const unsigned int   modulus
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
 	// if a hash function is passed in, it will be deleted when the hashtable is deleted.
 	// use a new instance of the hasher class for each hashtable, otherwise one hashtable
 	// may delete the hasher of a different hashtable if both use the same hasher.
-    ValueHashTableOf(const unsigned int modulus, HashBase* hashBase);
+    ValueHashTableOf
+    (
+          const unsigned int   modulus
+        , HashBase*            hashBase
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
     ~ValueHashTableOf();
 
 
diff --git a/src/xercesc/util/ValueStackOf.c b/src/xercesc/util/ValueStackOf.c
index c469a989f4c987a5d7325abbcf2c011412cf7911..7661258751ce2acce81ae3da58913bc2c9281979 100644
--- a/src/xercesc/util/ValueStackOf.c
+++ b/src/xercesc/util/ValueStackOf.c
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.3  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.2  2002/11/04 15:22:05  tng
  * C++ Namespace Support.
  *
@@ -92,10 +95,11 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 //  ValueStackOf: Constructors and Destructor
 // ---------------------------------------------------------------------------
-template <class TElem> ValueStackOf<TElem>::
-ValueStackOf(const unsigned int fInitCapacity) :
+template <class TElem>
+ValueStackOf<TElem>::ValueStackOf(const unsigned int fInitCapacity,
+                                  MemoryManager* const manager) :
 
-    fVector(fInitCapacity)
+    fVector(fInitCapacity, manager)
 {
 }
 
diff --git a/src/xercesc/util/ValueStackOf.hpp b/src/xercesc/util/ValueStackOf.hpp
index b2ee30c51930dc7b382a811100d130808b4f74dc..58cec23e08adee06eaa6a3e2586af9cc6e948c1a 100644
--- a/src/xercesc/util/ValueStackOf.hpp
+++ b/src/xercesc/util/ValueStackOf.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2003/05/15 19:07:46  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -108,7 +111,11 @@ public :
     // -----------------------------------------------------------------------
     //  Constructors and Destructor
     // -----------------------------------------------------------------------
-    ValueStackOf(const unsigned int fInitCapacity);
+    ValueStackOf
+    (
+          const unsigned int fInitCapacity
+		  , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
     ~ValueStackOf();
 
 
diff --git a/src/xercesc/util/ValueVectorOf.c b/src/xercesc/util/ValueVectorOf.c
index fcf1dc0cf011385a02c9023b7460dbc4dbc99d9f..e2826267c70d6403c537210e34ae935bd92ff174 100644
--- a/src/xercesc/util/ValueVectorOf.c
+++ b/src/xercesc/util/ValueVectorOf.c
@@ -56,6 +56,9 @@
 
 /**
  * $Log$
+ * Revision 1.4  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.3  2003/05/15 19:07:46  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -101,12 +104,13 @@ XERCES_CPP_NAMESPACE_BEGIN
 //  ValueVectorOf: Constructors and Destructor
 // ---------------------------------------------------------------------------
 template <class TElem>
-ValueVectorOf<TElem>::ValueVectorOf(const unsigned int maxElems) :
+ValueVectorOf<TElem>::ValueVectorOf(const unsigned int maxElems,
+                                    MemoryManager* const manager) :
 
     fCurCount(0)
     , fMaxCount(maxElems)
     , fElemList(0)
-    , fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    , fMemoryManager(manager)
 {
     fElemList = (TElem*) fMemoryManager->allocate
     (
@@ -120,7 +124,7 @@ ValueVectorOf<TElem>::ValueVectorOf(const ValueVectorOf<TElem>& toCopy) :
     fCurCount(toCopy.fCurCount)
     , fMaxCount(toCopy.fMaxCount)
     , fElemList(0)
-    , fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    , fMemoryManager(toCopy.fMemoryManager)
 {
     fElemList = (TElem*) fMemoryManager->allocate
     (
diff --git a/src/xercesc/util/ValueVectorOf.hpp b/src/xercesc/util/ValueVectorOf.hpp
index 0606a3839f7c64d9ae8e50245978debaf7dc23b7..bd57e81edb049e8f18626e9a5aced2afd5b1cc30 100644
--- a/src/xercesc/util/ValueVectorOf.hpp
+++ b/src/xercesc/util/ValueVectorOf.hpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2003/05/15 19:07:46  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -110,7 +113,11 @@ public :
     // -----------------------------------------------------------------------
     //  Constructors and Destructor
     // -----------------------------------------------------------------------
-    ValueVectorOf(const unsigned int maxElems);
+    ValueVectorOf
+    (
+        const unsigned int maxElems
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
     ValueVectorOf(const ValueVectorOf<TElem>& toCopy);
     ~ValueVectorOf();
 
diff --git a/src/xercesc/util/XMLAbstractDoubleFloat.cpp b/src/xercesc/util/XMLAbstractDoubleFloat.cpp
index e96ab45e7bdb3b6bdfeb80759bbb5b9f70aeef07..10f51a6bd955b07cf724f1857008ec6155c0f3b5 100644
--- a/src/xercesc/util/XMLAbstractDoubleFloat.cpp
+++ b/src/xercesc/util/XMLAbstractDoubleFloat.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.13  2003/05/16 06:01:52  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.12  2003/05/15 19:07:46  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -123,14 +126,14 @@ static XMLCh value1[BUF_LEN+1];
 // ---------------------------------------------------------------------------
 //  ctor/dtor
 // ---------------------------------------------------------------------------
-XMLAbstractDoubleFloat::XMLAbstractDoubleFloat()
+XMLAbstractDoubleFloat::XMLAbstractDoubleFloat(MemoryManager* const manager)
 : fValue(0)
 , fType(Normal)
 , fDataConverted(false)
 , fSign(0)
 , fRawData(0)
 , fFormattedString(0)
-, fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+, fMemoryManager(manager)
 {
 }
 
diff --git a/src/xercesc/util/XMLAbstractDoubleFloat.hpp b/src/xercesc/util/XMLAbstractDoubleFloat.hpp
index 2fcf00bb80110bca48dd429a5abb6bb892cc1af5..b9d1ae5799c4b3314efbf7623ce1ead5d25b3f18 100644
--- a/src/xercesc/util/XMLAbstractDoubleFloat.hpp
+++ b/src/xercesc/util/XMLAbstractDoubleFloat.hpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.12  2003/05/16 06:01:53  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.11  2003/05/15 19:07:46  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -178,7 +181,7 @@ protected:
     //
     // To be used by derived class exclusively
     //
-    XMLAbstractDoubleFloat();
+    XMLAbstractDoubleFloat(MemoryManager* const manager);
 
     void                  init(const XMLCh* const strValue);
 
diff --git a/src/xercesc/util/XMLBigDecimal.cpp b/src/xercesc/util/XMLBigDecimal.cpp
index b769ca780aefdfcef010ca5b19f14c98216018c6..ca230805451da0e3c9c5fcc5d6ab9d4fa62cdb27 100644
--- a/src/xercesc/util/XMLBigDecimal.cpp
+++ b/src/xercesc/util/XMLBigDecimal.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.9  2003/05/16 06:01:53  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.8  2003/05/15 19:07:46  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -134,13 +137,14 @@ XERCES_CPP_NAMESPACE_BEGIN
 //
 **/
 
-XMLBigDecimal::XMLBigDecimal(const XMLCh* const strValue)
+XMLBigDecimal::XMLBigDecimal(const XMLCh* const strValue,
+                             MemoryManager* const manager)
 : fSign(0)
 , fTotalDigits(0)
 , fScale(0)
 , fIntVal(0)
 , fRawData(0)
-, fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+, fMemoryManager(manager)
 {
     if ((!strValue) || (!*strValue))
         ThrowXML(NumberFormatException, XMLExcepts::XMLNUM_emptyString);
diff --git a/src/xercesc/util/XMLBigDecimal.hpp b/src/xercesc/util/XMLBigDecimal.hpp
index f7d2256169c38bacbb894252b045a7035066ba0a..a4e63d121bef8506863d78aba761497983aa7f71 100644
--- a/src/xercesc/util/XMLBigDecimal.hpp
+++ b/src/xercesc/util/XMLBigDecimal.hpp
@@ -81,7 +81,11 @@ public:
      *               contain a parsable XMLBigDecimal.
      */
 
-    XMLBigDecimal(const XMLCh* const strValue);
+    XMLBigDecimal
+    (
+        const XMLCh* const strValue
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
 
     ~XMLBigDecimal();
 
diff --git a/src/xercesc/util/XMLBigInteger.cpp b/src/xercesc/util/XMLBigInteger.cpp
index fd8f57127f8ed3954f7a336899ec98fd67610656..4cdfb753d983bb2e1e844f0e8e815a7eae0ed0ed 100644
--- a/src/xercesc/util/XMLBigInteger.cpp
+++ b/src/xercesc/util/XMLBigInteger.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:53  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2003/05/15 19:07:46  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -213,11 +216,12 @@ void XMLBigInteger::parseBigInteger(const XMLCh* const toConvert
 	 * inclusive, will result in a NumberFormatException.
  */
 
-XMLBigInteger::XMLBigInteger(const XMLCh* const strValue)
+XMLBigInteger::XMLBigInteger(const XMLCh* const strValue,
+                             MemoryManager* const manager)
 : fSign(0)
 , fMagnitude(0)
 , fRawData(0)
-, fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+, fMemoryManager(manager)
 {
     if (!strValue)
         ThrowXML(NumberFormatException, XMLExcepts::XMLNUM_emptyString);
diff --git a/src/xercesc/util/XMLBigInteger.hpp b/src/xercesc/util/XMLBigInteger.hpp
index 554e01233c42e91c86f9bcdb6fcac06dac36640e..dfa639cb12c75cc021bcabf83fb3bde55fe50d26 100644
--- a/src/xercesc/util/XMLBigInteger.hpp
+++ b/src/xercesc/util/XMLBigInteger.hpp
@@ -81,8 +81,11 @@ public:
      *               contain a parsable XMLBigInteger.
      */
 
-    XMLBigInteger(const XMLCh* const strValue);
-
+    XMLBigInteger
+    (
+        const XMLCh* const strValue
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
     ~XMLBigInteger();
 
     XMLBigInteger(const XMLBigInteger& toCopy);
diff --git a/src/xercesc/util/XMLDouble.cpp b/src/xercesc/util/XMLDouble.cpp
index c56d0081a44a170b91b093e5638dbda0574d903a..e3b482099f7350bfd358b67021e86e09209baaeb 100644
--- a/src/xercesc/util/XMLDouble.cpp
+++ b/src/xercesc/util/XMLDouble.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.10  2003/05/16 06:01:53  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.9  2003/05/16 03:11:22  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -151,8 +154,9 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 //  ctor/dtor
 // ---------------------------------------------------------------------------
-XMLDouble::XMLDouble(const XMLCh* const strValue)
-:XMLAbstractDoubleFloat()
+XMLDouble::XMLDouble(const XMLCh* const strValue,
+                     MemoryManager* const manager)
+:XMLAbstractDoubleFloat(manager)
 {
     init(strValue);
 }
diff --git a/src/xercesc/util/XMLDouble.hpp b/src/xercesc/util/XMLDouble.hpp
index b4de11a05f2eba0322b56f4b9f874112031b1eff..9576c59928231c47d2d0a22099c9ef7403631bb0 100644
--- a/src/xercesc/util/XMLDouble.hpp
+++ b/src/xercesc/util/XMLDouble.hpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:53  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2002/12/11 00:20:02  peiyongz
  * Doing businesss in value space. Converting out-of-bound value into special values.
  *
@@ -122,7 +125,8 @@ public:
 	 *               contain a parsable XMLDouble.
 	 */
 
-    XMLDouble(const XMLCh* const strValue);
+    XMLDouble(const XMLCh* const strValue,
+              MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
 
     ~XMLDouble();
 
diff --git a/src/xercesc/util/XMLFloat.cpp b/src/xercesc/util/XMLFloat.cpp
index 472f94c8475e53932967eb4560c9fc425fef9e9d..2b9f2507281158a5cadf9ce800784561f32b7da7 100644
--- a/src/xercesc/util/XMLFloat.cpp
+++ b/src/xercesc/util/XMLFloat.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.11  2003/05/16 06:01:53  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.10  2003/05/16 03:11:22  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -146,8 +149,9 @@ XERCES_CPP_NAMESPACE_BEGIN
 // ---------------------------------------------------------------------------
 //  ctor/dtor
 // ---------------------------------------------------------------------------
-XMLFloat::XMLFloat(const XMLCh* const strValue)
-:XMLAbstractDoubleFloat()
+XMLFloat::XMLFloat(const XMLCh* const strValue,
+                   MemoryManager* const manager)
+:XMLAbstractDoubleFloat(manager)
 {
     init(strValue);
 }
diff --git a/src/xercesc/util/XMLFloat.hpp b/src/xercesc/util/XMLFloat.hpp
index 264f8a3a4db63003b9bed7d72f08cca111c6fc9f..d77d49ea3b744f8385fa9242df109566685190a1 100644
--- a/src/xercesc/util/XMLFloat.hpp
+++ b/src/xercesc/util/XMLFloat.hpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:53  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2002/12/11 00:20:02  peiyongz
  * Doing businesss in value space. Converting out-of-bound value into special values.
  *
@@ -117,7 +120,8 @@ public:
 	 *               contain a parsable XMLFloat.
 	 */
 
-    XMLFloat(const XMLCh* const strValue);
+    XMLFloat(const XMLCh* const strValue,
+             MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
 
     ~XMLFloat();
 
diff --git a/src/xercesc/util/XMLURL.cpp b/src/xercesc/util/XMLURL.cpp
index f20a69d232f114fff4974543d77be9c43b903a0a..8daebda84446862c12959928bbead3b31d9b12a4 100644
--- a/src/xercesc/util/XMLURL.cpp
+++ b/src/xercesc/util/XMLURL.cpp
@@ -181,9 +181,9 @@ XMLURL::Protocols XMLURL::lookupByName(const XMLCh* const protoName)
 // ---------------------------------------------------------------------------
 //  XMLURL: Constructors and Destructor
 // ---------------------------------------------------------------------------
-XMLURL::XMLURL() :
+XMLURL::XMLURL(MemoryManager* const manager) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(manager)
     , fFragment(0)
     , fHost(0)
     , fPassword(0)
@@ -198,9 +198,10 @@ XMLURL::XMLURL() :
 }
 
 XMLURL::XMLURL(const XMLCh* const    baseURL
-             , const XMLCh* const    relativeURL) :
+             , const XMLCh* const    relativeURL
+             , MemoryManager* const manager) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(manager)
     , fFragment(0)
     , fHost(0)
     , fPassword(0)
@@ -223,10 +224,11 @@ XMLURL::XMLURL(const XMLCh* const    baseURL
     }
 }
 
-XMLURL::XMLURL(const XMLCh* const    baseURL
-             , const char* const     relativeURL) :
+XMLURL::XMLURL(const XMLCh* const  baseURL
+             , const char* const   relativeURL
+             , MemoryManager* const manager) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(manager)
     , fFragment(0)
     , fHost(0)
     , fPassword(0)
@@ -254,7 +256,7 @@ XMLURL::XMLURL(const XMLCh* const    baseURL
 XMLURL::XMLURL(const XMLURL&         baseURL
              , const XMLCh* const    relativeURL) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(baseURL.fMemoryManager)
     , fFragment(0)
     , fHost(0)
     , fPassword(0)
@@ -280,7 +282,7 @@ XMLURL::XMLURL(const XMLURL&         baseURL
 XMLURL::XMLURL(const  XMLURL&        baseURL
              , const char* const     relativeURL) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(baseURL.fMemoryManager)
     , fFragment(0)
     , fHost(0)
     , fPassword(0)
@@ -306,9 +308,10 @@ XMLURL::XMLURL(const  XMLURL&        baseURL
 
 }
 
-XMLURL::XMLURL(const XMLCh* const urlText) :
+XMLURL::XMLURL(const XMLCh* const urlText,
+               MemoryManager* const manager) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(manager)
     , fFragment(0)
     , fHost(0)
     , fPassword(0)
@@ -331,9 +334,10 @@ XMLURL::XMLURL(const XMLCh* const urlText) :
     }
 }
 
-XMLURL::XMLURL(const char* const urlText) :
+XMLURL::XMLURL(const char* const urlText,
+               MemoryManager* const manager) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(manager)
     , fFragment(0)
     , fHost(0)
     , fPassword(0)
@@ -360,7 +364,7 @@ XMLURL::XMLURL(const char* const urlText) :
 
 XMLURL::XMLURL(const XMLURL& toCopy) :
 
-    fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+    fMemoryManager(toCopy.fMemoryManager)
     , fFragment(0)
     , fHost(0)
     , fPassword(0)
@@ -490,7 +494,7 @@ void XMLURL::setURL(const XMLCh* const    baseURL
 	{
 		if (*baseURL)
 		{
-			XMLURL basePart(baseURL);
+			XMLURL basePart(baseURL, fMemoryManager);
 			if (!conglomerateWithBase(basePart, false))
 			{
 				cleanup();
@@ -617,7 +621,7 @@ void XMLURL::makeRelativeTo(const XMLCh* const baseURLText)
     if (!isRelative())
         return;
 
-    XMLURL baseURL(baseURLText);
+    XMLURL baseURL(baseURLText, fMemoryManager);
     conglomerateWithBase(baseURL);
 }
 
diff --git a/src/xercesc/util/XMLURL.hpp b/src/xercesc/util/XMLURL.hpp
index 90deaa2237892cad53bf75ede1aac576f3dfc9ec..9b0f2c97ce8c4d7ae5c4d77e7d6afc2d30058b68 100644
--- a/src/xercesc/util/XMLURL.hpp
+++ b/src/xercesc/util/XMLURL.hpp
@@ -61,7 +61,7 @@
 #if !defined(XMLURL_HPP)
 #define XMLURL_HPP
 
-#include <xercesc/util/XMLException.hpp>
+#include <xercesc/util/PlatformUtils.hpp>
 
 XERCES_CPP_NAMESPACE_BEGIN
 
@@ -100,16 +100,18 @@ public:
     // -----------------------------------------------------------------------
     //  Constructors and Destructor
     // -----------------------------------------------------------------------
-    XMLURL();
+    XMLURL(MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
     XMLURL
     (
         const   XMLCh* const    baseURL
         , const XMLCh* const    relativeURL
+        , MemoryManager* const manager  = XMLPlatformUtils::fgMemoryManager
     );
     XMLURL
     (
         const   XMLCh* const    baseURL
         , const char* const     relativeURL
+        , MemoryManager* const manager  = XMLPlatformUtils::fgMemoryManager
     );
     XMLURL
     (
@@ -124,10 +126,12 @@ public:
     XMLURL
     (
         const   XMLCh* const    urlText
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
     );
     XMLURL
     (
         const   char* const     urlText
+        , MemoryManager* const manager 
     );
     XMLURL(const XMLURL& toCopy);
     virtual ~XMLURL();
diff --git a/src/xercesc/util/XMLUri.cpp b/src/xercesc/util/XMLUri.cpp
index 4c84ac51a9d08b7616053501cce32c622b439923..e1cd0635e9d9db2a66b559fb5e68f73d87e22ed3 100644
--- a/src/xercesc/util/XMLUri.cpp
+++ b/src/xercesc/util/XMLUri.cpp
@@ -241,7 +241,8 @@ static const XMLCh PATH_SEPARATORS[] =
 //  XMLUri: Constructors and Helper methods
 // ---------------------------------------------------------------------------
 // ctor# 2
-XMLUri::XMLUri(const XMLCh* const uriSpec)
+XMLUri::XMLUri(const XMLCh* const uriSpec,
+               MemoryManager* const manager)
 : fScheme(0)
 , fUserInfo(0)
 , fHost(0)
@@ -250,7 +251,7 @@ XMLUri::XMLUri(const XMLCh* const uriSpec)
 , fQueryString(0)
 , fFragment(0)
 , fURIText(0)
-, fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+, fMemoryManager(manager)
 {
     try {
         initialize((XMLUri *)0, uriSpec);
@@ -264,7 +265,8 @@ XMLUri::XMLUri(const XMLCh* const uriSpec)
 
 // ctor# 7 relative ctor
 XMLUri::XMLUri(const XMLUri* const      baseURI
-                    , const XMLCh* const       uriSpec)
+              , const XMLCh* const   uriSpec
+              , MemoryManager* const manager)
 : fScheme(0)
 , fUserInfo(0)
 , fHost(0)
@@ -273,7 +275,7 @@ XMLUri::XMLUri(const XMLUri* const      baseURI
 , fQueryString(0)
 , fFragment(0)
 , fURIText(0)
-, fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+, fMemoryManager(manager)
 {
     try {
         initialize(baseURI, uriSpec);
@@ -295,7 +297,7 @@ XMLUri::XMLUri(const XMLUri& toCopy)
 , fQueryString(0)
 , fFragment(0)
 , fURIText(0)
-, fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+, fMemoryManager(toCopy.fMemoryManager)
 {
     try {
         initialize(toCopy);
diff --git a/src/xercesc/util/XMLUri.hpp b/src/xercesc/util/XMLUri.hpp
index faa47a943e9b0b9f063d8f518c936b7de4cde786..8a1cd1fb64d1828d970232996737d2a210d2f778 100644
--- a/src/xercesc/util/XMLUri.hpp
+++ b/src/xercesc/util/XMLUri.hpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.9  2003/05/16 06:01:53  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.8  2003/05/15 19:07:46  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -143,7 +146,8 @@ public:
      * ctor# 2
      *
      */
-    XMLUri(const XMLCh* const    uriSpec);
+    XMLUri(const XMLCh* const    uriSpec,
+           MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
 
     /**
      * Construct a new URI from a base URI and a URI specification string.
@@ -157,8 +161,9 @@ public:
      * ctor# 7 relative ctor
      *
      */
-    XMLUri(const XMLUri* const     baseURI
-         , const XMLCh* const      uriSpec);
+    XMLUri(const XMLUri* const  baseURI
+         , const XMLCh* const   uriSpec
+         , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
 
     /**
      * Copy constructor
diff --git a/src/xercesc/util/regx/RegularExpression.cpp b/src/xercesc/util/regx/RegularExpression.cpp
index 86fb9b6e2fe49d0c7e716bbb793eecd41e88dd2c..2f55bca05e4e199068d31e391088bc9e52f63dc6 100644
--- a/src/xercesc/util/regx/RegularExpression.cpp
+++ b/src/xercesc/util/regx/RegularExpression.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.10  2003/05/16 06:01:57  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.9  2003/05/16 00:03:10  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -236,7 +239,8 @@ bool RegularExpression::Context::nextCh(XMLInt32& ch, int& offset,
 // ---------------------------------------------------------------------------
 //  RegularExpression: Constructors and Destructors
 // ---------------------------------------------------------------------------
-RegularExpression::RegularExpression(const char* const pattern)
+RegularExpression::RegularExpression(const char* const pattern,
+                                     MemoryManager* const manager)
 	:fHasBackReferences(false),
 	 fFixedStringOnly(false),
 	 fNoGroups(0),
@@ -250,9 +254,9 @@ RegularExpression::RegularExpression(const char* const pattern)
 	 fOperations(0),
 	 fTokenTree(0),
 	 fFirstChar(0),
-     fOpFactory(XMLPlatformUtils::fgMemoryManager),
+     fOpFactory(manager),
      fTokenFactory(0),
-     fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+     fMemoryManager(manager)
 {
 	try {
 
@@ -268,7 +272,8 @@ RegularExpression::RegularExpression(const char* const pattern)
 }
 
 RegularExpression::RegularExpression(const char* const pattern,
-									 const char* const options)
+									 const char* const options,
+                                     MemoryManager* const manager)
 	:fHasBackReferences(false),
 	 fFixedStringOnly(false),
 	 fNoGroups(0),
@@ -282,9 +287,9 @@ RegularExpression::RegularExpression(const char* const pattern,
 	 fOperations(0),
 	 fTokenTree(0),
 	 fFirstChar(0),
-     fOpFactory(XMLPlatformUtils::fgMemoryManager),
+     fOpFactory(manager),
      fTokenFactory(0),
-     fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+     fMemoryManager(manager)
 {
 	try {
 
@@ -302,7 +307,8 @@ RegularExpression::RegularExpression(const char* const pattern,
 }
 
 
-RegularExpression::RegularExpression(const XMLCh* const pattern)
+RegularExpression::RegularExpression(const XMLCh* const pattern,
+                                     MemoryManager* const manager)
 	:fHasBackReferences(false),
 	 fFixedStringOnly(false),
 	 fNoGroups(0),
@@ -316,9 +322,9 @@ RegularExpression::RegularExpression(const XMLCh* const pattern)
 	 fOperations(0),
 	 fTokenTree(0),
 	 fFirstChar(0),
-     fOpFactory(XMLPlatformUtils::fgMemoryManager),
+     fOpFactory(manager),
      fTokenFactory(0),
-     fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+     fMemoryManager(manager)
 {
 	try {
 
@@ -332,7 +338,8 @@ RegularExpression::RegularExpression(const XMLCh* const pattern)
 }
 
 RegularExpression::RegularExpression(const XMLCh* const pattern,
-									 const XMLCh* const options)
+									 const XMLCh* const options,
+                                     MemoryManager* const manager)
 	:fHasBackReferences(false),
 	 fFixedStringOnly(false),
 	 fNoGroups(0),
@@ -346,9 +353,9 @@ RegularExpression::RegularExpression(const XMLCh* const pattern,
 	 fOperations(0),
 	 fTokenTree(0),
 	 fFirstChar(0),
-     fOpFactory(XMLPlatformUtils::fgMemoryManager),
+     fOpFactory(manager),
      fTokenFactory(0),
-     fMemoryManager(XMLPlatformUtils::fgMemoryManager)
+     fMemoryManager(manager)
 {
 	try {
 
diff --git a/src/xercesc/util/regx/RegularExpression.hpp b/src/xercesc/util/regx/RegularExpression.hpp
index 346c10e0ee530e6b8e0a7b25b7ce06c67c7ea7bc..381cbd186d1a4d227c3d09bf1af4c6a71d4193a9 100644
--- a/src/xercesc/util/regx/RegularExpression.hpp
+++ b/src/xercesc/util/regx/RegularExpression.hpp
@@ -89,10 +89,28 @@ public:
     // -----------------------------------------------------------------------
     //  Public Constructors and Destructor
     // -----------------------------------------------------------------------
-    RegularExpression(const char* const pattern);
-    RegularExpression(const char* const pattern, const char* const options);
-    RegularExpression(const XMLCh* const pattern);
-    RegularExpression(const XMLCh* const pattern, const XMLCh* const options);
+    RegularExpression
+    (
+        const char* const pattern
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
+    RegularExpression
+    (
+        const char* const pattern
+        , const char* const options
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
+    RegularExpression
+    (
+        const XMLCh* const pattern
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
+    RegularExpression
+    (
+        const XMLCh* const pattern
+        , const XMLCh* const options
+        , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
+    );
     ~RegularExpression();
 
     // -----------------------------------------------------------------------
diff --git a/src/xercesc/validators/datatype/AbstractStringValidator.cpp b/src/xercesc/validators/datatype/AbstractStringValidator.cpp
index 35b75f251a37f41c3cf87d567e0906460919469e..dd59333bcf4467c22050b872a7cd76956efb2cf8 100644
--- a/src/xercesc/validators/datatype/AbstractStringValidator.cpp
+++ b/src/xercesc/validators/datatype/AbstractStringValidator.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.12  2003/05/16 06:01:57  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.11  2003/05/15 18:53:26  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -646,7 +649,7 @@ void AbstractStringValidator::checkContent( const XMLCh* const content, bool asB
         // lazy construction
         if (getRegex() ==0) {
             try {
-                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption));
+                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption, fMemoryManager));
             }
             catch (XMLException &e)
             {
diff --git a/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp b/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp
index 8ec1e12194618863faf03c573ee81e951573c91c..ae242bd1ed8ae1fb8bf42254c6886ce276acd917 100644
--- a/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp
+++ b/src/xercesc/validators/datatype/AnyURIDatatypeValidator.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:57  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2003/05/15 18:53:26  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -201,7 +204,7 @@ void AnyURIDatatypeValidator::checkValueSpace(const XMLCh* const content)
     try
     {
         if (!fTempURI)
-            fTempURI = new XMLUri(BASE_URI);
+            fTempURI = new XMLUri(BASE_URI, fMemoryManager);
 
         // Support for relative URLs
         // According to Java 1.1: URLs may also be specified with a
@@ -209,7 +212,7 @@ void AnyURIDatatypeValidator::checkValueSpace(const XMLCh* const content)
         //
         if (XMLString::stringLen(content))
         {
-            XMLUri  newURI(fTempURI, content );
+            XMLUri  newURI(fTempURI, content, fMemoryManager);
         }
     }
     catch (...)
diff --git a/src/xercesc/validators/datatype/BooleanDatatypeValidator.cpp b/src/xercesc/validators/datatype/BooleanDatatypeValidator.cpp
index e207c18997cfc7d8b45a7203faa0105e0d14e88f..6686a97296a743fb65c219803189fcd483d0d3b5 100644
--- a/src/xercesc/validators/datatype/BooleanDatatypeValidator.cpp
+++ b/src/xercesc/validators/datatype/BooleanDatatypeValidator.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.8  2003/05/16 06:01:57  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.7  2003/05/15 18:53:26  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -184,7 +187,7 @@ void BooleanDatatypeValidator::checkContent( const XMLCh* const content, bool as
         // lazy construction
         if (getRegex() ==0) {
             try {
-                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption));
+                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption, fMemoryManager));
             }
             catch (XMLException &e)
             {
diff --git a/src/xercesc/validators/datatype/DateTimeValidator.cpp b/src/xercesc/validators/datatype/DateTimeValidator.cpp
index 0994dae0914f37a1d4a1e43720f22f678d7f96cd..bce5b6a2ae770205a125979c287ade94fe4a91cd 100644
--- a/src/xercesc/validators/datatype/DateTimeValidator.cpp
+++ b/src/xercesc/validators/datatype/DateTimeValidator.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.6  2003/05/16 06:01:57  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.5  2003/05/15 18:53:26  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -179,7 +182,7 @@ void DateTimeValidator::checkContent(const XMLCh* const content
         // lazy construction
         if (getRegex() ==0) {
             try {
-                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption));
+                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption, fMemoryManager));
             }
             catch (XMLException &e)
             {
diff --git a/src/xercesc/validators/datatype/DecimalDatatypeValidator.cpp b/src/xercesc/validators/datatype/DecimalDatatypeValidator.cpp
index 101b1be5908f814353adba7b0bbc878bb52466ae..5447ddd73635340d3bc8edcd79c1dc2efefb5e75 100644
--- a/src/xercesc/validators/datatype/DecimalDatatypeValidator.cpp
+++ b/src/xercesc/validators/datatype/DecimalDatatypeValidator.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.10  2003/05/16 06:01:57  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.9  2003/05/15 18:53:26  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -492,7 +495,7 @@ void DecimalDatatypeValidator::checkContent( const XMLCh* const content, bool as
         // lazy construction
         if (getRegex() ==0) {
             try {
-                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption));
+                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption, fMemoryManager));
             }
             catch (XMLException &e)
             {
diff --git a/src/xercesc/validators/datatype/DoubleDatatypeValidator.cpp b/src/xercesc/validators/datatype/DoubleDatatypeValidator.cpp
index c6011482d6c352781d0e277f52de388d6ce6e1e0..d9cceb10c8ca17597a86907c0c2994876157257c 100644
--- a/src/xercesc/validators/datatype/DoubleDatatypeValidator.cpp
+++ b/src/xercesc/validators/datatype/DoubleDatatypeValidator.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:57  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2003/05/15 18:53:26  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -266,7 +269,7 @@ void DoubleDatatypeValidator::checkContent( const XMLCh* const content, bool asB
         // lazy construction
         if (getRegex() ==0) {
             try {
-                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption));
+                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption, fMemoryManager));
             }
             catch (XMLException &e)
             {
diff --git a/src/xercesc/validators/datatype/FloatDatatypeValidator.cpp b/src/xercesc/validators/datatype/FloatDatatypeValidator.cpp
index 263df44a99858752e22f2a22f5ebcfdfd0fcf227..c60f63cc674d054e3fe73beeb26ca705b0d62d10 100644
--- a/src/xercesc/validators/datatype/FloatDatatypeValidator.cpp
+++ b/src/xercesc/validators/datatype/FloatDatatypeValidator.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:57  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2003/05/15 18:53:26  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -267,7 +270,7 @@ void FloatDatatypeValidator::checkContent( const XMLCh* const content, bool asBa
         // lazy construction
         if (getRegex() ==0) {
             try {
-                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption));
+                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption, fMemoryManager));
             }
             catch (XMLException &e)
             {
diff --git a/src/xercesc/validators/datatype/ListDatatypeValidator.cpp b/src/xercesc/validators/datatype/ListDatatypeValidator.cpp
index 7fbef053ac3d7868c9d3b3d9343d3a5a6ac0d59a..bac2af2b2f77314970a04f3e2399cc88d63ad5c7 100644
--- a/src/xercesc/validators/datatype/ListDatatypeValidator.cpp
+++ b/src/xercesc/validators/datatype/ListDatatypeValidator.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.9  2003/05/16 06:01:57  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.8  2003/05/15 18:53:26  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -239,7 +242,7 @@ void ListDatatypeValidator::checkContent( BaseRefVectorOf<XMLCh>* tokenVector
         if (getRegex() == 0)
         {
             try {
-                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption));
+                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption, fMemoryManager));
             }
             catch (XMLException &e)
             {
diff --git a/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp b/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp
index 92a00e9d8b9270c7e44dc4b03de9c2c47ab602a7..df9937af9a00e0e0f233de16f926449ac5aa723c 100644
--- a/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp
+++ b/src/xercesc/validators/datatype/NOTATIONDatatypeValidator.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.5  2003/05/16 06:01:57  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.4  2003/05/15 18:53:26  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -180,14 +183,17 @@ void NOTATIONDatatypeValidator::checkValueSpace(const XMLCh* const content)
     if (colonPosition > 0)
     {
         // Extract URI
-        XMLCh* uriPart = new XMLCh[colonPosition + 1];
-        ArrayJanitor<XMLCh> jan1(uriPart);
+        XMLCh* uriPart = (XMLCh*) fMemoryManager->allocate
+        (
+            (colonPosition + 1) * sizeof(XMLCh)
+        );//new XMLCh[colonPosition + 1];
+        ArrayJanitor<XMLCh> jan1(uriPart, fMemoryManager);
         XMLString::subString(uriPart, content, 0, colonPosition);
 
         try
         {
             // no relative uri support here
-            XMLUri  newURI(uriPart);
+            XMLUri  newURI(uriPart, fMemoryManager);
         }
         catch (...)
         {
@@ -198,8 +204,11 @@ void NOTATIONDatatypeValidator::checkValueSpace(const XMLCh* const content)
     }
 
     // Extract localpart
-    XMLCh* localPart = new XMLCh[contentLength - colonPosition];
-    ArrayJanitor<XMLCh> jan2(localPart);
+    XMLCh* localPart = (XMLCh*) fMemoryManager->allocate
+    (
+        (contentLength - colonPosition) * sizeof(XMLCh)
+    );//new XMLCh[contentLength - colonPosition];
+    ArrayJanitor<XMLCh> jan2(localPart, fMemoryManager);
     XMLString::subString(localPart, content, colonPosition + 1, contentLength);
 
     if ( !XMLString::isValidNCName(localPart))
diff --git a/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp b/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp
index b240388a191b421a8222b9adcebb731f6b2b2b77..498479d469a81ae2a4d41c583f00fc5f1f1ffb6b 100644
--- a/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp
+++ b/src/xercesc/validators/datatype/UnionDatatypeValidator.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.10  2003/05/16 06:01:57  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.9  2003/05/15 18:53:27  knoaman
  * Partial implementation of the configurable memory manager.
  *
@@ -344,7 +347,7 @@ void UnionDatatypeValidator::checkContent(const XMLCh* const content, bool asBas
         if (getRegex() == 0)
         {
             try {
-                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption));
+                setRegex(new (fMemoryManager) RegularExpression(getPattern(), SchemaSymbols::fgRegEx_XOption, fMemoryManager));
             }
             catch (XMLException &e)
             {