diff --git a/src/xercesc/util/XMLUri.cpp b/src/xercesc/util/XMLUri.cpp
index e7500981c4f2b29499c66715b7ef533871878f33..36ce3aa2e2564296ee522bd8ee54d81d9af49e23 100644
--- a/src/xercesc/util/XMLUri.cpp
+++ b/src/xercesc/util/XMLUri.cpp
@@ -236,9 +236,55 @@ static const XMLCh PATH_SEPARATORS[] =
 };
 
 // ---------------------------------------------------------------------------
-//  XMLUri: Constructors and initialization methods
+//  XMLUri: Constructors and Helper methods
 // ---------------------------------------------------------------------------
+// ctor# 2
+XMLUri::XMLUri(const XMLCh* const uriSpec)
+:fScheme(0)
+,fUserInfo(0)
+,fHost(0)
+,fPort(-1)
+,fPath(0)
+,fQueryString(0)
+,fFragment(0)
+{
+    try {
+        initialize((XMLUri *)0, uriSpec);
+    }
+    catch (...)
+    {
+        cleanUp();
+        throw;
+    }
+}
+
+// ctor# 7 relative ctor
+XMLUri::XMLUri(const XMLUri* const      baseURI
+                    , const XMLCh* const       uriSpec)
+:fScheme(0)
+,fUserInfo(0)
+,fHost(0)
+,fPort(-1)
+,fPath(0)
+,fQueryString(0)
+,fFragment(0)
+{
+    try {
+        initialize(baseURI, uriSpec);
+    }
+    catch (...)
+    {
+        cleanUp();
+        throw;
+    }
+}
+
 XMLUri::~XMLUri()
+{
+    cleanUp();
+}
+
+void XMLUri::cleanUp()
 {
     if (getScheme())
         delete[] fScheme;
@@ -802,14 +848,14 @@ void XMLUri::initializePath(const XMLCh* const uriSpec)
             fFragment = new XMLCh[index - start + 1];
             XMLString::subString(fFragment, uriSpec, start, index);
         }
-        else 
+        else
         {
             // RFC 2396, 4.0. URI Reference
             // URI-reference = [absoulteURI | relativeURI] [# fragment]
             //
             // RFC 2396, 4.1. Fragment Identifier
-            // fragment = *uric 
-            // 
+            // fragment = *uric
+            //
             // empty fragment is valid
             fFragment = 0;
         }
diff --git a/src/xercesc/util/XMLUri.hpp b/src/xercesc/util/XMLUri.hpp
index a81f9b39e1612f5e3a3690c509f6791399c12553..f5934e5efd8e4faed24a91b73b1b940b56992400 100644
--- a/src/xercesc/util/XMLUri.hpp
+++ b/src/xercesc/util/XMLUri.hpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.3  2002/08/23 20:45:24  tng
+ * .Memory leak fix: XMLUri data not deleted if constructor failed.
+ *
  * Revision 1.2  2002/02/20 18:17:02  tng
  * [Bug 5977] Warnings on generating apiDocs.
  *
@@ -430,6 +433,12 @@ private:
      */
      void initializePath(const XMLCh* const uriSpec);
 
+     /**
+      * cleanup the data variables
+      *
+      */
+     void cleanUp();
+
     // -----------------------------------------------------------------------
     //  Data members
     //
@@ -449,37 +458,6 @@ private:
 
 };
 
-// ---------------------------------------------------------------------------
-//  XMLUri: Public operators
-// ---------------------------------------------------------------------------
-
-// ctor# 2
-inline XMLUri::XMLUri(const XMLCh* const uriSpec)
-:fScheme(0)
-,fUserInfo(0)
-,fHost(0)
-,fPort(-1)
-,fPath(0)
-,fQueryString(0)
-,fFragment(0)
-{
-    initialize((XMLUri *)0, uriSpec);
-}
-
-// ctor# 7 relative ctor
-inline XMLUri::XMLUri(const XMLUri* const      baseURI
-                    , const XMLCh* const       uriSpec)
-:fScheme(0)
-,fUserInfo(0)
-,fHost(0)
-,fPort(-1)
-,fPath(0)
-,fQueryString(0)
-,fFragment(0)
-{
-    initialize(baseURI, uriSpec);
-}
-
 // ---------------------------------------------------------------------------
 //  XMLUri: Getter methods
 // ---------------------------------------------------------------------------