diff --git a/src/xercesc/util/Platforms/AIX/AIXPlatformUtils.cpp b/src/xercesc/util/Platforms/AIX/AIXPlatformUtils.cpp
index e81604baa700004e6dab38dc30704bf61a177a80..9ba83d259838b35489612f34d55346ac8489dc4c 100644
--- a/src/xercesc/util/Platforms/AIX/AIXPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/AIX/AIXPlatformUtils.cpp
@@ -220,8 +220,8 @@ unsigned int XMLPlatformUtils::fileSize(FileHandle theFile)
 
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fMemoryManager);
     FileHandle retVal = (FILE*)fopen( tmpFileName , "rb" );
 
     if (retVal == NULL)
@@ -240,8 +240,8 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     return fopen( tmpFileName , "wb" );
 }
 
@@ -310,7 +310,8 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
 
     //
@@ -318,8 +319,8 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
-    ArrayJanitor<char> janText(newSrc);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+    ArrayJanitor<char> janText(newSrc, fgMemoryManager);
 
     // Use a local buffer that is big enough for the largest legal path
     char absPath[PATH_MAX + 1];
@@ -331,7 +332,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
         ThrowXML(XMLPlatformUtilsException,
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
-    return XMLString::transcode(absPath);
+    return XMLString::transcode(absPath, manager);
 }
 
 bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
@@ -352,7 +353,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     char  dirBuf[PATH_MAX + 1];
     char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
@@ -363,7 +364,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(curDir);
+    return XMLString::transcode(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/BeOS/BeOSPlatformUtils.cpp b/src/xercesc/util/Platforms/BeOS/BeOSPlatformUtils.cpp
index bd56f6d6ef9f9f606862f9d35b160a18a746a2a8..28c9d9d0f6f538149f710484e86ec2117ef98f88 100644
--- a/src/xercesc/util/Platforms/BeOS/BeOSPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/BeOS/BeOSPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.7  2003/05/15 18:37:47  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.6  2003/04/25 17:18:53  peiyongz
  * throw exception if getcwd() fails
  *
@@ -271,8 +274,8 @@ unsigned int XMLPlatformUtils::fileSize(FileHandle theFile)
 
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     FileHandle retVal = (FILE*)fopen( tmpFileName , "rb" );
 
     if (retVal == NULL)
@@ -291,8 +294,8 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     return fopen( tmpFileName , "wb" );
 }
 
@@ -369,7 +372,8 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
 
     //
@@ -377,8 +381,8 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
-    ArrayJanitor<char> janText(newSrc);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+    ArrayJanitor<char> janText(newSrc, fgMemoryManager);
 
     // Use a local buffer that is big enough for the largest legal path
     char absPath[PATH_MAX + 1];
@@ -389,7 +393,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     {
         ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName);
     }
-    return XMLString::transcode(absPath);
+    return XMLString::transcode(absPath, manager);
 }
 
 bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
@@ -410,7 +414,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     char  dirBuf[PATH_MAX + 1];
     char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
@@ -421,7 +425,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(curDir);
+    return XMLString::transcode(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp b/src/xercesc/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp
index d4a454a867c20650eb7f73227c6351f3e60994c4..b52130329186696b8cb6996660cb519ab6228a1a 100644
--- a/src/xercesc/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/FreeBSD/FreeBSDPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.13  2003/05/15 18:37:47  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.12  2003/04/25 17:19:10  peiyongz
  * throw exception if getcwd() fails
  *
@@ -293,8 +296,8 @@ FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
     if (fileName == NULL)
 	ThrowXML(XMLPlatformUtilsException,
 		 XMLExcepts::CPtr_PointerIsZero);
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     FileHandle retVal = (FileHandle)fopen( tmpFileName , "r+" );
     return retVal;
 }
@@ -313,8 +316,8 @@ FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
     if (fileName == NULL)
 	ThrowXML(XMLPlatformUtilsException,
 		 XMLExcepts::CPtr_PointerIsZero);
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     return fopen( tmpFileName , "w" );
 }
 
@@ -405,7 +408,8 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
 
     //
@@ -413,8 +417,8 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
-    ArrayJanitor<char> janText(newSrc);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+    ArrayJanitor<char> janText(newSrc, fgMemoryManager);
 
     // Use a local buffer that is big enough for the largest legal path
     char absPath[PATH_MAX + 1];
@@ -425,7 +429,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     {
         ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName);
     }
-    return XMLString::transcode(absPath);
+    return XMLString::transcode(absPath, manager);
 }
 
 bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
@@ -446,7 +450,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     char  dirBuf[PATH_MAX + 1];
     char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
@@ -457,7 +461,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(curDir);
+    return XMLString::transcode(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/HPUX/HPPlatformUtils.cpp b/src/xercesc/util/Platforms/HPUX/HPPlatformUtils.cpp
index 7e5b703b78075c3251797dec9f892a5fee3164ef..b194234de9d40369ac0a8750468221ee3126ac66 100644
--- a/src/xercesc/util/Platforms/HPUX/HPPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/HPUX/HPPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.13  2003/05/15 18:37:48  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.12  2003/04/25 17:19:26  peiyongz
  * throw exception if getcwd() fails
  *
@@ -362,16 +365,16 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {
-    char* tmpFileName = XMLString::transcode(fileName);
+    char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
     FileHandle retVal = (FILE*) fopen(tmpFileName , "rb");
-    delete [] tmpFileName;
+    fgMemoryManager->deallocate(tmpFileName);//delete [] tmpFileName;
     return retVal;
 }
 
 FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     return fopen( tmpFileName , "wb" );
 }
 
