diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index af4c7dd..2191f32 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -216,7 +216,44 @@
            ('<ns1:doc xmlns:ns1="%s"><udoc></udoc></ns1:doc>' %
                                          ns_uri)
 
-# ===== XMLFilterBase
+def test_1463026_1():
+    result = StringIO()
+    gen = XMLGenerator(result)
+
+    gen.startDocument()
+    gen.startElementNS((None, 'a'), 'a', {(None, 'b'):'c'})
+    gen.endElementNS((None, 'a'), 'a')
+    gen.endDocument()
+
+    return result.getvalue() == start+'<a b="c"></a>'
+
+def test_1463026_2():
+    result = StringIO()
+    gen = XMLGenerator(result)
+
+    gen.startDocument()
+    gen.startPrefixMapping(None, 'qux')
+    gen.startElementNS(('qux', 'a'), 'a', {})
+    gen.endElementNS(('qux', 'a'), 'a')
+    gen.endPrefixMapping(None)
+    gen.endDocument()
+
+    return result.getvalue() == start+'<a xmlns="qux"></a>'
+
+def test_1463026_3():
+    result = StringIO()
+    gen = XMLGenerator(result)
+
+    gen.startDocument()
+    gen.startPrefixMapping('my', 'qux')
+    gen.startElementNS(('qux', 'a'), 'a', {(None, 'b'):'c'})
+    gen.endElementNS(('qux', 'a'), 'a')
+    gen.endPrefixMapping('my')
+    gen.endDocument()
+
+    return result.getvalue() == start+'<my:a xmlns:my="qux" b="c"></my:a>'
+    
+# ===== Xmlfilterbase
 
 def test_filter_basic():
     result = StringIO()
diff --git a/Lib/xml/sax/saxutils.py b/Lib/xml/sax/saxutils.py
index a496519..46818f3 100644
--- a/Lib/xml/sax/saxutils.py
+++ b/Lib/xml/sax/saxutils.py
@@ -100,6 +100,17 @@
         else:
             self._out.write(text.encode(self._encoding, _error_handling))
 
+    def _qname(self, name):
+        """Builds a qualified name from a (ns_url, localname) pair"""
+        if name[0]:
+            # The name is in a non-empty namespace
+            prefix = self._current_context[name[0]]
+            if prefix:
+                # If it is not the default namespace, prepend the prefix
+                return prefix + ":" + name[1]
+        # Return the unqualified name
+        return name[1]
+
     # ContentHandler methods
 
     def startDocument(self):
@@ -125,29 +136,21 @@
         self._write('</%s>' % name)
 
     def startElementNS(self, name, qname, attrs):
-        if name[0] is None:
-            # if the name was not namespace-scoped, use the unqualified part
-            name = name[1]
-        else:
-            # else try to restore the original prefix from the namespace
-            name = self._current_context[name[0]] + ":" + name[1]
-        self._write('<' + name)
+        self._write('<' + self._qname(name))
 
-        for pair in self._undeclared_ns_maps:
-            self._write(' xmlns:%s="%s"' % pair)
+        for prefix, uri in self._undeclared_ns_maps:
+            if prefix:
+                self._out.write(' xmlns:%s="%s"' % (prefix, uri))
+            else:
+                self._out.write(' xmlns="%s"' % uri)
         self._undeclared_ns_maps = []
 
         for (name, value) in attrs.items():
-            name = self._current_context[name[0]] + ":" + name[1]
-            self._write(' %s=%s' % (name, quoteattr(value)))
+            self._write(' %s=%s' % (self._qname(name), quoteattr(value)))
         self._write('>')
 
     def endElementNS(self, name, qname):
-        if name[0] is None:
-            name = name[1]
-        else:
-            name = self._current_context[name[0]] + ":" + name[1]
-        self._write('</%s>' % name)
+        self._write('</%s>' % self._qname(name))
 
     def characters(self, content):
         self._write(escape(content))
diff --git a/Misc/NEWS b/Misc/NEWS
index c42ade8..36ac1df 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -128,6 +128,8 @@
 Library
 -------
 
+- Patch 1463026: Support default namespace in XMLGenerator.
+
 - Patch 1571379: Make trace's --ignore-dir facility work in the face of
   relative directory names.
 
