diff --git a/Lib/xml/dom/minidom.py b/Lib/xml/dom/minidom.py
index b026fbb..ef1a2bf 100644
--- a/Lib/xml/dom/minidom.py
+++ b/Lib/xml/dom/minidom.py
@@ -651,17 +651,23 @@
         doc = Document()
         if doctype is None:
             doctype = self.createDocumentType(qualifiedName, None, None)
-        if qualifiedName:
-            prefix, localname = _nssplit(qualifiedName)
-            if prefix == "xml" \
-               and namespaceURI != "http://www.w3.org/XML/1998/namespace":
-                raise xml.dom.NamespaceErr("illegal use of 'xml' prefix")
-            if prefix and not namespaceURI:
-                raise xml.dom.NamespaceErr(
-                    "illegal use of prefix without namespaces")
-            element = doc.createElementNS(namespaceURI, qualifiedName)
-            doc.appendChild(element)
-        # XXX else, raise an error?  Empty qname is illegal in the DOM spec!
+        if not qualifiedName:
+            # The spec is unclear what to raise here; SyntaxErr
+            # would be the other obvious candidate. Since Xerces raises
+            # InvalidCharacterErr, and since SyntaxErr is not listed
+            # for createDocument, that seems to be the better choice.
+            # XXX: need to check for illegal characters here and in
+            # createElement.
+            raise xml.dom.InvalidCharacterErr("Element with no name")
+        prefix, localname = _nssplit(qualifiedName)
+        if prefix == "xml" \
+           and namespaceURI != "http://www.w3.org/XML/1998/namespace":
+            raise xml.dom.NamespaceErr("illegal use of 'xml' prefix")
+        if prefix and not namespaceURI:
+            raise xml.dom.NamespaceErr(
+                "illegal use of prefix without namespaces")
+        element = doc.createElementNS(namespaceURI, qualifiedName)
+        doc.appendChild(element)
         doctype.parentNode = doc
         doc.doctype = doctype
         doc.implementation = self
@@ -761,6 +767,7 @@
     events = apply(func, args, kwargs)
     toktype, rootNode = events.getEvent()
     events.expandNode(rootNode)
+    events.clear()
     return rootNode
 
 def parse(*args, **kwargs):
diff --git a/Lib/xml/dom/pulldom.py b/Lib/xml/dom/pulldom.py
index c400742..b573ba0 100644
--- a/Lib/xml/dom/pulldom.py
+++ b/Lib/xml/dom/pulldom.py
@@ -61,11 +61,17 @@
                     tagName = prefix + ":" + localname
                 else:
                     tagName = localname
-            node = self.document.createElementNS(uri, tagName)
+            if self.document:
+                node = self.document.createElementNS(uri, tagName)
+            else:
+                node = self.buildDocument(uri, tagName)
         else:
             # When the tagname is not prefixed, it just appears as
             # localname
-            node = self.document.createElement(localname)
+            if self.document:
+                node = self.document.createElement(localname)
+            else:
+                node = self.buildDocument(None, localname)
 
         for aname,value in attrs.items():
             a_uri, a_localname = aname
@@ -90,7 +96,10 @@
         self.lastEvent = self.lastEvent[1]
 
     def startElement(self, name, attrs):
-        node = self.document.createElement(name)
+        if self.document:
+            node = self.document.createElement(name)
+        else:
+            node = self.buildDocument(None, name)
 
         for aname,value in attrs.items():
             attr = self.document.createAttribute(aname)
@@ -127,23 +136,28 @@
         self.lastEvent = self.lastEvent[1]
 
     def startDocument(self):
-        publicId = systemId = None
-        if self._locator:
-            publicId = self._locator.getPublicId()
-            systemId = self._locator.getSystemId()
         if self.documentFactory is None:
             import xml.dom.minidom
             self.documentFactory = xml.dom.minidom.Document.implementation
-        node = self.documentFactory.createDocument(None, publicId, systemId)
+
+    def buildDocument(self, uri, tagname):
+        # Can't do that in startDocument, since we need the tagname
+        # XXX: obtain DocumentType
+        node = self.documentFactory.createDocument(uri, tagname, None)
         self.document = node
         self.lastEvent[1] = [(START_DOCUMENT, node), None]
         self.lastEvent = self.lastEvent[1]
         self.push(node)
+        return node.firstChild
 
     def endDocument(self):
         self.lastEvent[1] = [(END_DOCUMENT, self.document), None]
         self.pop()
 
+    def clear(self):
+        "clear(): Explicitly release parsing structures"
+        self.document = None
+
 class ErrorHandler:
     def warning(self, exception):
         print exception
@@ -199,6 +213,13 @@
         self.pulldom.firstEvent[1] = self.pulldom.firstEvent[1][1]
         return rc
 
+    def clear(self):
+        "clear(): Explicitly release parsing objects"
+        self.pulldom.clear()
+        del self.pulldom
+        self.parser = None
+        self.stream = None
+
 class SAX2DOM(PullDOM):
 
     def startElementNS(self, name, tagName , attrs):
