diff --git a/src/xercesc/idom/IDAttrImpl.cpp b/src/xercesc/idom/IDAttrImpl.cpp
index 386926e966b409a3fd47ed057cf302056204b913..3c3e1a04241efac901e765c263abab1b6939e5b8 100644
--- a/src/xercesc/idom/IDAttrImpl.cpp
+++ b/src/xercesc/idom/IDAttrImpl.cpp
@@ -254,7 +254,7 @@ void IDAttrImpl::setOwnerElement(IDOM_Element *ownerElem)
            bool                IDAttrImpl::hasChildNodes() const                   {return fParent.hasChildNodes (); };
            IDOM_Node          *IDAttrImpl::insertBefore(IDOM_Node *newChild, IDOM_Node *refChild)
                                                                                    {return fParent.insertBefore (newChild, refChild); };
-           void                IDAttrImpl::normalize()                             {fNode.normalize (); };
+           void                IDAttrImpl::normalize()                             {fParent.normalize (); };
            IDOM_Node          *IDAttrImpl::removeChild(IDOM_Node *oldChild)        {return fParent.removeChild (oldChild); };
            IDOM_Node          *IDAttrImpl::replaceChild(IDOM_Node *newChild, IDOM_Node *oldChild)
                                                                                    {return fParent.replaceChild (newChild, oldChild); };
diff --git a/src/xercesc/idom/IDDocumentFragmentImpl.cpp b/src/xercesc/idom/IDDocumentFragmentImpl.cpp
index 5e04067b10d50e427a7b35365f2b1b22639a97c2..179439ee84b5baeb59472af3e8207f68befda451 100644
--- a/src/xercesc/idom/IDDocumentFragmentImpl.cpp
+++ b/src/xercesc/idom/IDDocumentFragmentImpl.cpp
@@ -133,7 +133,7 @@ void IDDocumentFragmentImpl::setNodeValue(const XMLCh *x)
            bool                IDDocumentFragmentImpl::hasChildNodes() const                   {return fParent.hasChildNodes (); };
            IDOM_Node          *IDDocumentFragmentImpl::insertBefore(IDOM_Node *newChild, IDOM_Node *refChild)
                                                                             {return fParent.insertBefore (newChild, refChild); };
-           void                IDDocumentFragmentImpl::normalize()                             {fNode.normalize (); };
+           void                IDDocumentFragmentImpl::normalize()                             {fParent.normalize (); };
            IDOM_Node          *IDDocumentFragmentImpl::removeChild(IDOM_Node *oldChild)        {return fParent.removeChild (oldChild); };
            IDOM_Node          *IDDocumentFragmentImpl::replaceChild(IDOM_Node *newChild, IDOM_Node *oldChild)
                                                                             {return fParent.replaceChild (newChild, oldChild); };
