diff --git a/src/xercesc/util/XMemory.cpp b/src/xercesc/util/XMemory.cpp
index 08a47c7c8b146a23e4ea41cf63b764665565cea1..e4261885b7ff801b4e14af80e8db28293c89e742 100644
--- a/src/xercesc/util/XMemory.cpp
+++ b/src/xercesc/util/XMemory.cpp
@@ -69,6 +69,11 @@ void* XMemory::operator new(size_t size, MemoryManager* manager)
     return (char*)block + headerSize;
 }
 
+void* XMemory::operator new(size_t /*size*/, void* ptr)
+{
+    return ptr;
+}
+
 void XMemory::operator delete(void* p)
 {
     if (p != 0)
@@ -107,6 +112,10 @@ void XMemory::operator delete(void* p, MemoryManager* manager)
     }
 }
 
+void XMemory::operator delete(void* /*p*/, void* /*ptr*/)
+{
+}
+
 #endif
 
 XERCES_CPP_NAMESPACE_END
diff --git a/src/xercesc/util/XMemory.hpp b/src/xercesc/util/XMemory.hpp
index 1058b3f4f3a29c223ea7d7a46c7ff11a4879cf3f..9fbbe13afa370f1bbe56109cee6f4ba13d928439 100644
--- a/src/xercesc/util/XMemory.hpp
+++ b/src/xercesc/util/XMemory.hpp
@@ -73,13 +73,22 @@ public :
 #endif
 
     /**
-      * This method overrides placement operator new
+      * This method defines a custom operator new, that will use the provided
+      * memory manager to perform the allocation
       *
       * @param size   The requested memory size
       * @param memMgr An application's memory manager
       */
     void* operator new(size_t size, MemoryManager* memMgr);
 
+    /**
+      * This method overrides placement operator new
+      *
+      * @param size   The requested memory size
+      * @param ptr    The memory location where the object should be allocated
+      */
+    void* operator new(size_t size, void* ptr);
+
     /**
       * This method overrides operator delete
       *
@@ -90,12 +99,20 @@ public :
      //The Borland compiler is complaining about duplicate overloading of delete
 #if !defined(XML_BORLAND)
     /**
-      * This method provides a matching delete for the placement new
+      * This method provides a matching delete for the custom operator new
       *
       * @param p      The pointer to the allocated memory
       * @param memMgr An application's memory manager 
       */
     void operator delete(void* p, MemoryManager* memMgr);
+
+    /**
+      * This method provides a matching delete for the placement new
+      *
+      * @param p      The pointer to the allocated memory
+      * @param ptr    The memory location where the object had to be allocated
+      */
+    void operator delete(void* p, void* ptr);
 #endif
 
     //@}
@@ -108,15 +125,11 @@ protected :
     //@{
 
     /**
-      * Protected default constructor and copy constructor
+      * Protected default constructor
       */
     XMemory()
     {
     }
-
-    XMemory(const XMemory&)
-    {
-    }
     //@}
 
 #if defined(XML_BORLAND)
@@ -125,11 +138,6 @@ protected :
     }
 #endif
 
-private:
-    // -----------------------------------------------------------------------
-    //  Unimplemented operators
-    // -----------------------------------------------------------------------
-    XMemory& operator=(const XMemory&);
 };
 
 XERCES_CPP_NAMESPACE_END