diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py
index 2d3755c..d078f39 100644
--- a/Lib/xml/dom/minidom.py
+++ b/Lib/xml/dom/minidom.py
@@ -40,6 +40,7 @@
 
     def __init__(self):
         self.childNodes = []
+        self.parentNode = None
         if Node._debug:
             index = repr(id(self)) + repr(self.__class__)
             Node.allnodes[index] = repr(self.__dict__)
@@ -98,6 +99,8 @@
             return self.childNodes[-1]
 
     def insertBefore(self, newChild, refChild):
+        if newChild.parentNode is not None:
+            newChild.parentNode.removeChild(newChild)
         if refChild is None:
             self.appendChild(newChild)
         else:
@@ -116,6 +119,8 @@
         return newChild
 
     def appendChild(self, node):
+        if node.parentNode is not None:
+            node.parentNode.removeChild(node)
         if self.childNodes:
             last = self.lastChild
             node.previousSibling = last
@@ -129,6 +134,8 @@
         return node
 
     def replaceChild(self, newChild, oldChild):
+        if newChild.parentNode is not None:
+            newChild.parentNode.removeChild(newChild)
         if newChild is oldChild:
             return
         index = self.childNodes.index(oldChild)
@@ -144,6 +151,12 @@
 
     def removeChild(self, oldChild):
         self.childNodes.remove(oldChild)
+        if oldChild.nextSibling is not None:
+            oldChild.nextSibling.previousSibling = oldChild.previousSibling
+        if oldChild.previousSibling is not None:
+            oldChild.previousSibling.nextSibling = oldChild.nextSibling            
+        oldChild.nextSibling = oldChild.previousSibling = None
+        
         if self._makeParentNodes:
             oldChild.parentNode = None
         return oldChild
@@ -606,11 +619,23 @@
     implementation = DOMImplementation()
 
     def appendChild(self, node):
+        if node.parentNode is not None:
+            node.parentNode.removeChild(node)
+
         if node.nodeType == Node.ELEMENT_NODE \
            and self._get_documentElement():
             raise TypeError, "two document elements disallowed"
         return Node.appendChild(self, node)
 
+    def removeChild(self, oldChild):
+        self.childNodes.remove(oldChild)
+        oldChild.nextSibling = oldChild.previousSibling = None
+        oldChild.parentNode = None
+        if self.documentElement is oldChild:
+            self.documentElement = None
+             
+        return oldChild
+
     def _get_documentElement(self):
         for node in self.childNodes:
             if node.nodeType == Node.ELEMENT_NODE:
diff --git a/Lib/xml/dom/pulldom.py b/Lib/xml/dom/pulldom.py
index e674385..7f5ef79 100644
--- a/Lib/xml/dom/pulldom.py
+++ b/Lib/xml/dom/pulldom.py
@@ -55,7 +55,9 @@
             attr.value = value
             node.setAttributeNode(attr)
 
-        node.parentNode = self.curNode
+##        print self.curNode, self.curNode.childNodes, node, node.parentNode
+        self.curNode.appendChild(node)
+#        node.parentNode = self.curNode
         self.curNode = node
 
         self.lastEvent[1] = [(START_ELEMENT, node), None]
@@ -77,7 +79,8 @@
             attr.value = value
             node.setAttributeNode(attr)
 
-        node.parentNode = self.curNode
+        #node.parentNode = self.curNode
+        self.curNode.appendChild(node)
         self.curNode = node
 
         self.lastEvent[1] = [(START_ELEMENT, node), None]
@@ -93,8 +96,9 @@
 
     def comment(self, s):
         node = self.document.createComment(s)
-        parent = self.curNode
-        node.parentNode = parent
+        self.curNode.appendChild(node)
+#        parent = self.curNode
+#        node.parentNode = parent
         self.lastEvent[1] = [(COMMENT, node), None]
         self.lastEvent = self.lastEvent[1]
         #self.events.append((COMMENT, node))
@@ -102,24 +106,27 @@
     def processingInstruction(self, target, data):
         node = self.document.createProcessingInstruction(target, data)
 
-        parent = self.curNode
-        node.parentNode = parent
+        self.curNode.appendChild(node)
+#        parent = self.curNode
+#        node.parentNode = parent
         self.lastEvent[1] = [(PROCESSING_INSTRUCTION, node), None]
         self.lastEvent = self.lastEvent[1]
         #self.events.append((PROCESSING_INSTRUCTION, node))
 
     def ignorableWhitespace(self, chars):
         node = self.document.createTextNode(chars)
-        parent = self.curNode
-        node.parentNode = parent
+        self.curNode.appendChild(node)
+#        parent = self.curNode
+#        node.parentNode = parent
         self.lastEvent[1] = [(IGNORABLE_WHITESPACE, node), None]
         self.lastEvent = self.lastEvent[1]
         #self.events.append((IGNORABLE_WHITESPACE, node))
 
     def characters(self, chars):
         node = self.document.createTextNode(chars)
-        parent = self.curNode
-        node.parentNode = parent
+        self.curNode.appendChild(node)
+#        parent = self.curNode
+#        node.parentNode = parent
         self.lastEvent[1] = [(CHARACTERS, node), None]
         self.lastEvent = self.lastEvent[1]
 