diff --git a/src/xercesc/idom/IDDocumentImpl.cpp b/src/xercesc/idom/IDDocumentImpl.cpp
index 0b87280816e374289195e1c6f837b749421c984d..78e3a2d3a6efaf8169a9ff6aeb5a704271159abb 100644
--- a/src/xercesc/idom/IDDocumentImpl.cpp
+++ b/src/xercesc/idom/IDDocumentImpl.cpp
@@ -845,7 +845,7 @@ int             IDDocumentImpl::changes() const{
            IDOM_Node          *IDDocumentImpl::getParentNode() const                   {return fNode.getParentNode (); };
            IDOM_Node          *IDDocumentImpl::getPreviousSibling() const              {return fNode.getPreviousSibling (); };
            bool                IDDocumentImpl::hasChildNodes() const                   {return fParent.hasChildNodes (); };
-           void                IDDocumentImpl::normalize()                             {fNode.normalize (); };
+           void                IDDocumentImpl::normalize()                             {fParent.normalize (); };
            IDOM_Node          *IDDocumentImpl::replaceChild(IDOM_Node *newChild, IDOM_Node *oldChild)
                                                                             {return fParent.replaceChild (newChild, oldChild); };
            bool                IDDocumentImpl::isSupported(const XMLCh *feature, const XMLCh *version) const
@@ -865,6 +865,7 @@ int             IDDocumentImpl::changes() const{
 
 XMLCh * IDDocumentImpl::cloneString(const XMLCh *src)
 {
+    if (!src) return 0;
     size_t   len = XMLString::stringLen(src);
     len = (len + 1) * sizeof(XMLCh);
     len = (len % 4) + len;
diff --git a/src/xercesc/idom/IDDocumentTypeImpl.cpp b/src/xercesc/idom/IDDocumentTypeImpl.cpp
index 4921c8a16f61d811663fad482e4b78858fbbf9ba..44f9d02c459aac3e33ae9f5641b401f8770cc40e 100644
--- a/src/xercesc/idom/IDDocumentTypeImpl.cpp
+++ b/src/xercesc/idom/IDDocumentTypeImpl.cpp
@@ -390,7 +390,7 @@ void        IDDocumentTypeImpl::setInternalSubset(const XMLCh *value)
            bool                IDDocumentTypeImpl::hasChildNodes() const                   {return fParent.hasChildNodes (); };
            IDOM_Node          *IDDocumentTypeImpl::insertBefore(IDOM_Node *newChild, IDOM_Node *refChild)
                                                                             {return fParent.insertBefore (newChild, refChild); };
-           void                IDDocumentTypeImpl::normalize()                             {fNode.normalize (); };
+           void                IDDocumentTypeImpl::normalize()                             {fParent.normalize (); };
            IDOM_Node          *IDDocumentTypeImpl::removeChild(IDOM_Node *oldChild)        {return fParent.removeChild (oldChild); };
            IDOM_Node          *IDDocumentTypeImpl::replaceChild(IDOM_Node *newChild, IDOM_Node *oldChild)
                                                                             {return fParent.replaceChild (newChild, oldChild); };
diff --git a/src/xercesc/idom/IDElementImpl.cpp b/src/xercesc/idom/IDElementImpl.cpp
index 878a0666f1475ca4a8ddf79363fd9c2223328042..7b34d45cea3a40a5d8b2ba23c6fa0e38ce1b629d 100644
--- a/src/xercesc/idom/IDElementImpl.cpp
+++ b/src/xercesc/idom/IDElementImpl.cpp
@@ -493,7 +493,7 @@ void IDElementImpl::setupDefaultAttributes()
            bool                IDElementImpl::hasChildNodes() const                   {return fParent.hasChildNodes (); };
            IDOM_Node          *IDElementImpl::insertBefore(IDOM_Node *newChild, IDOM_Node *refChild)
                                                                             {return fParent.insertBefore (newChild, refChild); };
-           void                IDElementImpl::normalize()                             {fNode.normalize (); };
+           void                IDElementImpl::normalize()                             {fParent.normalize (); };
            IDOM_Node          *IDElementImpl::removeChild(IDOM_Node *oldChild)        {return fParent.removeChild (oldChild); };
            IDOM_Node          *IDElementImpl::replaceChild(IDOM_Node *newChild, IDOM_Node *oldChild)
                                                                             {return fParent.replaceChild (newChild, oldChild); };
diff --git a/src/xercesc/idom/IDEntityImpl.cpp b/src/xercesc/idom/IDEntityImpl.cpp
index b9aeedd574066adf9a22faf039bfecbe8f42d697..198e1f27b0a090c7bfc06c76cec253e5c3ac0814 100644
--- a/src/xercesc/idom/IDEntityImpl.cpp
+++ b/src/xercesc/idom/IDEntityImpl.cpp
@@ -66,7 +66,7 @@
 
 
 IDEntityImpl::IDEntityImpl(IDOM_Document *ownerDoc, const XMLCh *eName)
-   :  fNode(ownerDoc), fParent(ownerDoc)
+   :  fNode(ownerDoc), fParent(ownerDoc), fPublicId(0), fSystemId(0)
 {
     fRefEntity  = 0;
     fName        = ((IDDocumentImpl *)ownerDoc)->getPooledString(eName);
@@ -224,7 +224,7 @@ bool IDEntityImpl::hasChildNodes() const
            IDOM_Node          *IDEntityImpl::getPreviousSibling() const              {return fNode.getPreviousSibling (); };
            IDOM_Node          *IDEntityImpl::insertBefore(IDOM_Node *newChild, IDOM_Node *refChild)
                                                                             {return fParent.insertBefore (newChild, refChild); };
-           void                IDEntityImpl::normalize()                             {fNode.normalize (); };
+           void                IDEntityImpl::normalize()                             {fParent.normalize (); };
            IDOM_Node          *IDEntityImpl::removeChild(IDOM_Node *oldChild)        {return fParent.removeChild (oldChild); };
            IDOM_Node          *IDEntityImpl::replaceChild(IDOM_Node *newChild, IDOM_Node *oldChild)
                                                                             {return fParent.replaceChild (newChild, oldChild); };
diff --git a/src/xercesc/idom/IDEntityReferenceImpl.cpp b/src/xercesc/idom/IDEntityReferenceImpl.cpp
index 1023af102e29f3ac7e59c66afd786e8871a952f2..e6b78588c828d46d68162204a8d2c710ada48200 100644
--- a/src/xercesc/idom/IDEntityReferenceImpl.cpp
+++ b/src/xercesc/idom/IDEntityReferenceImpl.cpp
@@ -213,7 +213,7 @@ void IDEntityReferenceImpl::setReadOnly(bool readOnl,bool deep)
            bool                IDEntityReferenceImpl::hasChildNodes() const                   {return fParent.hasChildNodes (); };
            IDOM_Node          *IDEntityReferenceImpl::insertBefore(IDOM_Node *newChild, IDOM_Node *refChild)
                                                                             {return fParent.insertBefore (newChild, refChild); };
-           void                IDEntityReferenceImpl::normalize()                             {fNode.normalize (); };
+           void                IDEntityReferenceImpl::normalize()                             {fParent.normalize (); };
            IDOM_Node          *IDEntityReferenceImpl::removeChild(IDOM_Node *oldChild)        {return fParent.removeChild (oldChild); };
            IDOM_Node          *IDEntityReferenceImpl::replaceChild(IDOM_Node *newChild, IDOM_Node *oldChild)
                                                                             {return fParent.replaceChild (newChild, oldChild); };