@@ -449,7 +452,8 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
 
 
@@ -458,8 +462,8 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
-    ArrayJanitor<char> janText(newSrc);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+    ArrayJanitor<char> janText(newSrc, fgMemoryManager);
 
     // Use a local buffer that is big enough for the largest legal path
     char absPath[PATH_MAX + 1];
@@ -470,7 +474,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     {
         ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName);
     }
-    return XMLString::transcode(absPath);
+    return XMLString::transcode(absPath, manager);
 }
 
 
@@ -492,7 +496,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     char  dirBuf[PATH_MAX + 1];
     char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
@@ -503,7 +507,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(curDir);
+    return XMLString::transcode(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/IRIX/IRIXPlatformUtils.cpp b/src/xercesc/util/Platforms/IRIX/IRIXPlatformUtils.cpp
index 24b92aebd991f90774f8d0fdb251c7c2890b66c7..a505b73c021e01766664837f471337e5e54ff70d 100644
--- a/src/xercesc/util/Platforms/IRIX/IRIXPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/IRIX/IRIXPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.12  2003/05/15 18:37:48  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.11  2003/04/25 17:19:40  peiyongz
  * throw exception if getcwd() fails
  *
@@ -316,8 +319,8 @@ unsigned int XMLPlatformUtils::fileSize(FileHandle theFile)
 
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     FileHandle retVal = (FILE*)fopen( tmpFileName , "rb" );
 
     if (retVal == NULL)
@@ -338,8 +341,8 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     return fopen( tmpFileName , "wb" );
 }
 
@@ -422,7 +425,8 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
 
     //
@@ -430,8 +434,8 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
-    ArrayJanitor<char> janText(newSrc);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+    ArrayJanitor<char> janText(newSrc, fgMemoryManager);
 
     // Use a local buffer that is big enough for the largest legal path
     char absPath[PATH_MAX + 1];
@@ -442,7 +446,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     {
         ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName);
     }
-    return XMLString::transcode(absPath);
+    return XMLString::transcode(absPath, manager);
 }
 
 bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
@@ -463,7 +467,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     char  dirBuf[PATH_MAX + 1];
     char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
@@ -474,7 +478,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(curDir);
+    return XMLString::transcode(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/Linux/LinuxPlatformUtils.cpp b/src/xercesc/util/Platforms/Linux/LinuxPlatformUtils.cpp
index 119c12c6c683e8d309577da50dffeb89225b31c2..1c35de2d659f491c6753da40a270c6c6e1e0b2f4 100644
--- a/src/xercesc/util/Platforms/Linux/LinuxPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/Linux/LinuxPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.16  2003/05/15 18:37:48  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.15  2003/04/25 17:19:53  peiyongz
  * throw exception if getcwd() fails
  *
@@ -367,8 +370,8 @@ unsigned int XMLPlatformUtils::fileSize(FileHandle theFile)
 
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     FileHandle retVal = (FILE*)fopen( tmpFileName , "rb" );
 
     if (retVal == NULL)
@@ -387,8 +390,8 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     return fopen( tmpFileName , "wb" );
 }
 
@@ -465,7 +468,8 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
 
     //
@@ -473,8 +477,8 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
-    ArrayJanitor<char> janText(newSrc);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+    ArrayJanitor<char> janText(newSrc, fgMemoryManager);
 
     // Use a local buffer that is big enough for the largest legal path
     char absPath[PATH_MAX + 1];
@@ -485,7 +489,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     {
         ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName);
     }
-    return XMLString::transcode(absPath);
+    return XMLString::transcode(absPath, manager);
 }
 
 bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
@@ -506,7 +510,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     char  dirBuf[PATH_MAX + 1];
     char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
