diff --git a/src/xercesc/dom/impl/DOMWriterImpl.cpp b/src/xercesc/dom/impl/DOMWriterImpl.cpp
index 835e8952b1243ae6bc15dce411a4e7b20d24f977..ed9936ac96fba901d440744def8d6292fa3d3689 100644
--- a/src/xercesc/dom/impl/DOMWriterImpl.cpp
+++ b/src/xercesc/dom/impl/DOMWriterImpl.cpp
@@ -57,6 +57,9 @@
 /*
  * $Id$
  * $Log$
+ * Revision 1.3  2002/05/31 21:01:06  peiyongz
+ * move printing of XMLDecl into the processNode().
+ *
  * Revision 1.2  2002/05/29 21:31:50  knoaman
  * DOM L3 LS: DOMInputSource, DOMEntityResolver, DOMImplementationLS and DOMBuilder
  *
@@ -424,19 +427,7 @@ bool DOMWriterImpl::writeNode(XMLFormatTarget* const destination
                                     , XMLFormatter::UnRep_CharRef);
 		Janitor<XMLFormatter> janName(fFormatter);
 
-        //
-		// if this is a document node
-		// print out the XML Decl node first
-		//
-		if (nodeToWrite.getNodeType() == DOMNode::DOCUMENT_NODE)
-		{
-			setURCharRef();
-			*fFormatter << gXMLDecl1 << gXMLDecl2 << fEncodingUsed << gXMLDecl3 << fNewLineUsed;
-		}
-        
 		processNode(&nodeToWrite);
-		*fFormatter << fNewLineUsed; // add linefeed in requested output encoding
-
 	}
 
 	//
@@ -632,6 +623,11 @@ void DOMWriterImpl::processNode(const DOMNode* const nodeToWrite)
 
 	case DOMNode::DOCUMENT_NODE: // Not to be shown to Filter
         {
+			setURCharRef();
+			*fFormatter << gXMLDecl1 << gXMLDecl2;
+			*fFormatter << fEncodingUsed << gXMLDecl3;
+			*fFormatter << fNewLineUsed;
+
             DOMNode *child = nodeToWrite->getFirstChild();
             while( child != 0)
             {