diff --git a/src/xercesc/dom/impl/DOMParentNode.cpp b/src/xercesc/dom/impl/DOMParentNode.cpp
index 7323a8281dc0b27a4640da65252f9a382ac9d84f..efbc334c26b5c54efceea1dd2656fe4a15688e47 100644
--- a/src/xercesc/dom/impl/DOMParentNode.cpp
+++ b/src/xercesc/dom/impl/DOMParentNode.cpp
@@ -190,13 +190,16 @@ DOMNode *DOMParentNode::insertBefore(DOMNode *newChild, DOMNode *refChild) {
 
 
     // Prevent cycles in the tree
-    bool treeSafe=true;
-    for(DOMNode *a=castToNode(this)->getParentNode();
-        treeSafe && a!=0;
-        a=a->getParentNode())
-        treeSafe=(newChild!=a);
-    if(!treeSafe)
-        throw DOMException(DOMException::HIERARCHY_REQUEST_ERR,0);
+    //only need to do this if the node has children
+    if(newChild->hasChildNodes()) {
+        bool treeSafe=true;
+        for(DOMNode *a=castToNode(this)->getParentNode();
+            treeSafe && a!=0;
+            a=a->getParentNode())
+            treeSafe=(newChild!=a);
+        if(!treeSafe)
+            throw DOMException(DOMException::HIERARCHY_REQUEST_ERR,0);
+    }
 
     // refChild must in fact be a child of this node (or 0)
     if (refChild!=0 && refChild->getParentNode() != castToNode(this))