@@ -517,7 +521,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(curDir);
+    return XMLString::transcode(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/MacOS/MacAbstractFile.hpp b/src/xercesc/util/Platforms/MacOS/MacAbstractFile.hpp
index 4b257e24762b79164b4a85a019e6131dfa675750..8c356e2a9273ddd168d6d512787526267f91d382 100644
--- a/src/xercesc/util/Platforms/MacOS/MacAbstractFile.hpp
+++ b/src/xercesc/util/Platforms/MacOS/MacAbstractFile.hpp
@@ -60,12 +60,12 @@
 
 #pragma once
 
-#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/util/XMemory.hpp>
 
 XERCES_CPP_NAMESPACE_BEGIN
 
 //	Abstract class for files. This could be used to allow multiple file paradigms.
-class XMLMacAbstractFile
+class XMLMacAbstractFile : public XMemory
 {
     public:
         XMLMacAbstractFile() {}
diff --git a/src/xercesc/util/Platforms/MacOS/MacOSPlatformUtils.cpp b/src/xercesc/util/Platforms/MacOS/MacOSPlatformUtils.cpp
index f6420e3947205ff0a91ad9826f25e9432692078c..220decc71e4bc5ef4e4a5fe77a4b49081d84cad3 100644
--- a/src/xercesc/util/Platforms/MacOS/MacOSPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/MacOS/MacOSPlatformUtils.cpp
@@ -128,7 +128,8 @@ char*	ConvertSlashToColon(char* p, std::size_t charCount);
 
 XMLCh*	XMLCreateFullPathFromFSRef_X(const FSRef& startingRef);
 XMLCh*	XMLCreateFullPathFromFSRef_Classic(const FSRef& startingRef);
-XMLCh*	XMLCreateFullPathFromFSSpec_Classic(const FSSpec& startingSpec);
+XMLCh*	XMLCreateFullPathFromFSSpec_Classic(const FSSpec& startingSpec,
+                                            MemoryManager* const manager);
 bool	XMLParsePathToFSRef_X(const XMLCh* const pathName, FSRef& ref);
 bool	XMLParsePathToFSRef_Classic(const XMLCh* const pathName, FSRef& ref);
 bool	XMLParsePathToFSSpec_Classic(const XMLCh* const pathName, FSSpec& spec);
@@ -304,7 +305,8 @@ XMLPlatformUtils::resetFile(FileHandle theFile)
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
 XMLCh*
-XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                              MemoryManager* const manager)
 {
     XMLCh* path = NULL;
 
@@ -312,13 +314,13 @@ XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     {
         FSRef ref;
         if (!XMLParsePathToFSRef(srcPath, ref) || (path = XMLCreateFullPathFromFSRef(ref)) == NULL)
-            path = XMLString::replicate(srcPath);
+            path = XMLString::replicate(srcPath, manager);
     }
     else
     {
         FSSpec spec;
-        if (!XMLParsePathToFSSpec(srcPath, spec) || (path = XMLCreateFullPathFromFSSpec(spec)) == NULL)
-            path = XMLString::replicate(srcPath);
+        if (!XMLParsePathToFSSpec(srcPath, spec) || (path = XMLCreateFullPathFromFSSpec(spec, manager)) == NULL)
+            path = XMLString::replicate(srcPath, manager);
     }
 
     return path;
@@ -332,13 +334,13 @@ XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 }
 
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
 	//	Get a newly allocated path to the current directory
 	FSSpec spec;
 	XMLCh* path =
 		(noErr == FSMakeFSSpec(0, 0, NULL, &spec))
-			? XMLCreateFullPathFromFSSpec(spec)
+			? XMLCreateFullPathFromFSSpec(spec, manager)
 			: NULL;
 			
     if (!path)
@@ -998,8 +1000,8 @@ XMLParsePathToFSSpec_Classic(const XMLCh* const pathName, FSSpec& spec)
 	//	Manually parse the path using FSSpec APIs.
 	
     //	Transcode the path into ascii
-    const char* p = XMLString::transcode(pathName);
-    ArrayJanitor<const char> janPath(p);
+    const char* p = XMLString::transcode(pathName, fgMemoryManager);
+    ArrayJanitor<const char> janPath(p, fgMemoryManager);
     const char* pEnd;
     std::size_t segLen;
 
@@ -1201,7 +1203,7 @@ XMLCreateFullPathFromFSRef_X(const FSRef& startingRef)
 	uniBuf[pathLen++] = 0;
 	
 	//	Transcode into a dynamically allocated buffer of XMLChs
-	ArrayJanitor<XMLCh> result(new XMLCh[pathLen]);
+	ArrayJanitor<XMLCh> result((XMLCh*) fgMemoryManager->allocate(pathLen * sizeof(XMLCh))/*new XMLCh[pathLen]*/, fgMemoryManager);
 	if (result.get() != NULL)
 		CopyUniCharsToXMLChs(uniBuf, result.get(), pathLen, pathLen);
 		
@@ -1245,7 +1247,11 @@ XMLCreateFullPathFromFSRef_Classic(const FSRef& startingRef)
 			// name plus separator, dump it to the dynamic result buffer.
 			if (bufPos < (std::size_t)name.length + 1)
 			{
-				ArrayJanitor<XMLCh> temp(new XMLCh[bufCnt + resultLen]);
+				ArrayJanitor<XMLCh> temp
+                (
+                    (XMLCh*) fgMemoryManager->allocate((bufCnt + resultLen) * sizeof(XMLCh));//new XMLCh[bufCnt + resultLen]
+                    , fgMemoryManager
+                );
 				
 				// Copy in the static buffer
 				std::memcpy(temp.get(), &buf[bufPos], bufCnt * sizeof(XMLCh));
@@ -1273,7 +1279,11 @@ XMLCreateFullPathFromFSRef_Classic(const FSRef& startingRef)
 	while (err == noErr && catalogInfo.parentDirID != fsRtParID);
 	
 	// Composite existing buffer + any previous result buffer
-	ArrayJanitor<XMLCh> final(new XMLCh[bufCnt + resultLen]);
+	ArrayJanitor<XMLCh> final
+    (
+        (XMLCh*) fgMemoryManager->allocate((bufCnt + resultLen) * sizeof(XMLCh))//new XMLCh[bufCnt + resultLen]
+        , fgMemoryManager
+    );
 	
 	// Copy in the static buffer
 	std::memcpy(final.get(), &buf[bufPos], bufCnt * sizeof(XMLCh));
@@ -1287,7 +1297,8 @@ XMLCreateFullPathFromFSRef_Classic(const FSRef& startingRef)
 
 
 XMLCh*
-XMLCreateFullPathFromFSSpec(const FSSpec& startingSpec)
+XMLCreateFullPathFromFSSpec(const FSSpec& startingSpec,
+                            MemoryManager* const manager)
 {
 	XMLCh* result = NULL;
 	
@@ -1310,7 +1321,7 @@ XMLCreateFullPathFromFSSpec(const FSSpec& startingSpec)
 	else
 	{
 		//	Create using FSSpecs only
-		result = XMLCreateFullPathFromFSSpec_Classic(startingSpec);
+		result = XMLCreateFullPathFromFSSpec_Classic(startingSpec, manager);
 	}
 		
 	return result;
@@ -1318,7 +1329,8 @@ XMLCreateFullPathFromFSSpec(const FSSpec& startingSpec)
 
 
 XMLCh*
-XMLCreateFullPathFromFSSpec_Classic(const FSSpec& startingSpec)
+XMLCreateFullPathFromFSSpec_Classic(const FSSpec& startingSpec,
+                                    MemoryManager* const manager)
 {
 	//	Manually create the path using FSSpec APIs.
     OSStatus err = noErr;
@@ -1352,7 +1364,11 @@ XMLCreateFullPathFromFSSpec_Classic(const FSSpec& startingSpec)
 			// name plus separator, dump it to the dynamic result buffer.
 			if (bufPos < nameLen + 1)
 			{
-				ArrayJanitor<char> temp(new char[bufCnt + resultLen]);
+				ArrayJanitor<char> temp
+                (
+                    (char*) fgMemoryManager->allocate((bufCnt + resultLen) * sizeof(char))//new char[bufCnt + resultLen]
+                    , fgMemoryManager
+                );
 				
 				// Copy in the static buffer
 				std::memcpy(temp.get(), &buf[bufPos], bufCnt);
@@ -1384,7 +1400,11 @@ XMLCreateFullPathFromFSSpec_Classic(const FSSpec& startingSpec)
 	while (err == noErr && spec.parID != fsRtParID);
 	
 	// Composite existing buffer with any previous result buffer
-	ArrayJanitor<char> final(new char[bufCnt + resultLen]);
+	ArrayJanitor<char> final
+    (
+        (char*) fgMemoryManager->allocate((bufCnt + resultLen) * sizeof(char))//new char[bufCnt + resultLen]
+        , fgMemoryManager
+    );
 	
 	// Copy in the static buffer
 	std::memcpy(final.get(), &buf[bufPos], bufCnt);
@@ -1394,7 +1414,7 @@ XMLCreateFullPathFromFSSpec_Classic(const FSSpec& startingSpec)
 		std::memcpy(final.get() + bufCnt, result.get(), resultLen);
 
     // Cleanup and transcode to unicode
-    return XMLString::transcode(final.get());
+    return XMLString::transcode(final.get(), manager);
 }
 
 
diff --git a/src/xercesc/util/Platforms/OS2/OS2PlatformUtils.cpp b/src/xercesc/util/Platforms/OS2/OS2PlatformUtils.cpp
index 03113f62a129145ca605fb517e6ae9b3389607e5..0476ca61cbe023682004a01aed50845a9ac03a28 100644
--- a/src/xercesc/util/Platforms/OS2/OS2PlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/OS2/OS2PlatformUtils.cpp
@@ -148,8 +148,8 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     FileHandle retVal = (FILE*)fopen( tmpFileName , "rb" );
 
     if (retVal == NULL)
@@ -188,16 +188,17 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // -----------------------------------------------------------------------
 //  File system methods
 // -----------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
     // Transcode the incoming string
-    char* tmpSrcPath = XMLString::transcode(srcPath);
-    ArrayJanitor<char> janSrcPath(tmpSrcPath);
+    char* tmpSrcPath = XMLString::transcode(srcPath, fgMemoryManager);
+    ArrayJanitor<char> janSrcPath(tmpSrcPath, fgMemoryManager);
 
     char tmpPath[CCHMAXPATH];
     _fullpath(tmpPath, tmpSrcPath, CCHMAXPATH);
 
-    return XMLString::transcode(tmpPath);
+    return XMLString::transcode(tmpPath, manager);
 }
 
 bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
@@ -232,7 +233,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
 
     /*** 
@@ -242,7 +243,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
     ***/
 
     XMLCh curDir[]={ chPeriod, chForwardSlash, chNull};
-    return getFullPath(curDir);
+    return getFullPath(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/OS390/FileHandleImpl.hpp b/src/xercesc/util/Platforms/OS390/FileHandleImpl.hpp
index 9fbd3f32c69ba2c4dacd05167312da2c0d8f5111..e89cff30f6f954f3328d1a1a59caab78abdaee27 100644
--- a/src/xercesc/util/Platforms/OS390/FileHandleImpl.hpp
+++ b/src/xercesc/util/Platforms/OS390/FileHandleImpl.hpp
@@ -61,11 +61,11 @@
 #ifndef FILEHANDLEIMPL_HPP
 #define FILEHANDLEIMPL_HPP
 
-#include <xercesc/util/XercesDefs.hpp>
+#include <xercesc/util/XMemory.hpp>
 
 XERCES_CPP_NAMESPACE_BEGIN
 
-class FileHandleImpl
+class FileHandleImpl : public XMemory
 {
   private:
   FILE*      Handle;       // handle from fopen
diff --git a/src/xercesc/util/Platforms/OS390/OS390PlatformUtils.cpp b/src/xercesc/util/Platforms/OS390/OS390PlatformUtils.cpp
index b7f794d41fe79ede7698533e51af3e54161dd8d8..731d308c9e5dcefbf59be3c4c032d2f9ffb9d8c0 100644
--- a/src/xercesc/util/Platforms/OS390/OS390PlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/OS390/OS390PlatformUtils.cpp
@@ -301,8 +301,8 @@ static FileHandleImpl* openRead(char* tmpFileName)
         optionBufferSize += (strlen(pathobj.getfopenParms()) + 1);
      }
 
-     char* optionBuffer = new char[optionBufferSize];
-     ArrayJanitor<char> janText((char*)optionBuffer);
+     char* optionBuffer = (char*) fgMemoryManager->allocate(optionBufferSize * sizeof(char));//new char[optionBufferSize];
+     ArrayJanitor<char> janText((char*)optionBuffer, fgMemoryManager);
      strcpy(optionBuffer,"rb");
 
      // Build the options buffer
@@ -360,8 +360,11 @@ static FileHandleImpl* openRead(char* tmpFileName)
     //     path/path2/filename.ext  => //path.path2.ext(filename)
     //     path/path2/filename      => //path.path2.filename
 
-    char* datasetName = new char[ strlen(tmpFileName) + 5 ];
-    ArrayJanitor<char> janText1((char*)datasetName);
+    char* datasetName = (char*) fgMemoryManager->allocate
+    (
+        (strlen(tmpFileName) + 5) * sizeof(char)
+    );//new char[ strlen(tmpFileName) + 5 ];
+    ArrayJanitor<char> janText1((char*)datasetName, fgMemoryManager);
     char *datasetPos = datasetName, *tmpPos = tmpFileName;
 
     // We are in EBCDIC mode here
@@ -499,8 +502,8 @@ static FileHandleImpl* openWrite(char* tmpFileName)
     if (pathobj.getfopenParms())
        optionBufferSize += (strlen(pathobj.getfopenParms()) + 1);
 
-    char* optionBuffer = new char[optionBufferSize];
-    ArrayJanitor<char> janText((char*)optionBuffer);
+    char* optionBuffer = (char*) fgMemoryManager->allocate((optionBufferSize) * sizeof(char));//new char[optionBufferSize];
+    ArrayJanitor<char> janText((char*)optionBuffer, fgMemoryManager);
     strcpy(optionBuffer,"wb");
 
     // Build the options buffer
@@ -638,8 +641,8 @@ unsigned int XMLPlatformUtils::fileSize(FileHandle theFile)
 
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {
-    char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
 
     return openRead(tmpFileName);
 }
@@ -647,8 +650,11 @@ FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 
 FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 {
-    char* tmpFileName = new char[strlen(fileName) + 1];
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    char* tmpFileName = (char*) fgMemoryManager->allocate
+    (
+        (strlen(fileName) + 1) * sizeof(char)
+    );//new char[strlen(fileName) + 1];
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     strcpy(tmpFileName,fileName);
 
     return openRead(tmpFileName);
@@ -657,8 +663,8 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 {
-    char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
 
     return openWrite(tmpFileName);
 }
@@ -666,8 +672,11 @@ FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 
 FileHandle XMLPlatformUtils::openFileToWrite(const char* const fileName)
 {
-    char* tmpFileName = new char[strlen(fileName) + 1];
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    char* tmpFileName = (char*) fgMemoryManager->allocate
+    (
+        (strlen(fileName) + 1) * sizeof(char)
+    );//new char[strlen(fileName) + 1];
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     strcpy(tmpFileName,fileName);
 
     return openWrite(tmpFileName);
@@ -833,7 +842,8 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
 
     //
@@ -841,16 +851,16 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
-    ArrayJanitor<char> janText(newSrc);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+    ArrayJanitor<char> janText(newSrc, fgMemoryManager);
 
     Path390 pathobj;
     pathobj.setPath(newSrc);
 
     char* retPath = 0;
     // Use a local buffer that is big enough for the largest legal path
-    char *absPath = new char[_POSIX_PATH_MAX];
-    ArrayJanitor<char> janText2(absPath);
+    char *absPath = (char*) fgMemoryManager->allocate((_POSIX_PATH_MAX) * sizeof(char));//new char[_POSIX_PATH_MAX];
+    ArrayJanitor<char> janText2(absPath, fgMemoryManager);
 
     if ( (pathobj.getPathType() == PATH390_HFS) || (pathobj.getPathType() == PATH390_OTHER) ) {
        //get the absolute path
@@ -858,9 +868,9 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
        if (!retPath) {
           ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName);
           }
-       return XMLString::transcode(absPath);
+       return XMLString::transcode(absPath, manager);
     }
-    return XMLString::transcode(newSrc);
+    return XMLString::transcode(newSrc, manager);
 }
 
 bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
@@ -893,8 +903,8 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
          return false;
     }
 
-    char* tmpFileName = XMLString::transcode(toCheck);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    char* tmpFileName = XMLString::transcode(toCheck, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     Path390 pathobj;
     pathobj.setPath(tmpFileName);
 
@@ -903,7 +913,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
 
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
 
     /*** 
@@ -913,7 +923,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
     ***/
 
     XMLCh curDir[]={ chPeriod, chForwardSlash, chNull};
-    return getFullPath(curDir);
+    return getFullPath(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/OS400/OS400PlatformUtils.cpp b/src/xercesc/util/Platforms/OS400/OS400PlatformUtils.cpp
index d1b728233f3cba81f7201b58c0d02d8aa86bfa10..7d140a435f9ac5232a47d8e69ccd788e1e8af1d5 100644
--- a/src/xercesc/util/Platforms/OS400/OS400PlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/OS400/OS400PlatformUtils.cpp
@@ -249,8 +249,8 @@ unsigned int XMLPlatformUtils::fileSize(FileHandle theFile)
 #include <qusec.h>
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {   char errno_id[7];
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     errno = 0;
     FileHandle retVal = (FILE*)fopen( tmpFileName , "rb" );
 
@@ -281,8 +281,8 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
 
     return openFileToWrite(tmpFileName);
 }
@@ -393,7 +393,8 @@ char *realpath(const char *file_name, char *resolved_name)
 
 
 
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
 
     //
@@ -401,8 +402,8 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
-     ArrayJanitor<char> janText(newSrc);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+     ArrayJanitor<char> janText(newSrc, fgMemoryManager);
     // Use a local buffer that is big enough for the largest legal path
     char absPath[PATH_MAX + 1];
 	//get the absolute path
@@ -412,7 +413,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     {
 		ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName);
     }
-    return XMLString::transcode(absPath);
+    return XMLString::transcode(absPath, manager);
 
 
 }
@@ -434,7 +435,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     char  dirBuf[PATH_MAX + 1];
     char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
@@ -445,7 +446,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(curDir);
+    return XMLString::transcode(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
@@ -577,7 +578,7 @@ void XMLPlatformUtils::platformInit()
 	}
 }
 
-class  RecursiveMutex
+class  RecursiveMutex : public XMemory
 {
 public:
     pthread_mutex_t   mutex;
diff --git a/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp b/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp
index db6a21482acc6fe10fec03cbe1f18187ea9efea8..2b9fd57474ef25ad7986a1fe407edf045a046194 100644
--- a/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/OpenServer/OpenServerPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.8  2003/05/15 18:37:49  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.7  2003/04/25 17:20:11  peiyongz
  * throw exception if getcwd() fails
  *
@@ -246,8 +249,8 @@ unsigned int XMLPlatformUtils::fileSize(FileHandle theFile)
 
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     FileHandle retVal = (FILE*)fopen(tmpFileName , "rb");
 
     if (retVal == NULL)
@@ -268,8 +271,8 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     return fopen( tmpFileName , "wb" );
 }
 
@@ -343,21 +346,25 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
     //
     //  NOTE: The path provided has always already been opened successfully,
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
-    ArrayJanitor<char> janText(newSrc);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+    ArrayJanitor<char> janText(newSrc, fgMemoryManager);
 
     // Use a local buffer that is big enough for the largest legal path
 	 // Without the *3 we get exceptions with gcc on OpenServer 5.0.5/6 when 
 	 // relative paths are passed in
-    char *absPath = new char[pathconf(newSrc, _PC_PATH_MAX)*3];
-    ArrayJanitor<char> janText2(absPath);
+    char *absPath = (char*) fgMemoryManager->allocate
+    (
+        (pathconf(newSrc, _PC_PATH_MAX)*3) * sizeof(char)
+    );//new char[pathconf(newSrc, _PC_PATH_MAX)*3];
+    ArrayJanitor<char> janText2(absPath, fgMemoryManager);
     // Get the absolute path
     char* retPath = realpath(newSrc, absPath);
 
@@ -366,7 +373,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
         ThrowXML(XMLPlatformUtilsException,
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
-    return XMLString::transcode(absPath);
+    return XMLString::transcode(absPath, manager);
 }
 
 bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
@@ -387,7 +394,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     char  dirBuf[PATH_MAX + 1];
     char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
@@ -398,7 +405,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(curDir);
+    return XMLString::transcode(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
@@ -448,7 +455,7 @@ void XMLPlatformUtils::platformInit()
 // -----------------------------------------------------------------------
 //  Mutex- and atomic operation methods
 // -----------------------------------------------------------------------
-class  RecursiveMutex
+class  RecursiveMutex : public XMemory
 {
 public:
 	pthread_mutex_t   mutex;
diff --git a/src/xercesc/util/Platforms/QNX/QNXPlatformUtils.cpp b/src/xercesc/util/Platforms/QNX/QNXPlatformUtils.cpp
index 583307f2dd17975c40ffaf84b242bc06153bd19f..cf46bafb1054d4b6ed3d20a8de8c0139859ea4fb 100644
--- a/src/xercesc/util/Platforms/QNX/QNXPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/QNX/QNXPlatformUtils.cpp
@@ -157,8 +157,8 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     return openFile( tmpFileName );
 }
 
@@ -169,8 +169,8 @@ FileHandle XMLPlatformUtils::openFileToWrite(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     return openFileToWrite(tmpFileName);
 }
 
@@ -218,15 +218,16 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
     //
     //  NOTE: THe path provided has always already been opened successfully,
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
-    ArrayJanitor<char> janText(newSrc);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+    ArrayJanitor<char> janText(newSrc, fgMemoryManager);
     char absPath[PATH_MAX + 1];
 
     char* retPath = realpath(newSrc, &absPath[0]);
@@ -235,7 +236,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
         ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(absPath);
+    return XMLString::transcode(absPath, manager);
 }
 
 
@@ -246,7 +247,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     char  dirBuf[PATH_MAX + 1];
     char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
@@ -257,7 +258,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(curDir);
+    return XMLString::transcode(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/Solaris/SolarisPlatformUtils.cpp b/src/xercesc/util/Platforms/Solaris/SolarisPlatformUtils.cpp
index a56cb3a4af467b9bebc12172f79bc26277feb34c..a952ac75c799c7ed5fb0401dd8acfbea6870e3fd 100644
--- a/src/xercesc/util/Platforms/Solaris/SolarisPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/Solaris/SolarisPlatformUtils.cpp
@@ -248,8 +248,8 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     FileHandle retVal = (FILE*)fopen( tmpFileName , "rb" );
 
     if (retVal == NULL)
@@ -259,8 +259,8 @@ FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 
 FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     return fopen( tmpFileName , "wb" );
 }
 
@@ -333,15 +333,16 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
     //
     //  NOTE: THe path provided has always already been opened successfully,
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
-    ArrayJanitor<char> janText(newSrc);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+    ArrayJanitor<char> janText(newSrc, fgMemoryManager);
 
     // Use a local buffer that is big enough for the largest legal path
     char absPath[PATH_MAX + 1];
@@ -352,7 +353,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     {
         ThrowXML(XMLPlatformUtilsException, XMLExcepts::File_CouldNotGetBasePathName);
     }
-    return XMLString::transcode(absPath);
+    return XMLString::transcode(absPath, manager);
 }
 
 bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
@@ -373,7 +374,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     char  dirBuf[PATH_MAX + 1];
     char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
@@ -384,7 +385,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(curDir);
+    return XMLString::transcode(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/Tandem/TandemPlatformUtils.cpp b/src/xercesc/util/Platforms/Tandem/TandemPlatformUtils.cpp
index ddbc0192421fc52ab20aabbd232e2784bddae0e0..5a84182e5caa1b8e324e2a8240f4895919e678c3 100644
--- a/src/xercesc/util/Platforms/Tandem/TandemPlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/Tandem/TandemPlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.9  2003/05/15 18:37:49  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.8  2003/04/24 02:58:31  peiyongz
  * Logical Path Resolution
  *
@@ -207,7 +210,8 @@ unsigned int XMLPlatformUtils::fileSize(FileHandle theFile)
 
 FileHandle XMLPlatformUtils::openFile(const unsigned short* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> tmpFileNameJan((char*)tmpFileName , fgMemoryManager);
     FileHandle retVal = (FILE*)fopen( tmpFileName , "rb" );
 
     if (retVal == NULL)
@@ -242,7 +246,8 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
 
     //
@@ -250,7 +255,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
 
     // Use a local buffer that is big enough for the largest legal path
      char* tmpPath = dirname((char*)newSrc);
@@ -259,12 +264,15 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
         throw XMLPlatformUtilsException("XMLPlatformUtils::resetFile - Could not get the base path name");
     }
 
-    char* newXMLString = new char [strlen(tmpPath) +1];
-    ArrayJanitor<char> newJanitor(newXMLString);
+    char* newXMLString = (char*) fgMemoryManager->allocate
+    (
+        (strlen(tmpPath) +1) * sizeof(char)
+    );//new char [strlen(tmpPath) +1];
+    ArrayJanitor<char> newJanitor(newXMLString, fgMemoryManager);
     strcpy(newXMLString, tmpPath);
         strcat(newXMLString , "/");
     // Return a copy of the path, in Unicode format
-    return XMLString::transcode(newXMLString);
+    return XMLString::transcode(newXMLString, manager);
 }
 
 bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
diff --git a/src/xercesc/util/Platforms/Tru64/Tru64PlatformUtils.cpp b/src/xercesc/util/Platforms/Tru64/Tru64PlatformUtils.cpp
index 065ce4719bb731df042ebe181129fd52b616cce7..6ba7c8f34b0a9307c0fffa96793266e5fd62780f 100644
--- a/src/xercesc/util/Platforms/Tru64/Tru64PlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/Tru64/Tru64PlatformUtils.cpp
@@ -248,8 +248,8 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {
-  const char* tmpFileName = XMLString::transcode(fileName);
-  ArrayJanitor<char> janText((char*)tmpFileName);
+  const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+  ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
   FileHandle retVal = (FILE*)fopen( tmpFileName , "rb" );
 
   if (retVal == NULL)
@@ -259,8 +259,8 @@ FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 
 FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     return fopen( tmpFileName , "wb" );
 }
 
@@ -332,15 +332,16 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
   //
   //  NOTE: THe path provided has always already been opened successfully,
   //  so we know that its not some pathological freaky path. It comes in
   //  in native format, and goes out as Unicode always
   //
-  char* newSrc = XMLString::transcode(srcPath);
-  ArrayJanitor<char> janText(newSrc);
+  char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+  ArrayJanitor<char> janText(newSrc, fgMemoryManager);
 
   // Use a local buffer that is big enough for the largest legal path
   char absPath[PATH_MAX + 1];
@@ -352,7 +353,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
     ThrowXML(XMLPlatformUtilsException,
 	     XMLExcepts::File_CouldNotGetBasePathName);
   }
