diff --git a/Doc/tools/sgmlconv/esis2sgml.py b/Doc/tools/sgmlconv/esis2sgml.py
index aabbe71..38866ce 100755
--- a/Doc/tools/sgmlconv/esis2sgml.py
+++ b/Doc/tools/sgmlconv/esis2sgml.py
@@ -77,7 +77,7 @@
     return _token_rx.match(s) is not None
 
 
-def do_convert(ifp, ofp, xml=0, autoclose=(), verbatims=()):
+def convert(ifp, ofp, xml=0, autoclose=(), verbatims=()):
     if xml:
         autoclose = ()
     attrs = {}
@@ -152,26 +152,27 @@
 
 
 def dump_empty_element_names(knownempties):
+    d = {}
+    for gi in knownempties:
+        d[gi] = gi
     knownempties.append("")
     if os.path.isfile(EMPTIES_FILENAME):
-        mode = "a"
-    else:
-        mode = "w"
-    fp = open(EMPTIES_FILENAME, mode)
-    fp.write(string.join(knownempties, "\n"))
+        fp = open(EMPTIES_FILENAME)
+        while 1:
+            line = fp.readline()
+            if not line:
+                break
+            gi = string.strip(line)
+            if gi:
+                d[gi] = gi
+    fp = open(EMPTIES_FILENAME, "w")
+    gilist = d.keys()
+    gilist.sort()
+    fp.write(string.join(gilist, "\n"))
+    fp.write("\n")
     fp.close()
 
 
-def sgml_convert(ifp, ofp, autoclose, verbatims):
-    return do_convert(ifp, ofp, xml=0,
-                      autoclose=autoclose, verbatims=verbatims)
-
-
-def xml_convert(ifp, ofp, autoclose, verbatims):
-    return do_convert(ifp, ofp, xml=1,
-                      autoclose=autoclose, verbatims=verbatims)
-
-
 def update_gi_map(map, names, fromsgml=1):
     for name in string.split(names, ","):
         if fromsgml:
@@ -186,7 +187,6 @@
     import sys
     #
     autoclose = AUTOCLOSE
-    convert = xml_convert
     xml = 1
     xmldecl = 0
     elem_names = ''
@@ -205,10 +205,8 @@
             LIST_EMPTIES = 1
         elif opt in ("-s", "--sgml"):
             xml = 0
-            convert = sgml_convert
         elif opt in ("-x", "--xml"):
             xml = 1
-            convert = xml_convert
         elif opt in ("-a", "--autoclose"):
             autoclose = string.split(arg, ",")
         elif opt == "--elements-map":
@@ -252,7 +250,7 @@
     try:
         if xml and xmldecl:
             opf.write('<?xml version="1.0" encoding="iso8859-1"?>\n')
-        convert(ifp, ofp, autoclose, verbatims)
+        convert(ifp, ofp, xml=xml, autoclose=autoclose, verbatims=verbatims)
     except IOError, (err, msg):
         if err != errno.EPIPE:
             raise
