diff --git a/Lib/xml/dom/pulldom.py b/Lib/xml/dom/pulldom.py
index cedbe4f..7374069 100644
--- a/Lib/xml/dom/pulldom.py
+++ b/Lib/xml/dom/pulldom.py
@@ -51,7 +51,6 @@
             node.setAttributeNode(attr)
         
         parent = self.curNode
-        parent.appendChild(node)
         node.parentNode = parent
         self.curNode = node
 
@@ -75,7 +74,6 @@
             node.setAttributeNode(attr)
         
         parent = self.curNode
-        parent.appendChild(node)
         node.parentNode = parent
         self.curNode = node
 
@@ -93,7 +91,6 @@
     def comment(self, s):
         node = self.document.createComment(s)
         parent = self.curNode
-        parent.appendChild(node)
         node.parentNode = parent
         self.lastEvent[1] = [(COMMENT, node), None]
         self.lastEvent = self.lastEvent[1]
@@ -103,7 +100,6 @@
         node = self.document.createProcessingInstruction(target, data)
         
         parent = self.curNode
-        parent.appendChild(node)
         node.parentNode = parent
         self.lastEvent[1] = [(PROCESSING_INSTRUCTION, node), None]
         self.lastEvent = self.lastEvent[1]
@@ -112,7 +108,6 @@
     def ignorableWhitespace(self, chars):
         node = self.document.createTextNode(chars[start:start + length])
         parent = self.curNode
-        parent.appendChild(node)
         node.parentNode = parent
         self.lastEvent[1] = [(IGNORABLE_WHITESPACE, node), None]
         self.lastEvent = self.lastEvent[1]
@@ -121,7 +116,6 @@
     def characters(self, chars):
         node = self.document.createTextNode(chars)
         parent = self.curNode
-        parent.appendChild(node)
         node.parentNode = parent
         self.lastEvent[1] = [(CHARACTERS, node), None]
         self.lastEvent = self.lastEvent[1]
@@ -177,6 +171,8 @@
             token, cur_node = event
             if cur_node is node:
                 return
+            if token != END_ELEMENT:
+                cur_node.parentNode.appendChild(cur_node)
             event = self.getEvent()
 
     def getEvent(self):
@@ -193,9 +189,33 @@
         self.pulldom.firstEvent[1] = self.pulldom.firstEvent[1][1]
         return rc
 
+class SAX2DOM(PullDOM):
+
+    def startElementNS(self, name, tagName , attrs):
+        PullDOM.startElementNS(self, name, tagName, attrs)
+        self.curNode.parentNode.appendChild(self.curNode)
+
+    def startElement(self, name, attrs):
+        PullDOM.startElement(self, name, attrs)
+        self.curNode.parentNode.appendChild(self.curNode)
+
+    def processingInstruction(self, target, data):
+        PullDOM.processingInstruction(self, target, data)
+        node = self.lastEvent[0][1]
+        node.parentNode.appendChild(node)        
+
+    def ignorableWhitespace(self, chars):
+        PullDOM.ignorableWhitespace(self, chars)
+        node = self.lastEvent[0][1]
+        node.parentNode.appendChild(node)        
+
+    def characters(self, chars):
+        PullDOM.characters(self, chars)
+        node = self.lastEvent[0][1]
+        node.parentNode.appendChild(node)        
+    
 default_bufsize = (2 ** 14) - 20
 
-# FIXME: move into sax package for common usage
 def parse(stream_or_string, parser=None, bufsize=default_bufsize):
     if type(stream_or_string) is type(""):
         stream = open(stream_or_string)
