diff --git a/src/xercesc/parsers/AbstractDOMParser.cpp b/src/xercesc/parsers/AbstractDOMParser.cpp
index 5ad30251f140bb35f7661a47d9cb9b3bfe475405..238b292f86b0acf8095c276a8fe8ec888463cf1d 100644
--- a/src/xercesc/parsers/AbstractDOMParser.cpp
+++ b/src/xercesc/parsers/AbstractDOMParser.cpp
@@ -654,6 +654,8 @@ void AbstractDOMParser::docPI(  const   XMLCh* const    target
 
 void AbstractDOMParser::endEntityReference(const XMLEntityDecl&)
 {
+    if (!fCreateEntityReferenceNodes) return;
+
     DOMEntityReferenceImpl *erImpl = 0;
     DOMNode* firstChild = 0;
 
@@ -664,69 +666,7 @@ void AbstractDOMParser::endEntityReference(const XMLEntityDecl&)
 
     fCurrentParent = fNodeStack->pop();
 
-    if (!fCreateEntityReferenceNodes && erImpl && firstChild) {
-        DOMNode *kid, *next;
-        fCurrentNode   = fCurrentParent->getLastChild();
-
-        for (kid = firstChild; kid != 0; kid = next)
-        {
-            // If kid and fCurrentNode are both Text nodes (but _not_ CDATASection,
-            // which is a subclass of Text), they can be merged.
-            if (kid->getNodeType() == DOMNode::TEXT_NODE   &&
-                fCurrentNode &&
-                fCurrentNode->getNodeType() == DOMNode::TEXT_NODE )
-            {
-                ((DOMTextImpl *) fCurrentNode)->appendData(((DOMTextImpl *) kid)->getData());
-            }
-            else {
-                // append the child of erImpl to currentParent
-                fCurrentNode = kid->cloneNode(true);
-                fCurrentParent->appendChild(fCurrentNode);
-
-                if (erImpl->getBaseURI()) {
-                    /**
-                     * Record baseURI information for the Element (by adding xml:base attribute)
-                     * or for the ProcessingInstruction (by setting a baseURI field)
-                     */
-                    if (fCurrentNode->getNodeType() == DOMNode::ELEMENT_NODE) {
-                        // if an element already has xml:base attribute
-                        // do nothing
-                        const XMLCh baseString[] =
-                        {
-                            chLatin_b, chLatin_a, chLatin_s, chLatin_e, chNull
-                        };
-                        const XMLCh xmlBaseString[] =
-                        {
-                            chLatin_x, chLatin_m, chLatin_l, chColon, chLatin_b, chLatin_a, chLatin_s, chLatin_e, chNull
-                        };
-
-                        if (fScanner -> getDoNamespaces() && (((DOMElement*)fCurrentNode)->getAttributeNodeNS(DOMNodeImpl::getXmlURIString(), baseString) != 0)) {
-                            return;
-                        } else if (((DOMElement*)fCurrentNode)->getAttributeNode(xmlBaseString) != 0) {
-                            return;
-                        }
-
-                        // retrive the baseURI from the entity decl
-                        const XMLCh* baseURI = erImpl->getBaseURI();
-                        if (baseURI != 0 && !XMLString::equals(baseURI,fDocument->getDocumentURI())) {
-                            if (fScanner -> getDoNamespaces()) {
-                                ((DOMElement*)fCurrentNode)->setAttributeNS(DOMNodeImpl::getXmlURIString(), baseString, baseURI);
-                            } else {
-                                ((DOMElement*)fCurrentNode)->setAttribute(xmlBaseString, baseURI);
-                            }
-                        }
-                    }
-                    else if (fCurrentNode->getNodeType() == DOMNode::PROCESSING_INSTRUCTION_NODE) {
-                        ((DOMProcessingInstructionImpl*)fCurrentNode)->setBaseURI(erImpl->getBaseURI());
-                    }
-                }
-            }
-
-            next = kid->getNextSibling();
-        }
-    }
-    else
-        fCurrentNode   = fCurrentParent;
+    fCurrentNode   = fCurrentParent;
 
     if (erImpl)
         erImpl->setReadOnly(true, true);
@@ -1039,27 +979,30 @@ void AbstractDOMParser::startEntityReference(const XMLEntityDecl& entDecl)
         entity->setActualEncoding(fScanner->getReaderMgr()->getCurrentEncodingStr());
     fCurrentEntity = entity;
 
-    DOMEntityReference *er = fDocument->createEntityReferenceByParser(entName);
 
-    //set the readOnly flag to false before appending node, will be reset in endEntityReference
-    DOMEntityReferenceImpl *erImpl = (DOMEntityReferenceImpl *) er;
-    erImpl->setReadOnly(false, true);
+    // Following line has been moved up so that erImpl is only declared
+    // and used if create entity ref flag is true
+    if (fCreateEntityReferenceNodes == true)    {
+        DOMEntityReference *er = fDocument->createEntityReferenceByParser(entName);
+
+        //set the readOnly flag to false before appending node, will be reset 
+        // in endEntityReference
+        DOMEntityReferenceImpl *erImpl = (DOMEntityReferenceImpl *) er;
+        erImpl->setReadOnly(false, true);
 
-    if (fCreateEntityReferenceNodes == true)
-    {
         fCurrentParent->appendChild(er);
-    }
 
-    fNodeStack->push(fCurrentParent);
-    fCurrentParent = er;
-    fCurrentNode = er;
+        fNodeStack->push(fCurrentParent);
+        fCurrentParent = er;
+        fCurrentNode = er;
 
     // this entityRef needs to be stored in Entity map too.
     // We'd decide later whether the entity nodes should be created by a
     // separated method in parser or not. For now just stick it in if
     // the ref nodes are created
-    if (entity)
-        entity->setEntityRef(er);
+        if (entity)
+            entity->setEntityRef(er);
+    }
 }