-  return XMLString::transcode(absPath);
+  return XMLString::transcode(absPath, manager);
 }
 
 bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
@@ -373,7 +374,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
   return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     char  dirBuf[PATH_MAX + 1];
     char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
@@ -384,7 +385,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(curDir);
+    return XMLString::transcode(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
diff --git a/src/xercesc/util/Platforms/UnixWare/UnixWarePlatformUtils.cpp b/src/xercesc/util/Platforms/UnixWare/UnixWarePlatformUtils.cpp
index 92c3fd453d794ab9cb3b742368dc474eaec0dbd4..5f2dc925e400afa3fd9bab764dd697ddb4e341c5 100644
--- a/src/xercesc/util/Platforms/UnixWare/UnixWarePlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/UnixWare/UnixWarePlatformUtils.cpp
@@ -56,6 +56,9 @@
 
 /*
  * $Log$
+ * Revision 1.10  2003/05/15 18:37:49  knoaman
+ * Partial implementation of the configurable memory manager.
+ *
  * Revision 1.9  2003/04/25 17:21:31  peiyongz
  * throw exception if getcwd() fails
  *
@@ -299,8 +302,8 @@ unsigned int XMLPlatformUtils::fileSize(FileHandle theFile)
 
 FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     FileHandle retVal = (FILE*)fopen( tmpFileName , "rb" );
 
     if (retVal == NULL)
@@ -319,8 +322,8 @@ FileHandle XMLPlatformUtils::openFile(const char* const fileName)
 
 FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
 {
-    const char* tmpFileName = XMLString::transcode(fileName);
-    ArrayJanitor<char> janText((char*)tmpFileName);
+    const char* tmpFileName = XMLString::transcode(fileName, fgMemoryManager);
+    ArrayJanitor<char> janText((char*)tmpFileName, fgMemoryManager);
     return fopen( tmpFileName , "wb" );
 }
 
@@ -397,15 +400,16 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
     //
     //  NOTE: The path provided has always already been opened successfully,
     //  so we know that its not some pathological freaky path. It comes in
     //  in native format, and goes out as Unicode always
     //
-    char* newSrc = XMLString::transcode(srcPath);
-    ArrayJanitor<char> janText(newSrc);
+    char* newSrc = XMLString::transcode(srcPath, fgMemoryManager);
+    ArrayJanitor<char> janText(newSrc, fgMemoryManager);
 
     // Use a local buffer that is big enough for the largest legal path
     char absPath[PATH_MAX + 1];
@@ -417,7 +421,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
         ThrowXML(XMLPlatformUtilsException,
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
-    return XMLString::transcode(absPath);
+    return XMLString::transcode(absPath, manager);
 }
 
 bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
@@ -438,7 +442,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     char  dirBuf[PATH_MAX + 1];
     char  *curDir = getcwd(&dirBuf[0], PATH_MAX + 1);
@@ -449,7 +453,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
                  XMLExcepts::File_CouldNotGetBasePathName);
     }
 
-    return XMLString::transcode(curDir);
+    return XMLString::transcode(curDir, manager);
 }
 
 inline bool XMLPlatformUtils::isAnySlash(XMLCh c) 
@@ -496,7 +500,7 @@ void XMLPlatformUtils::platformInit()
         panic( PanicHandler::Panic_SystemInit );
 }
 
-class  RecursiveMutex
+class  RecursiveMutex : public XMemory
 {
 public:
     pthread_mutex_t   mutex;
diff --git a/src/xercesc/util/Platforms/Win32/Win32PlatformUtils.cpp b/src/xercesc/util/Platforms/Win32/Win32PlatformUtils.cpp
index faa9a2eef140f8dca2cf4b7025ade0d262b37398..f4453bf12618df5b55e463a0ce56e953c5cb353c 100644
--- a/src/xercesc/util/Platforms/Win32/Win32PlatformUtils.cpp
+++ b/src/xercesc/util/Platforms/Win32/Win32PlatformUtils.cpp
@@ -292,7 +292,7 @@ FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
     //
     if (*srcPtr)
     {
-        tmpUName = XMLString::replicate(nameToOpen);
+        tmpUName = XMLString::replicate(nameToOpen, fgMemoryManager);
 
         XMLCh* tmpPtr = tmpUName;
         while (*tmpPtr)
@@ -324,7 +324,7 @@ FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
         //  We are Win 95 / 98.  Take the Unicode file name back to (char *)
         //    so that we can open it.
         //
-        char* tmpName = XMLString::transcode(nameToOpen);
+        char* tmpName = XMLString::transcode(nameToOpen, fgMemoryManager);
         retVal = ::CreateFileA
             (
             tmpName
@@ -335,11 +335,11 @@ FileHandle XMLPlatformUtils::openFile(const XMLCh* const fileName)
             , FILE_FLAG_SEQUENTIAL_SCAN
             , 0
             );
-        delete [] tmpName;
+        fgMemoryManager->deallocate(tmpName);//delete [] tmpName;
     }
 
     if (tmpUName)
-        delete [] tmpUName;
+        fgMemoryManager->deallocate(tmpUName);//delete [] tmpUName;
 
     if (retVal == INVALID_HANDLE_VALUE)
         return 0;
@@ -408,7 +408,7 @@ FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
     //
     if (*srcPtr)
     {
-        tmpUName = XMLString::replicate(fileName);
+        tmpUName = XMLString::replicate(fileName, fgMemoryManager);
 
         XMLCh* tmpPtr = tmpUName;
         while (*tmpPtr)
@@ -440,7 +440,7 @@ FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
         //  We are Win 95 / 98.  Take the Unicode file name back to (char *)
         //    so that we can open it.
         //
-        char* tmpName = XMLString::transcode(nameToOpen);
+        char* tmpName = XMLString::transcode(nameToOpen, fgMemoryManager);
         retVal = ::CreateFileA
             (
             tmpName
@@ -451,11 +451,11 @@ FileHandle XMLPlatformUtils::openFileToWrite(const XMLCh* const fileName)
             , FILE_ATTRIBUTE_NORMAL
             , 0
             );
-        delete [] tmpName;
+        fgMemoryManager->deallocate(tmpName);//delete [] tmpName;
     }
 
     if (tmpUName)
-        delete [] tmpUName;
+        fgMemoryManager->deallocate(tmpUName);//delete [] tmpUName;
 
     if (retVal == INVALID_HANDLE_VALUE)
         return 0;
@@ -554,7 +554,8 @@ void XMLPlatformUtils::resetFile(FileHandle theFile)
 // ---------------------------------------------------------------------------
 //  XMLPlatformUtils: File system methods
 // ---------------------------------------------------------------------------
-XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
+XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath,
+                                     MemoryManager* const manager)
 {
     //
     //  If we are on NT, then use wide character APIs, else use ASCII APIs.
@@ -572,13 +573,13 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
             return 0;
 
         // Return a copy of the path
-        return XMLString::replicate(tmpPath);
+        return XMLString::replicate(tmpPath, manager);
     }
      else
     {
         // Transcode the incoming string
-        char* tmpSrcPath = XMLString::transcode(srcPath);
-        ArrayJanitor<char> janSrcPath(tmpSrcPath);
+        char* tmpSrcPath = XMLString::transcode(srcPath, fgMemoryManager);
+        ArrayJanitor<char> janSrcPath(tmpSrcPath, fgMemoryManager);
 
         // Use a local buffer that is big enough for the largest legal path
         const unsigned int bufSize = 511;
@@ -589,7 +590,7 @@ XMLCh* XMLPlatformUtils::getFullPath(const XMLCh* const srcPath)
             return 0;
 
         // Return a transcoded copy of the path
-        return XMLString::transcode(tmpPath);
+        return XMLString::transcode(tmpPath, manager);
     }
 }
 
@@ -625,7 +626,7 @@ bool XMLPlatformUtils::isRelative(const XMLCh* const toCheck)
     return true;
 }
 
-XMLCh* XMLPlatformUtils::getCurrentDirectory()
+XMLCh* XMLPlatformUtils::getCurrentDirectory(MemoryManager* const manager)
 {
     //
     //  If we are on NT, then use wide character APIs, else use ASCII APIs.
@@ -642,7 +643,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
             return 0;
 
         // Return a copy of the path
-        return XMLString::replicate(tmpPath);
+        return XMLString::replicate(tmpPath, manager);
     }
      else
     {
@@ -655,7 +656,7 @@ XMLCh* XMLPlatformUtils::getCurrentDirectory()
             return 0;
 
         // Return a transcoded copy of the path
-        return XMLString::transcode(tmpPath);
+        return XMLString::transcode(tmpPath, manager);
     }
 }