diff --git a/Demos/People/people.xml b/Demos/People/people.xml
index 8d2460cad8c83a59ee9e6caa4a675d6d5a930b96..e41aa7fe045ed2856617348dae55627cab3076b5 100644
--- a/Demos/People/people.xml
+++ b/Demos/People/people.xml
@@ -77,6 +77,7 @@
         <elnonposint>0</elnonposint>
         <eldate>2005-04-26</eldate>
         <eldatetime>2005-04-26T10:11:12</eldatetime>
+        <eldatetime1>2006-05-27T10:11:12.40</eldatetime1>
         <eltoken>aa bb    cc	dd
             ee</eltoken>
         <elshort>123</elshort>
diff --git a/Demos/People/people.xsd b/Demos/People/people.xsd
index 965b65066c69224783358552f5762ac2cffb1c9b..b474b5d1f839da9eab60d481bb344abe8b73fb74 100644
--- a/Demos/People/people.xsd
+++ b/Demos/People/people.xsd
@@ -94,6 +94,7 @@
                     <xs:element name="elnonnegint" type="xs:nonNegativeInteger"/>
                     <xs:element name="eldate" type="xs:date"/>
                     <xs:element name="eldatetime" type="xs:dateTime"/>
+                    <xs:element name="eldatetime1" type="xs:dateTime"/>
                     <xs:element name="eltoken" type="xs:token"/>
                     <xs:element name="elshort" type="xs:short"/>
                     <xs:element name="ellong" type="xs:long"/>
diff --git a/PKG-INFO b/PKG-INFO
index db4abf916435a5f62121f757fdb720a8086ef70a..b84a8cb6294e5b713dc6c73fd4e57cae3153ddf9 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: generateDS
-Version: 2.8b
+Version: 2.8c
 Summary: Generate Python data structures and XML parser from Xschema
 Home-page: http://www.rexx.com/~dkuhlman/generateDS.html
 Author: Dave Kuhlman
diff --git a/README b/README
index 80ffe7f08129892270b1077ec89f6f024436129f..8b2cc14900a00bb1cd52f2a8924e457460cfff18 100644
--- a/README
+++ b/README
@@ -16,10 +16,10 @@ document.  The class definitions contain:
 
 - Get and set methods for member variables.
 
-- A 'build' method used during parsing to populate and instance.
+- A 'build' method used during parsing to populate an instance.
 
-- An 'export' method that will re-create the XML element in an XML
-  document.
+- An 'export' method that will re-create (write out) the XML element
+  in an XML document.
 
 - An 'exportLiteral' method that will write out a text (literal)
   Python data structure that represents the content of the XML
@@ -141,6 +141,11 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 Change history
 --------------
 
+Version 2.8c (provisional) (01/30/2013)
+- Changed generated check for attributes that are already_processed
+  to use a set object rather than a list.  Since sets are hashed, I
+  believe that lookup is faster.
+
 Version 2.8b (01/30/2013)
 - Fixed missing underscore in reference to member names in
   generateExportLiteralFn_2.  Thanks to Sergii Chernysh for
diff --git a/generateDS.egg-info/PKG-INFO b/generateDS.egg-info/PKG-INFO
index db4abf916435a5f62121f757fdb720a8086ef70a..b84a8cb6294e5b713dc6c73fd4e57cae3153ddf9 100644
--- a/generateDS.egg-info/PKG-INFO
+++ b/generateDS.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: generateDS
-Version: 2.8b
+Version: 2.8c
 Summary: Generate Python data structures and XML parser from Xschema
 Home-page: http://www.rexx.com/~dkuhlman/generateDS.html
 Author: Dave Kuhlman
diff --git a/generateDS.html b/generateDS.html
index a24901645a538dc841908fecb34a68e9a61cdab1..2c56439fbba2cb66ad680edb83fca6b3384d4f29 100644
--- a/generateDS.html
+++ b/generateDS.html
@@ -216,7 +216,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.8b</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.8c</td>
 </tr>
 </tbody>
 </table>
@@ -225,7 +225,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">January 28, 2013</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">January 31, 2013</td>
 </tr>
 </tbody>
 </table>
diff --git a/generateDS.py b/generateDS.py
index bb1d880d6d9f3d92ad531178797f62b769730d2a..5d7e56e3b090bc5c52ea01592b5c29c8b5514973 100755
--- a/generateDS.py
+++ b/generateDS.py
@@ -155,7 +155,7 @@ logging.disable(logging.INFO)
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.8b'
+VERSION = '2.8c'
 ##VERSION##
 
 GenerateProperties = 0
@@ -2071,7 +2071,7 @@ def generateExportAttributes(wrt, element, hasAttributes):
                 wrt("        if self.%s is not None and '%s' not in "
                     "already_processed:\n" % (
                     cleanName, cleanName, ))
-                wrt("            already_processed.append('%s')\n" % (
+                wrt("            already_processed.add('%s')\n" % (
                     cleanName, ))
                 indent = "    "
             else:
@@ -2126,7 +2126,7 @@ def generateExportAttributes(wrt, element, hasAttributes):
     if element.getExtended():
         wrt("        if self.extensiontype_ is not None and 'xsi:type' "
             "not in already_processed:\n")
-        wrt("            already_processed.append('xsi:type')\n")
+        wrt("            already_processed.add('xsi:type')\n")
         wrt("            outfile.write("
             "' xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"')\n")
         wrt('''            outfile.write('''
@@ -2237,7 +2237,7 @@ def generateExportFn(wrt, prefix, element, namespace):
     wrt('        showIndent(outfile, level, pretty_print)\n')
     wrt("        outfile.write('<%s%s%s' % (namespace_, name_, "
         "namespacedef_ and ' ' + namespacedef_ or '', ))\n")
-    wrt("        already_processed = []\n")
+    wrt("        already_processed = set()\n")
     wrt("        self.exportAttributes(outfile, level, "
         "already_processed, namespace_, name_='%s')\n" %
         (name, ))
@@ -2286,14 +2286,14 @@ def generateExportFn(wrt, prefix, element, namespace):
                 name1 = name[len(xsinamespace2):]
                 name2 = '%s:%s' % (xsinamespaceprefix, name1, )
                 if name2 not in already_processed:
-                    already_processed.append(name2)
+                    already_processed.add(name2)
                     outfile.write(' %s=%s' % (name2, quote_attrib(value), ))
             else:
                 mo = re_.match(Namespace_extract_pat_, name)
                 if mo is not None:
                     namespace, name = mo.group(1, 2)
                     if name not in already_processed:
-                        already_processed.append(name)
+                        already_processed.add(name)
                         if namespace == 'http://www.w3.org/XML/1998/namespace':
                             outfile.write(' %s=%s' % (
                                 name, quote_attrib(value), ))
@@ -2305,7 +2305,7 @@ def generateExportFn(wrt, prefix, element, namespace):
                                 unique_counter, name, quote_attrib(value), ))
                 else:
                     if name not in already_processed:
-                        already_processed.append(name)
+                        already_processed.add(name)
                         outfile.write(' %s=%s' % (
                             name, quote_attrib(value), ))\n""")
     parentName, parent = getParentName(element)
@@ -2481,7 +2481,9 @@ def generateExportLiteralFn(wrt, prefix, element):
     wrt("    def exportLiteral(self, outfile, level, name_='%s'):\n" % (
         element.getName(), ))
     wrt("        level += 1\n")
-    wrt("        self.exportLiteralAttributes(outfile, level, [], name_)\n")
+    wrt("        already_processed = set()\n")
+    wrt("        self.exportLiteralAttributes(outfile, level, "
+        "already_processed, name_)\n")
     wrt("        if self.hasContent_():\n")
     wrt("            self.exportLiteralChildren(outfile, level, name_)\n")
     childCount = countChildren(element, 0)
@@ -2507,7 +2509,7 @@ def generateExportLiteralFn(wrt, prefix, element):
         wrt("        if self.%s is not None and '%s' not in "
             "already_processed:\n" % (
             mappedName, mappedName, ))
-        wrt("            already_processed.append('%s')\n" % (
+        wrt("            already_processed.add('%s')\n" % (
             mappedName, ))
         if (attrType in StringType or
             attrType in IDTypes or
@@ -2639,7 +2641,7 @@ def generateBuildAttributes(wrt, element, hasAttributes):
             wrt("        if value is not None and '%s' not in "
                 "already_processed:\n" %
                 (name, ))
-            wrt("            already_processed.append('%s')\n" % (name, ))
+            wrt("            already_processed.add('%s')\n" % (name, ))
             wrt('            try:\n')
             wrt("                self.%s = self.gds_parse_datetime("
                 "value, node, '%s')\n" %
@@ -2654,7 +2656,7 @@ def generateBuildAttributes(wrt, element, hasAttributes):
             wrt("        if value is not None and '%s' not in "
                 "already_processed:\n" %
                 (name, ))
-            wrt("            already_processed.append('%s')\n" % (name, ))
+            wrt("            already_processed.add('%s')\n" % (name, ))
             wrt('            try:\n')
             wrt("                self.%s = self.gds_parse_date("
                 "value, node, '%s')\n" %
@@ -2673,7 +2675,7 @@ def generateBuildAttributes(wrt, element, hasAttributes):
             wrt("        if value is not None and '%s' not in "
                 "already_processed:\n" %
                 (name, ))
-            wrt("            already_processed.append('%s')\n" % (name, ))
+            wrt("            already_processed.add('%s')\n" % (name, ))
             wrt('            try:\n')
             wrt("                self.%s = int(value)\n" % (mappedName, ))
             wrt('            except ValueError, exp:\n')
@@ -2701,7 +2703,7 @@ def generateBuildAttributes(wrt, element, hasAttributes):
             wrt("        if value is not None and '%s' not in "
                 "already_processed:\n" %
                 (name, ))
-            wrt("            already_processed.append('%s')\n" % (name, ))
+            wrt("            already_processed.add('%s')\n" % (name, ))
             wrt("            if value in ('true', '1'):\n")
             wrt("                self.%s = True\n" % mappedName)
             wrt("            elif value in ('false', '0'):\n")
@@ -2715,7 +2717,7 @@ def generateBuildAttributes(wrt, element, hasAttributes):
             wrt("        if value is not None and '%s' not in "
                 "already_processed:\n" %
                 (name, ))
-            wrt("            already_processed.append('%s')\n" % (name, ))
+            wrt("            already_processed.add('%s')\n" % (name, ))
             wrt('            try:\n')
             wrt("                self.%s = float(value)\n" %
                 (mappedName, ))
@@ -2729,7 +2731,7 @@ def generateBuildAttributes(wrt, element, hasAttributes):
             wrt("        if value is not None and '%s' not in "
                 "already_processed:\n" %
                 (name, ))
-            wrt("            already_processed.append('%s')\n" % (name, ))
+            wrt("            already_processed.add('%s')\n" % (name, ))
             wrt("            self.%s = value\n" % (mappedName, ))
             wrt("            self.%s = ' '.join(self.%s.split())\n" %
                 (mappedName, mappedName, ))
@@ -2740,7 +2742,7 @@ def generateBuildAttributes(wrt, element, hasAttributes):
             wrt("        if value is not None and '%s' not in "
                 "already_processed:\n" %
                 (name, ))
-            wrt("            already_processed.append('%s')\n" % (name, ))
+            wrt("            already_processed.add('%s')\n" % (name, ))
             wrt("            self.%s = value\n" % (mappedName, ))
         typeName = attrDef.getType()
         if typeName and typeName in SimpleTypeDict:
@@ -2758,7 +2760,7 @@ def generateBuildAttributes(wrt, element, hasAttributes):
         wrt("        value = find_attr_value_('xsi:type', node)\n")
         wrt("        if value is not None and 'xsi:type' not in "
             "already_processed:\n")
-        wrt("            already_processed.append('xsi:type')\n")
+        wrt("            already_processed.add('xsi:type')\n")
         wrt("            self.extensiontype_ = value\n")
     return hasAttributes
 # end generateBuildAttributes
@@ -3218,7 +3220,8 @@ def generateBuildStandard(wrt, prefix, element, keyword, delayed, hasChildren):
 def generateBuildFn(wrt, prefix, element, delayed):
     base = element.getBase()
     wrt('    def build(self, node):\n')
-    wrt('        self.buildAttributes(node, node.attrib, [])\n')
+    wrt('        already_processed = set()\n')
+    wrt('        self.buildAttributes(node, node.attrib, already_processed)\n')
     if element.isMixed() or element.getSimpleContent():
         wrt("        self.valueOf_ = get_all_text_(node)\n")
     if element.isMixed():
diff --git a/generateDS.txt b/generateDS.txt
index 208dbcad35676cbad8cbea7bbfe56c65799f5c58..f52a60f92f14bbc9059e17c226df085819d10c05 100644
--- a/generateDS.txt
+++ b/generateDS.txt
@@ -11,7 +11,7 @@ generateDS -- Generate Data Structures from XML Schema
 
 .. version
 
-:revision: 2.8b
+:revision: 2.8c
 
 .. version
 
diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index 4b67c7febd5dbdde050d547b980d998676bcf3fb..c05f07bdbc429cfb38a9763fa661432efc5d68cd 100755
--- a/gui/generateds_gui.py
+++ b/gui/generateds_gui.py
@@ -31,7 +31,7 @@ from libgenerateDS.gui import generateds_gui_session
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.8b'
+VERSION = '2.8c'
 ##VERSION##
 
 
diff --git a/libgenerateDS/gui/generateds_gui.py b/libgenerateDS/gui/generateds_gui.py
index 4b67c7febd5dbdde050d547b980d998676bcf3fb..c05f07bdbc429cfb38a9763fa661432efc5d68cd 100755
--- a/libgenerateDS/gui/generateds_gui.py
+++ b/libgenerateDS/gui/generateds_gui.py
@@ -31,7 +31,7 @@ from libgenerateDS.gui import generateds_gui_session
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.8b'
+VERSION = '2.8c'
 ##VERSION##
 
 
diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html
index f9b29ab27dfa5143a4c848d7e3c005983c18f157..c29e08126fbf9c8ae147f40b444dda6e16ed629f 100644
--- a/librarytemplate_howto.html
+++ b/librarytemplate_howto.html
@@ -214,7 +214,7 @@ tt.docutils {
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.8b</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.8c</td>
 </tr>
 </tbody>
 </table>
@@ -223,7 +223,7 @@ tt.docutils {
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">January 28, 2013</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">January 31, 2013</td>
 </tr>
 </tbody>
 </table>
diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt
index 2fbd5d9a824b703ad153d4b8acd7fc69340a4f9c..abc5fb07b73346988fe07833d60fd4aa2c547ee2 100644
--- a/librarytemplate_howto.txt
+++ b/librarytemplate_howto.txt
@@ -8,7 +8,7 @@ How to package a generateDS.py generated library
 
 .. version
 
-:revision: 2.8b
+:revision: 2.8c
 
 .. version
 
diff --git a/process_includes.py b/process_includes.py
index a4d60c098a231b389abf46e9e247e8e28c56a6ab..ad2c0526c1ed5ca060196b0a33a40baa17796354 100755
--- a/process_includes.py
+++ b/process_includes.py
@@ -30,7 +30,7 @@ from lxml import etree
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.8b'
+VERSION = '2.8c'
 ##VERSION##
 
 Namespaces = {'xs': 'http://www.w3.org/2001/XMLSchema'}
diff --git a/setup.py b/setup.py
index 0e261bc296ec39f403704b025c9f4ed899192ab0..f6e72db8ed0303b3aa5867f36458de1d477f7c82 100644
--- a/setup.py
+++ b/setup.py
@@ -7,7 +7,7 @@ setup(name="generateDS",
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-    version="2.8b",
+    version="2.8c",
 ##VERSION##
     author="Dave Kuhlman",
     author_email="dkuhlman@rexx.com",
diff --git a/tests/abstract_type1_sup.py b/tests/abstract_type1_sup.py
index cfb7b84711f3aba2ca92a07ab36f16ab1a2ec406..1c8efeb869f2959844a69f6d011d47b2ab193676 100644
--- a/tests/abstract_type1_sup.py
+++ b/tests/abstract_type1_sup.py
@@ -506,7 +506,7 @@ class carrierType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='carrierType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -533,7 +533,8 @@ class carrierType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='carrierType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -552,7 +553,8 @@ class carrierType(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -602,7 +604,7 @@ class Vehicle(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='Vehicle')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -612,7 +614,7 @@ class Vehicle(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='target:', name_='Vehicle'):
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
         pass
@@ -627,7 +629,8 @@ class Vehicle(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='Vehicle'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -635,14 +638,15 @@ class Vehicle(GeneratedsSuper):
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -670,7 +674,7 @@ class Car(Vehicle):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='Car')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -692,7 +696,8 @@ class Car(Vehicle):
             return False
     def exportLiteral(self, outfile, level, name_='Car'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -701,7 +706,8 @@ class Car(Vehicle):
         super(Car, self).exportLiteralChildren(outfile, level, name_)
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -734,7 +740,7 @@ class Plane(Vehicle):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='Plane')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -756,7 +762,8 @@ class Plane(Vehicle):
             return False
     def exportLiteral(self, outfile, level, name_='Plane'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -765,7 +772,8 @@ class Plane(Vehicle):
         super(Plane, self).exportLiteralChildren(outfile, level, name_)
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/abstract_type2_sup.py b/tests/abstract_type2_sup.py
index cfb7b84711f3aba2ca92a07ab36f16ab1a2ec406..1c8efeb869f2959844a69f6d011d47b2ab193676 100644
--- a/tests/abstract_type2_sup.py
+++ b/tests/abstract_type2_sup.py
@@ -506,7 +506,7 @@ class carrierType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='carrierType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -533,7 +533,8 @@ class carrierType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='carrierType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -552,7 +553,8 @@ class carrierType(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -602,7 +604,7 @@ class Vehicle(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='Vehicle')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -612,7 +614,7 @@ class Vehicle(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='target:', name_='Vehicle'):
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
         pass
@@ -627,7 +629,8 @@ class Vehicle(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='Vehicle'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -635,14 +638,15 @@ class Vehicle(GeneratedsSuper):
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -670,7 +674,7 @@ class Car(Vehicle):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='Car')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -692,7 +696,8 @@ class Car(Vehicle):
             return False
     def exportLiteral(self, outfile, level, name_='Car'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -701,7 +706,8 @@ class Car(Vehicle):
         super(Car, self).exportLiteralChildren(outfile, level, name_)
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -734,7 +740,7 @@ class Plane(Vehicle):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='Plane')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -756,7 +762,8 @@ class Plane(Vehicle):
             return False
     def exportLiteral(self, outfile, level, name_='Plane'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -765,7 +772,8 @@ class Plane(Vehicle):
         super(Plane, self).exportLiteralChildren(outfile, level, name_)
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/annotations1_sup.py b/tests/annotations1_sup.py
index 38b837a1c8d220c84bf727fe6cd2d6a6e15ecc91..0fdff05e65117d970c9683dc88344762c6361de8 100644
--- a/tests/annotations1_sup.py
+++ b/tests/annotations1_sup.py
@@ -508,7 +508,7 @@ class document1Type(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='document1Type')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -539,7 +539,8 @@ class document1Type(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='document1Type'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -555,7 +556,8 @@ class document1Type(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -607,7 +609,7 @@ class document2Type(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='document2Type')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -642,7 +644,8 @@ class document2Type(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='document2Type'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -661,7 +664,8 @@ class document2Type(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -715,7 +719,7 @@ class document3Type(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='document3Type')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -747,7 +751,8 @@ class document3Type(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='document3Type'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -760,7 +765,8 @@ class document3Type(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('rating=%d,\n' % self.rating)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/annotations2_sup.py b/tests/annotations2_sup.py
index 38b837a1c8d220c84bf727fe6cd2d6a6e15ecc91..0fdff05e65117d970c9683dc88344762c6361de8 100644
--- a/tests/annotations2_sup.py
+++ b/tests/annotations2_sup.py
@@ -508,7 +508,7 @@ class document1Type(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='document1Type')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -539,7 +539,8 @@ class document1Type(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='document1Type'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -555,7 +556,8 @@ class document1Type(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -607,7 +609,7 @@ class document2Type(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='document2Type')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -642,7 +644,8 @@ class document2Type(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='document2Type'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -661,7 +664,8 @@ class document2Type(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -715,7 +719,7 @@ class document3Type(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='document3Type')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -747,7 +751,8 @@ class document3Type(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='document3Type'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -760,7 +765,8 @@ class document3Type(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('rating=%d,\n' % self.rating)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/anysimpletype1_sup.py b/tests/anysimpletype1_sup.py
index c9dc328db9a7bec38ced1efbf0ca1d89bfafa4ff..3e56d08dfba46b01e34011003ec44cd7deffafa0 100644
--- a/tests/anysimpletype1_sup.py
+++ b/tests/anysimpletype1_sup.py
@@ -505,7 +505,7 @@ class test1element(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='test1element')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -516,7 +516,7 @@ class test1element(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='test1element'):
         if self.test1attribute is not None and 'test1attribute' not in already_processed:
-            already_processed.append('test1attribute')
+            already_processed.add('test1attribute')
             outfile.write(' test1attribute=%s' % (quote_attrib(self.test1attribute), ))
     def exportChildren(self, outfile, level, namespace_='', name_='test1element', fromsubclass_=False, pretty_print=True):
         if pretty_print:
@@ -534,12 +534,13 @@ class test1element(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='test1element'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.test1attribute is not None and 'test1attribute' not in already_processed:
-            already_processed.append('test1attribute')
+            already_processed.add('test1attribute')
             showIndent(outfile, level)
             outfile.write('test1attribute = %s,\n' % (self.test1attribute,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -550,14 +551,15 @@ class test1element(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('test1attribute', node)
         if value is not None and 'test1attribute' not in already_processed:
-            already_processed.append('test1attribute')
+            already_processed.add('test1attribute')
             self.test1attribute = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'test1member':
@@ -593,7 +595,7 @@ class cimAnySimpleType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='cimAnySimpleType')
         if self.hasContent_():
             outfile.write('>')
@@ -612,14 +614,14 @@ class cimAnySimpleType(GeneratedsSuper):
                 name1 = name[len(xsinamespace2):]
                 name2 = '%s:%s' % (xsinamespaceprefix, name1, )
                 if name2 not in already_processed:
-                    already_processed.append(name2)
+                    already_processed.add(name2)
                     outfile.write(' %s=%s' % (name2, quote_attrib(value), ))
             else:
                 mo = re_.match(Namespace_extract_pat_, name)
                 if mo is not None:
                     namespace, name = mo.group(1, 2)
                     if name not in already_processed:
-                        already_processed.append(name)
+                        already_processed.add(name)
                         if namespace == 'http://www.w3.org/XML/1998/namespace':
                             outfile.write(' %s=%s' % (
                                 name, quote_attrib(value), ))
@@ -631,7 +633,7 @@ class cimAnySimpleType(GeneratedsSuper):
                                 unique_counter, name, quote_attrib(value), ))
                 else:
                     if name not in already_processed:
-                        already_processed.append(name)
+                        already_processed.add(name)
                         outfile.write(' %s=%s' % (
                             name, quote_attrib(value), ))
         pass
@@ -646,7 +648,8 @@ class cimAnySimpleType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='cimAnySimpleType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
@@ -658,7 +661,8 @@ class cimAnySimpleType(GeneratedsSuper):
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
diff --git a/tests/anywildcard1_sup.py b/tests/anywildcard1_sup.py
index e955d9978e2afede70f6a1fec2d44abf28c4aa01..29aa7ee1618d06b5843e0adb5f4a530e53e86f1a 100644
--- a/tests/anywildcard1_sup.py
+++ b/tests/anywildcard1_sup.py
@@ -509,7 +509,7 @@ class PlantType_single(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlantType_single')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -543,7 +543,8 @@ class PlantType_single(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='PlantType_single'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -565,7 +566,8 @@ class PlantType_single(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -623,7 +625,7 @@ class PlantType_multiple(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlantType_multiple')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -657,7 +659,8 @@ class PlantType_multiple(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='PlantType_multiple'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -681,7 +684,8 @@ class PlantType_multiple(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -731,7 +735,7 @@ class DescriptionType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='DescriptionType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -763,7 +767,8 @@ class DescriptionType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='DescriptionType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -776,7 +781,8 @@ class DescriptionType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('size=%s,\n' % quote_python(self.size).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -822,7 +828,7 @@ class CatalogType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='CatalogType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -854,7 +860,8 @@ class CatalogType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='CatalogType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -867,7 +874,8 @@ class CatalogType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('catagory=%d,\n' % self.catagory)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -912,7 +920,7 @@ class PlantType_single_nochild(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlantType_single_nochild')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -939,7 +947,8 @@ class PlantType_single_nochild(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='PlantType_single_nochild'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -952,7 +961,8 @@ class PlantType_single_nochild(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -993,7 +1003,7 @@ class PlantType_multiple_nochild(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlantType_multiple_nochild')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1020,7 +1030,8 @@ class PlantType_multiple_nochild(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='PlantType_multiple_nochild'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -1035,7 +1046,8 @@ class PlantType_multiple_nochild(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/anywildcard2_sup.py b/tests/anywildcard2_sup.py
index e955d9978e2afede70f6a1fec2d44abf28c4aa01..29aa7ee1618d06b5843e0adb5f4a530e53e86f1a 100644
--- a/tests/anywildcard2_sup.py
+++ b/tests/anywildcard2_sup.py
@@ -509,7 +509,7 @@ class PlantType_single(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlantType_single')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -543,7 +543,8 @@ class PlantType_single(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='PlantType_single'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -565,7 +566,8 @@ class PlantType_single(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -623,7 +625,7 @@ class PlantType_multiple(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlantType_multiple')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -657,7 +659,8 @@ class PlantType_multiple(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='PlantType_multiple'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -681,7 +684,8 @@ class PlantType_multiple(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -731,7 +735,7 @@ class DescriptionType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='DescriptionType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -763,7 +767,8 @@ class DescriptionType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='DescriptionType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -776,7 +781,8 @@ class DescriptionType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('size=%s,\n' % quote_python(self.size).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -822,7 +828,7 @@ class CatalogType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='CatalogType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -854,7 +860,8 @@ class CatalogType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='CatalogType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -867,7 +874,8 @@ class CatalogType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('catagory=%d,\n' % self.catagory)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -912,7 +920,7 @@ class PlantType_single_nochild(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlantType_single_nochild')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -939,7 +947,8 @@ class PlantType_single_nochild(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='PlantType_single_nochild'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -952,7 +961,8 @@ class PlantType_single_nochild(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -993,7 +1003,7 @@ class PlantType_multiple_nochild(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='PlantType_multiple_nochild')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1020,7 +1030,8 @@ class PlantType_multiple_nochild(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='PlantType_multiple_nochild'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -1035,7 +1046,8 @@ class PlantType_multiple_nochild(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/attr_groups1_sup.py b/tests/attr_groups1_sup.py
index 0772d5a0ecfe11401d5c4d61baef8b507daaa5af..b74edf6b0f82edb781aedeaa47575c9d0e2ed8ee 100644
--- a/tests/attr_groups1_sup.py
+++ b/tests/attr_groups1_sup.py
@@ -533,7 +533,7 @@ class GetUserReq(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='GetUserReq')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -544,28 +544,28 @@ class GetUserReq(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='GetUserReq'):
         if self.value04 is not None and 'value04' not in already_processed:
-            already_processed.append('value04')
+            already_processed.add('value04')
             outfile.write(' value04="%s"' % self.gds_format_integer(self.value04, input_name='value04'))
         if self.value05 is not None and 'value05' not in already_processed:
-            already_processed.append('value05')
+            already_processed.add('value05')
             outfile.write(' value05=%s' % (self.gds_format_string(quote_attrib(self.value05).encode(ExternalEncoding), input_name='value05'), ))
         if self.value06 is not None and 'value06' not in already_processed:
-            already_processed.append('value06')
+            already_processed.add('value06')
             outfile.write(' value06="%s"' % self.gds_format_integer(self.value06, input_name='value06'))
         if self.value07 is not None and 'value07' not in already_processed:
-            already_processed.append('value07')
+            already_processed.add('value07')
             outfile.write(' value07="%s"' % self.gds_format_integer(self.value07, input_name='value07'))
         if self.value01 is not None and 'value01' not in already_processed:
-            already_processed.append('value01')
+            already_processed.add('value01')
             outfile.write(' value01=%s' % (self.gds_format_string(quote_attrib(self.value01).encode(ExternalEncoding), input_name='value01'), ))
         if self.value02 is not None and 'value02' not in already_processed:
-            already_processed.append('value02')
+            already_processed.add('value02')
             outfile.write(' value02="%s"' % self.gds_format_integer(self.value02, input_name='value02'))
         if self.value03 is not None and 'value03' not in already_processed:
-            already_processed.append('value03')
+            already_processed.add('value03')
             outfile.write(' value03=%s' % (self.gds_format_string(quote_attrib(self.value03).encode(ExternalEncoding), input_name='value03'), ))
         if self.sequence is not None and 'sequence' not in already_processed:
-            already_processed.append('sequence')
+            already_processed.add('sequence')
             outfile.write(' sequence="%s"' % self.gds_format_integer(self.sequence, input_name='sequence'))
     def exportChildren(self, outfile, level, namespace_='', name_='GetUserReq', fromsubclass_=False, pretty_print=True):
         if pretty_print:
@@ -584,40 +584,41 @@ class GetUserReq(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='GetUserReq'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.value04 is not None and 'value04' not in already_processed:
-            already_processed.append('value04')
+            already_processed.add('value04')
             showIndent(outfile, level)
             outfile.write('value04 = %d,\n' % (self.value04,))
         if self.value05 is not None and 'value05' not in already_processed:
-            already_processed.append('value05')
+            already_processed.add('value05')
             showIndent(outfile, level)
             outfile.write('value05 = "%s",\n' % (self.value05,))
         if self.value06 is not None and 'value06' not in already_processed:
-            already_processed.append('value06')
+            already_processed.add('value06')
             showIndent(outfile, level)
             outfile.write('value06 = %d,\n' % (self.value06,))
         if self.value07 is not None and 'value07' not in already_processed:
-            already_processed.append('value07')
+            already_processed.add('value07')
             showIndent(outfile, level)
             outfile.write('value07 = %d,\n' % (self.value07,))
         if self.value01 is not None and 'value01' not in already_processed:
-            already_processed.append('value01')
+            already_processed.add('value01')
             showIndent(outfile, level)
             outfile.write('value01 = "%s",\n' % (self.value01,))
         if self.value02 is not None and 'value02' not in already_processed:
-            already_processed.append('value02')
+            already_processed.add('value02')
             showIndent(outfile, level)
             outfile.write('value02 = %d,\n' % (self.value02,))
         if self.value03 is not None and 'value03' not in already_processed:
-            already_processed.append('value03')
+            already_processed.add('value03')
             showIndent(outfile, level)
             outfile.write('value03 = "%s",\n' % (self.value03,))
         if self.sequence is not None and 'sequence' not in already_processed:
-            already_processed.append('sequence')
+            already_processed.add('sequence')
             showIndent(outfile, level)
             outfile.write('sequence = %d,\n' % (self.sequence,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -625,54 +626,55 @@ class GetUserReq(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('returnedTags=%s,\n' % quote_python(self.returnedTags).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('value04', node)
         if value is not None and 'value04' not in already_processed:
-            already_processed.append('value04')
+            already_processed.add('value04')
             try:
                 self.value04 = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('value05', node)
         if value is not None and 'value05' not in already_processed:
-            already_processed.append('value05')
+            already_processed.add('value05')
             self.value05 = value
         value = find_attr_value_('value06', node)
         if value is not None and 'value06' not in already_processed:
-            already_processed.append('value06')
+            already_processed.add('value06')
             try:
                 self.value06 = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('value07', node)
         if value is not None and 'value07' not in already_processed:
-            already_processed.append('value07')
+            already_processed.add('value07')
             try:
                 self.value07 = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('value01', node)
         if value is not None and 'value01' not in already_processed:
-            already_processed.append('value01')
+            already_processed.add('value01')
             self.value01 = value
         value = find_attr_value_('value02', node)
         if value is not None and 'value02' not in already_processed:
-            already_processed.append('value02')
+            already_processed.add('value02')
             try:
                 self.value02 = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('value03', node)
         if value is not None and 'value03' not in already_processed:
-            already_processed.append('value03')
+            already_processed.add('value03')
             self.value03 = value
         value = find_attr_value_('sequence', node)
         if value is not None and 'sequence' not in already_processed:
-            already_processed.append('sequence')
+            already_processed.add('sequence')
             try:
                 self.sequence = int(value)
             except ValueError, exp:
diff --git a/tests/attr_groups2_sup.py b/tests/attr_groups2_sup.py
index 0772d5a0ecfe11401d5c4d61baef8b507daaa5af..b74edf6b0f82edb781aedeaa47575c9d0e2ed8ee 100644
--- a/tests/attr_groups2_sup.py
+++ b/tests/attr_groups2_sup.py
@@ -533,7 +533,7 @@ class GetUserReq(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='GetUserReq')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -544,28 +544,28 @@ class GetUserReq(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='GetUserReq'):
         if self.value04 is not None and 'value04' not in already_processed:
-            already_processed.append('value04')
+            already_processed.add('value04')
             outfile.write(' value04="%s"' % self.gds_format_integer(self.value04, input_name='value04'))
         if self.value05 is not None and 'value05' not in already_processed:
-            already_processed.append('value05')
+            already_processed.add('value05')
             outfile.write(' value05=%s' % (self.gds_format_string(quote_attrib(self.value05).encode(ExternalEncoding), input_name='value05'), ))
         if self.value06 is not None and 'value06' not in already_processed:
-            already_processed.append('value06')
+            already_processed.add('value06')
             outfile.write(' value06="%s"' % self.gds_format_integer(self.value06, input_name='value06'))
         if self.value07 is not None and 'value07' not in already_processed:
-            already_processed.append('value07')
+            already_processed.add('value07')
             outfile.write(' value07="%s"' % self.gds_format_integer(self.value07, input_name='value07'))
         if self.value01 is not None and 'value01' not in already_processed:
-            already_processed.append('value01')
+            already_processed.add('value01')
             outfile.write(' value01=%s' % (self.gds_format_string(quote_attrib(self.value01).encode(ExternalEncoding), input_name='value01'), ))
         if self.value02 is not None and 'value02' not in already_processed:
-            already_processed.append('value02')
+            already_processed.add('value02')
             outfile.write(' value02="%s"' % self.gds_format_integer(self.value02, input_name='value02'))
         if self.value03 is not None and 'value03' not in already_processed:
-            already_processed.append('value03')
+            already_processed.add('value03')
             outfile.write(' value03=%s' % (self.gds_format_string(quote_attrib(self.value03).encode(ExternalEncoding), input_name='value03'), ))
         if self.sequence is not None and 'sequence' not in already_processed:
-            already_processed.append('sequence')
+            already_processed.add('sequence')
             outfile.write(' sequence="%s"' % self.gds_format_integer(self.sequence, input_name='sequence'))
     def exportChildren(self, outfile, level, namespace_='', name_='GetUserReq', fromsubclass_=False, pretty_print=True):
         if pretty_print:
@@ -584,40 +584,41 @@ class GetUserReq(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='GetUserReq'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.value04 is not None and 'value04' not in already_processed:
-            already_processed.append('value04')
+            already_processed.add('value04')
             showIndent(outfile, level)
             outfile.write('value04 = %d,\n' % (self.value04,))
         if self.value05 is not None and 'value05' not in already_processed:
-            already_processed.append('value05')
+            already_processed.add('value05')
             showIndent(outfile, level)
             outfile.write('value05 = "%s",\n' % (self.value05,))
         if self.value06 is not None and 'value06' not in already_processed:
-            already_processed.append('value06')
+            already_processed.add('value06')
             showIndent(outfile, level)
             outfile.write('value06 = %d,\n' % (self.value06,))
         if self.value07 is not None and 'value07' not in already_processed:
-            already_processed.append('value07')
+            already_processed.add('value07')
             showIndent(outfile, level)
             outfile.write('value07 = %d,\n' % (self.value07,))
         if self.value01 is not None and 'value01' not in already_processed:
-            already_processed.append('value01')
+            already_processed.add('value01')
             showIndent(outfile, level)
             outfile.write('value01 = "%s",\n' % (self.value01,))
         if self.value02 is not None and 'value02' not in already_processed:
-            already_processed.append('value02')
+            already_processed.add('value02')
             showIndent(outfile, level)
             outfile.write('value02 = %d,\n' % (self.value02,))
         if self.value03 is not None and 'value03' not in already_processed:
-            already_processed.append('value03')
+            already_processed.add('value03')
             showIndent(outfile, level)
             outfile.write('value03 = "%s",\n' % (self.value03,))
         if self.sequence is not None and 'sequence' not in already_processed:
-            already_processed.append('sequence')
+            already_processed.add('sequence')
             showIndent(outfile, level)
             outfile.write('sequence = %d,\n' % (self.sequence,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -625,54 +626,55 @@ class GetUserReq(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('returnedTags=%s,\n' % quote_python(self.returnedTags).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('value04', node)
         if value is not None and 'value04' not in already_processed:
-            already_processed.append('value04')
+            already_processed.add('value04')
             try:
                 self.value04 = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('value05', node)
         if value is not None and 'value05' not in already_processed:
-            already_processed.append('value05')
+            already_processed.add('value05')
             self.value05 = value
         value = find_attr_value_('value06', node)
         if value is not None and 'value06' not in already_processed:
-            already_processed.append('value06')
+            already_processed.add('value06')
             try:
                 self.value06 = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('value07', node)
         if value is not None and 'value07' not in already_processed:
-            already_processed.append('value07')
+            already_processed.add('value07')
             try:
                 self.value07 = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('value01', node)
         if value is not None and 'value01' not in already_processed:
-            already_processed.append('value01')
+            already_processed.add('value01')
             self.value01 = value
         value = find_attr_value_('value02', node)
         if value is not None and 'value02' not in already_processed:
-            already_processed.append('value02')
+            already_processed.add('value02')
             try:
                 self.value02 = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('value03', node)
         if value is not None and 'value03' not in already_processed:
-            already_processed.append('value03')
+            already_processed.add('value03')
             self.value03 = value
         value = find_attr_value_('sequence', node)
         if value is not None and 'sequence' not in already_processed:
-            already_processed.append('sequence')
+            already_processed.add('sequence')
             try:
                 self.sequence = int(value)
             except ValueError, exp:
diff --git a/tests/extensions1_sup.py b/tests/extensions1_sup.py
index c02b45ab938c9cbebed72dffba0821b9c2e20e56..307870eb68586098b3680290f3c476abcbcd3455 100644
--- a/tests/extensions1_sup.py
+++ b/tests/extensions1_sup.py
@@ -505,7 +505,7 @@ class SpecialDate(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='SpecialDate')
         if self.hasContent_():
             outfile.write('>')
@@ -516,7 +516,7 @@ class SpecialDate(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='SpecialDate'):
         if self.SpecialProperty is not None and 'SpecialProperty' not in already_processed:
-            already_processed.append('SpecialProperty')
+            already_processed.add('SpecialProperty')
             outfile.write(' SpecialProperty=%s' % (self.gds_format_string(quote_attrib(self.SpecialProperty).encode(ExternalEncoding), input_name='SpecialProperty'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='SpecialDate', fromsubclass_=False, pretty_print=True):
         pass
@@ -529,20 +529,22 @@ class SpecialDate(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='SpecialDate'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.SpecialProperty is not None and 'SpecialProperty' not in already_processed:
-            already_processed.append('SpecialProperty')
+            already_processed.add('SpecialProperty')
             showIndent(outfile, level)
             outfile.write('SpecialProperty = "%s",\n' % (self.SpecialProperty,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -550,7 +552,7 @@ class SpecialDate(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('SpecialProperty', node)
         if value is not None and 'SpecialProperty' not in already_processed:
-            already_processed.append('SpecialProperty')
+            already_processed.add('SpecialProperty')
             self.SpecialProperty = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -584,7 +586,7 @@ class ExtremeDate(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='ExtremeDate')
         if self.hasContent_():
             outfile.write('>')
@@ -595,7 +597,7 @@ class ExtremeDate(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='ExtremeDate'):
         if self.ExtremeProperty is not None and 'ExtremeProperty' not in already_processed:
-            already_processed.append('ExtremeProperty')
+            already_processed.add('ExtremeProperty')
             outfile.write(' ExtremeProperty=%s' % (self.gds_format_string(quote_attrib(self.ExtremeProperty).encode(ExternalEncoding), input_name='ExtremeProperty'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='ExtremeDate', fromsubclass_=False, pretty_print=True):
         pass
@@ -608,20 +610,22 @@ class ExtremeDate(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='ExtremeDate'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.ExtremeProperty is not None and 'ExtremeProperty' not in already_processed:
-            already_processed.append('ExtremeProperty')
+            already_processed.add('ExtremeProperty')
             showIndent(outfile, level)
             outfile.write('ExtremeProperty = "%s",\n' % (self.ExtremeProperty,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -629,7 +633,7 @@ class ExtremeDate(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('ExtremeProperty', node)
         if value is not None and 'ExtremeProperty' not in already_processed:
-            already_processed.append('ExtremeProperty')
+            already_processed.add('ExtremeProperty')
             self.ExtremeProperty = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -663,7 +667,7 @@ class singleExtremeDate(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='singleExtremeDate')
         if self.hasContent_():
             outfile.write('>')
@@ -674,7 +678,7 @@ class singleExtremeDate(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='singleExtremeDate'):
         if self.ExtremeProperty is not None and 'ExtremeProperty' not in already_processed:
-            already_processed.append('ExtremeProperty')
+            already_processed.add('ExtremeProperty')
             outfile.write(' ExtremeProperty=%s' % (self.gds_format_string(quote_attrib(self.ExtremeProperty).encode(ExternalEncoding), input_name='ExtremeProperty'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='singleExtremeDate', fromsubclass_=False, pretty_print=True):
         pass
@@ -687,20 +691,22 @@ class singleExtremeDate(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='singleExtremeDate'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.ExtremeProperty is not None and 'ExtremeProperty' not in already_processed:
-            already_processed.append('ExtremeProperty')
+            already_processed.add('ExtremeProperty')
             showIndent(outfile, level)
             outfile.write('ExtremeProperty = "%s",\n' % (self.ExtremeProperty,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -708,7 +714,7 @@ class singleExtremeDate(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('ExtremeProperty', node)
         if value is not None and 'ExtremeProperty' not in already_processed:
-            already_processed.append('ExtremeProperty')
+            already_processed.add('ExtremeProperty')
             self.ExtremeProperty = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -747,7 +753,7 @@ class containerType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='containerType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -777,7 +783,8 @@ class containerType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='containerType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -802,7 +809,8 @@ class containerType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -846,7 +854,7 @@ class simpleFactoidType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='simpleFactoidType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -874,7 +882,8 @@ class simpleFactoidType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='simpleFactoidType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -884,7 +893,8 @@ class simpleFactoidType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('relation=%s,\n' % quote_python(self.relation).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -938,7 +948,7 @@ class mixedFactoidType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='mixedFactoidType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -963,7 +973,8 @@ class mixedFactoidType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='mixedFactoidType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
@@ -979,7 +990,8 @@ class mixedFactoidType(GeneratedsSuper):
         outfile.write('],\n')
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         if node.text is not None:
             obj_ = self.mixedclass_(MixedContainer.CategoryText,
@@ -1037,7 +1049,7 @@ class BaseType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='BaseType')
         if self.hasContent_():
             outfile.write('>')
@@ -1048,13 +1060,13 @@ class BaseType(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='BaseType'):
         if self.BaseProperty1 is not None and 'BaseProperty1' not in already_processed:
-            already_processed.append('BaseProperty1')
+            already_processed.add('BaseProperty1')
             outfile.write(' BaseProperty1=%s' % (self.gds_format_string(quote_attrib(self.BaseProperty1).encode(ExternalEncoding), input_name='BaseProperty1'), ))
         if self.BaseProperty2 is not None and 'BaseProperty2' not in already_processed:
-            already_processed.append('BaseProperty2')
+            already_processed.add('BaseProperty2')
             outfile.write(' BaseProperty2=%s' % (self.gds_format_string(quote_attrib(self.BaseProperty2).encode(ExternalEncoding), input_name='BaseProperty2'), ))
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
     def exportChildren(self, outfile, level, namespace_='', name_='BaseType', fromsubclass_=False, pretty_print=True):
@@ -1068,24 +1080,26 @@ class BaseType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='BaseType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.BaseProperty1 is not None and 'BaseProperty1' not in already_processed:
-            already_processed.append('BaseProperty1')
+            already_processed.add('BaseProperty1')
             showIndent(outfile, level)
             outfile.write('BaseProperty1 = "%s",\n' % (self.BaseProperty1,))
         if self.BaseProperty2 is not None and 'BaseProperty2' not in already_processed:
-            already_processed.append('BaseProperty2')
+            already_processed.add('BaseProperty2')
             showIndent(outfile, level)
             outfile.write('BaseProperty2 = "%s",\n' % (self.BaseProperty2,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -1093,15 +1107,15 @@ class BaseType(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('BaseProperty1', node)
         if value is not None and 'BaseProperty1' not in already_processed:
-            already_processed.append('BaseProperty1')
+            already_processed.add('BaseProperty1')
             self.BaseProperty1 = value
         value = find_attr_value_('BaseProperty2', node)
         if value is not None and 'BaseProperty2' not in already_processed:
-            already_processed.append('BaseProperty2')
+            already_processed.add('BaseProperty2')
             self.BaseProperty2 = value
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -1140,7 +1154,7 @@ class DerivedType(BaseType):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='DerivedType')
         if self.hasContent_():
             outfile.write('>')
@@ -1152,10 +1166,10 @@ class DerivedType(BaseType):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='DerivedType'):
         super(DerivedType, self).exportAttributes(outfile, level, already_processed, namespace_, name_='DerivedType')
         if self.DerivedProperty1 is not None and 'DerivedProperty1' not in already_processed:
-            already_processed.append('DerivedProperty1')
+            already_processed.add('DerivedProperty1')
             outfile.write(' DerivedProperty1=%s' % (self.gds_format_string(quote_attrib(self.DerivedProperty1).encode(ExternalEncoding), input_name='DerivedProperty1'), ))
         if self.DerivedProperty2 is not None and 'DerivedProperty2' not in already_processed:
-            already_processed.append('DerivedProperty2')
+            already_processed.add('DerivedProperty2')
             outfile.write(' DerivedProperty2=%s' % (self.gds_format_string(quote_attrib(self.DerivedProperty2).encode(ExternalEncoding), input_name='DerivedProperty2'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='DerivedType', fromsubclass_=False, pretty_print=True):
         super(DerivedType, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
@@ -1170,18 +1184,19 @@ class DerivedType(BaseType):
             return False
     def exportLiteral(self, outfile, level, name_='DerivedType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.DerivedProperty1 is not None and 'DerivedProperty1' not in already_processed:
-            already_processed.append('DerivedProperty1')
+            already_processed.add('DerivedProperty1')
             showIndent(outfile, level)
             outfile.write('DerivedProperty1 = "%s",\n' % (self.DerivedProperty1,))
         if self.DerivedProperty2 is not None and 'DerivedProperty2' not in already_processed:
-            already_processed.append('DerivedProperty2')
+            already_processed.add('DerivedProperty2')
             showIndent(outfile, level)
             outfile.write('DerivedProperty2 = "%s",\n' % (self.DerivedProperty2,))
         super(DerivedType, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -1189,7 +1204,8 @@ class DerivedType(BaseType):
         super(DerivedType, self).exportLiteralChildren(outfile, level, name_)
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -1197,11 +1213,11 @@ class DerivedType(BaseType):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('DerivedProperty1', node)
         if value is not None and 'DerivedProperty1' not in already_processed:
-            already_processed.append('DerivedProperty1')
+            already_processed.add('DerivedProperty1')
             self.DerivedProperty1 = value
         value = find_attr_value_('DerivedProperty2', node)
         if value is not None and 'DerivedProperty2' not in already_processed:
-            already_processed.append('DerivedProperty2')
+            already_processed.add('DerivedProperty2')
             self.DerivedProperty2 = value
         super(DerivedType, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
@@ -1236,7 +1252,7 @@ class MyInteger(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='MyInteger')
         if self.hasContent_():
             outfile.write('>')
@@ -1247,7 +1263,7 @@ class MyInteger(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='MyInteger'):
         if self.MyAttr is not None and 'MyAttr' not in already_processed:
-            already_processed.append('MyAttr')
+            already_processed.add('MyAttr')
             outfile.write(' MyAttr=%s' % (self.gds_format_string(quote_attrib(self.MyAttr).encode(ExternalEncoding), input_name='MyAttr'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='MyInteger', fromsubclass_=False, pretty_print=True):
         pass
@@ -1260,20 +1276,22 @@ class MyInteger(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='MyInteger'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.MyAttr is not None and 'MyAttr' not in already_processed:
-            already_processed.append('MyAttr')
+            already_processed.add('MyAttr')
             showIndent(outfile, level)
             outfile.write('MyAttr = "%s",\n' % (self.MyAttr,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -1281,7 +1299,7 @@ class MyInteger(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('MyAttr', node)
         if value is not None and 'MyAttr' not in already_processed:
-            already_processed.append('MyAttr')
+            already_processed.add('MyAttr')
             self.MyAttr = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -1315,7 +1333,7 @@ class MyBoolean(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='MyBoolean')
         if self.hasContent_():
             outfile.write('>')
@@ -1326,7 +1344,7 @@ class MyBoolean(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='MyBoolean'):
         if self.MyAttr is not None and 'MyAttr' not in already_processed:
-            already_processed.append('MyAttr')
+            already_processed.add('MyAttr')
             outfile.write(' MyAttr=%s' % (self.gds_format_string(quote_attrib(self.MyAttr).encode(ExternalEncoding), input_name='MyAttr'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='MyBoolean', fromsubclass_=False, pretty_print=True):
         pass
@@ -1339,20 +1357,22 @@ class MyBoolean(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='MyBoolean'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.MyAttr is not None and 'MyAttr' not in already_processed:
-            already_processed.append('MyAttr')
+            already_processed.add('MyAttr')
             showIndent(outfile, level)
             outfile.write('MyAttr = "%s",\n' % (self.MyAttr,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -1360,7 +1380,7 @@ class MyBoolean(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('MyAttr', node)
         if value is not None and 'MyAttr' not in already_processed:
-            already_processed.append('MyAttr')
+            already_processed.add('MyAttr')
             self.MyAttr = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -1394,7 +1414,7 @@ class MyFloat(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='MyFloat')
         if self.hasContent_():
             outfile.write('>')
@@ -1405,7 +1425,7 @@ class MyFloat(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='MyFloat'):
         if self.MyAttr is not None and 'MyAttr' not in already_processed:
-            already_processed.append('MyAttr')
+            already_processed.add('MyAttr')
             outfile.write(' MyAttr=%s' % (self.gds_format_string(quote_attrib(self.MyAttr).encode(ExternalEncoding), input_name='MyAttr'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='MyFloat', fromsubclass_=False, pretty_print=True):
         pass
@@ -1418,20 +1438,22 @@ class MyFloat(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='MyFloat'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.MyAttr is not None and 'MyAttr' not in already_processed:
-            already_processed.append('MyAttr')
+            already_processed.add('MyAttr')
             showIndent(outfile, level)
             outfile.write('MyAttr = "%s",\n' % (self.MyAttr,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -1439,7 +1461,7 @@ class MyFloat(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('MyAttr', node)
         if value is not None and 'MyAttr' not in already_processed:
-            already_processed.append('MyAttr')
+            already_processed.add('MyAttr')
             self.MyAttr = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -1473,7 +1495,7 @@ class MyDouble(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='MyDouble')
         if self.hasContent_():
             outfile.write('>')
@@ -1484,7 +1506,7 @@ class MyDouble(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='MyDouble'):
         if self.MyAttr is not None and 'MyAttr' not in already_processed:
-            already_processed.append('MyAttr')
+            already_processed.add('MyAttr')
             outfile.write(' MyAttr=%s' % (self.gds_format_string(quote_attrib(self.MyAttr).encode(ExternalEncoding), input_name='MyAttr'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='MyDouble', fromsubclass_=False, pretty_print=True):
         pass
@@ -1497,20 +1519,22 @@ class MyDouble(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='MyDouble'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.MyAttr is not None and 'MyAttr' not in already_processed:
-            already_processed.append('MyAttr')
+            already_processed.add('MyAttr')
             showIndent(outfile, level)
             outfile.write('MyAttr = "%s",\n' % (self.MyAttr,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -1518,7 +1542,7 @@ class MyDouble(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('MyAttr', node)
         if value is not None and 'MyAttr' not in already_processed:
-            already_processed.append('MyAttr')
+            already_processed.add('MyAttr')
             self.MyAttr = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
diff --git a/tests/ipo1_sup.py b/tests/ipo1_sup.py
index 0c95c57400ddaa51b007b9e5b804827f130a16ee..e08cf2c4370b3e883368823ee9301a36f5e8a85b 100644
--- a/tests/ipo1_sup.py
+++ b/tests/ipo1_sup.py
@@ -517,7 +517,7 @@ class PurchaseOrderType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='PurchaseOrderType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -528,7 +528,7 @@ class PurchaseOrderType(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='ipo:', name_='PurchaseOrderType'):
         if self.orderDate is not None and 'orderDate' not in already_processed:
-            already_processed.append('orderDate')
+            already_processed.add('orderDate')
             outfile.write(' orderDate="%s"' % self.gds_format_date(self.orderDate, input_name='orderDate'))
     def exportChildren(self, outfile, level, namespace_='ipo:', name_='PurchaseOrderType', fromsubclass_=False, pretty_print=True):
         if pretty_print:
@@ -556,12 +556,13 @@ class PurchaseOrderType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='PurchaseOrderType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.orderDate is not None and 'orderDate' not in already_processed:
-            already_processed.append('orderDate')
+            already_processed.add('orderDate')
             showIndent(outfile, level)
             outfile.write('orderDate = "%s",\n' % (self.orderDate,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -587,14 +588,15 @@ class PurchaseOrderType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('orderDate', node)
         if value is not None and 'orderDate' not in already_processed:
-            already_processed.append('orderDate')
+            already_processed.add('orderDate')
             try:
                 self.orderDate = self.gds_parse_date(value, node, 'orderDate')
             except ValueError, exp:
@@ -649,7 +651,7 @@ class Items(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='Items')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -676,7 +678,8 @@ class Items(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='Items'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -695,7 +698,8 @@ class Items(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -743,7 +747,7 @@ class Address(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='Address')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -754,7 +758,7 @@ class Address(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='ipo:', name_='Address'):
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
         pass
@@ -783,7 +787,8 @@ class Address(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='Address'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -799,14 +804,15 @@ class Address(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('city=%s,\n' % quote_python(self.city).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'name':
@@ -855,7 +861,7 @@ class USAddress(Address):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='USAddress')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -889,7 +895,8 @@ class USAddress(Address):
             return False
     def exportLiteral(self, outfile, level, name_='USAddress'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -903,7 +910,8 @@ class USAddress(Address):
             showIndent(outfile, level)
             outfile.write('zip=%d,\n' % self.zip)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -968,7 +976,7 @@ class UKAddress(Address):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='UKAddress')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -980,10 +988,10 @@ class UKAddress(Address):
     def exportAttributes(self, outfile, level, already_processed, namespace_='ipo:', name_='UKAddress'):
         super(UKAddress, self).exportAttributes(outfile, level, already_processed, namespace_, name_='UKAddress')
         if self.category_attr is not None and 'category_attr' not in already_processed:
-            already_processed.append('category_attr')
+            already_processed.add('category_attr')
             outfile.write(' category=%s' % (quote_attrib(self.category_attr), ))
         if self.exportCode is not None and 'exportCode' not in already_processed:
-            already_processed.append('exportCode')
+            already_processed.add('exportCode')
             outfile.write(' exportCode="%s"' % self.gds_format_integer(self.exportCode, input_name='exportCode'))
     def exportChildren(self, outfile, level, namespace_='ipo:', name_='UKAddress', fromsubclass_=False, pretty_print=True):
         super(UKAddress, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
@@ -1008,16 +1016,17 @@ class UKAddress(Address):
             return False
     def exportLiteral(self, outfile, level, name_='UKAddress'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.category_attr is not None and 'category_attr' not in already_processed:
-            already_processed.append('category_attr')
+            already_processed.add('category_attr')
             showIndent(outfile, level)
             outfile.write('category_attr = %s,\n' % (self.category_attr,))
         if self.exportCode is not None and 'exportCode' not in already_processed:
-            already_processed.append('exportCode')
+            already_processed.add('exportCode')
             showIndent(outfile, level)
             outfile.write('exportCode = %d,\n' % (self.exportCode,))
         super(UKAddress, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -1030,18 +1039,19 @@ class UKAddress(Address):
             showIndent(outfile, level)
             outfile.write('category=%s,\n' % quote_python(self.category).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('category', node)
         if value is not None and 'category_attr' not in already_processed:
-            already_processed.append('category_attr')
+            already_processed.add('category_attr')
             self.category_attr = value
         value = find_attr_value_('exportCode', node)
         if value is not None and 'exportCode' not in already_processed:
-            already_processed.append('exportCode')
+            already_processed.add('exportCode')
             try:
                 self.exportCode = int(value)
             except ValueError, exp:
@@ -1106,7 +1116,7 @@ class itemType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='itemType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1117,7 +1127,7 @@ class itemType(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='ipo:', name_='itemType'):
         if self.partNum is not None and 'partNum' not in already_processed:
-            already_processed.append('partNum')
+            already_processed.add('partNum')
             outfile.write(' partNum=%s' % (quote_attrib(self.partNum), ))
     def exportChildren(self, outfile, level, namespace_='ipo:', name_='itemType', fromsubclass_=False, pretty_print=True):
         if pretty_print:
@@ -1152,12 +1162,13 @@ class itemType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='itemType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.partNum is not None and 'partNum' not in already_processed:
-            already_processed.append('partNum')
+            already_processed.add('partNum')
             showIndent(outfile, level)
             outfile.write('partNum = %s,\n' % (self.partNum,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -1177,14 +1188,15 @@ class itemType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('shipDate=datetime_.strptime("%s", "%%Y-%%m-%%d"),\n' % self.gds_format_date(self.shipDate, input_name='shipDate'))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('partNum', node)
         if value is not None and 'partNum' not in already_processed:
-            already_processed.append('partNum')
+            already_processed.add('partNum')
             self.partNum = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'productName':
@@ -1240,7 +1252,7 @@ class quantity(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='quantity')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1261,7 +1273,8 @@ class quantity(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='quantity'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -1269,7 +1282,8 @@ class quantity(GeneratedsSuper):
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/ipo2_sup.py b/tests/ipo2_sup.py
index 0c95c57400ddaa51b007b9e5b804827f130a16ee..e08cf2c4370b3e883368823ee9301a36f5e8a85b 100644
--- a/tests/ipo2_sup.py
+++ b/tests/ipo2_sup.py
@@ -517,7 +517,7 @@ class PurchaseOrderType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='PurchaseOrderType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -528,7 +528,7 @@ class PurchaseOrderType(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='ipo:', name_='PurchaseOrderType'):
         if self.orderDate is not None and 'orderDate' not in already_processed:
-            already_processed.append('orderDate')
+            already_processed.add('orderDate')
             outfile.write(' orderDate="%s"' % self.gds_format_date(self.orderDate, input_name='orderDate'))
     def exportChildren(self, outfile, level, namespace_='ipo:', name_='PurchaseOrderType', fromsubclass_=False, pretty_print=True):
         if pretty_print:
@@ -556,12 +556,13 @@ class PurchaseOrderType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='PurchaseOrderType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.orderDate is not None and 'orderDate' not in already_processed:
-            already_processed.append('orderDate')
+            already_processed.add('orderDate')
             showIndent(outfile, level)
             outfile.write('orderDate = "%s",\n' % (self.orderDate,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -587,14 +588,15 @@ class PurchaseOrderType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('orderDate', node)
         if value is not None and 'orderDate' not in already_processed:
-            already_processed.append('orderDate')
+            already_processed.add('orderDate')
             try:
                 self.orderDate = self.gds_parse_date(value, node, 'orderDate')
             except ValueError, exp:
@@ -649,7 +651,7 @@ class Items(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='Items')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -676,7 +678,8 @@ class Items(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='Items'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -695,7 +698,8 @@ class Items(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -743,7 +747,7 @@ class Address(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='Address')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -754,7 +758,7 @@ class Address(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='ipo:', name_='Address'):
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
         pass
@@ -783,7 +787,8 @@ class Address(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='Address'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -799,14 +804,15 @@ class Address(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('city=%s,\n' % quote_python(self.city).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'name':
@@ -855,7 +861,7 @@ class USAddress(Address):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='USAddress')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -889,7 +895,8 @@ class USAddress(Address):
             return False
     def exportLiteral(self, outfile, level, name_='USAddress'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -903,7 +910,8 @@ class USAddress(Address):
             showIndent(outfile, level)
             outfile.write('zip=%d,\n' % self.zip)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -968,7 +976,7 @@ class UKAddress(Address):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='UKAddress')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -980,10 +988,10 @@ class UKAddress(Address):
     def exportAttributes(self, outfile, level, already_processed, namespace_='ipo:', name_='UKAddress'):
         super(UKAddress, self).exportAttributes(outfile, level, already_processed, namespace_, name_='UKAddress')
         if self.category_attr is not None and 'category_attr' not in already_processed:
-            already_processed.append('category_attr')
+            already_processed.add('category_attr')
             outfile.write(' category=%s' % (quote_attrib(self.category_attr), ))
         if self.exportCode is not None and 'exportCode' not in already_processed:
-            already_processed.append('exportCode')
+            already_processed.add('exportCode')
             outfile.write(' exportCode="%s"' % self.gds_format_integer(self.exportCode, input_name='exportCode'))
     def exportChildren(self, outfile, level, namespace_='ipo:', name_='UKAddress', fromsubclass_=False, pretty_print=True):
         super(UKAddress, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
@@ -1008,16 +1016,17 @@ class UKAddress(Address):
             return False
     def exportLiteral(self, outfile, level, name_='UKAddress'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.category_attr is not None and 'category_attr' not in already_processed:
-            already_processed.append('category_attr')
+            already_processed.add('category_attr')
             showIndent(outfile, level)
             outfile.write('category_attr = %s,\n' % (self.category_attr,))
         if self.exportCode is not None and 'exportCode' not in already_processed:
-            already_processed.append('exportCode')
+            already_processed.add('exportCode')
             showIndent(outfile, level)
             outfile.write('exportCode = %d,\n' % (self.exportCode,))
         super(UKAddress, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -1030,18 +1039,19 @@ class UKAddress(Address):
             showIndent(outfile, level)
             outfile.write('category=%s,\n' % quote_python(self.category).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('category', node)
         if value is not None and 'category_attr' not in already_processed:
-            already_processed.append('category_attr')
+            already_processed.add('category_attr')
             self.category_attr = value
         value = find_attr_value_('exportCode', node)
         if value is not None and 'exportCode' not in already_processed:
-            already_processed.append('exportCode')
+            already_processed.add('exportCode')
             try:
                 self.exportCode = int(value)
             except ValueError, exp:
@@ -1106,7 +1116,7 @@ class itemType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='itemType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1117,7 +1127,7 @@ class itemType(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='ipo:', name_='itemType'):
         if self.partNum is not None and 'partNum' not in already_processed:
-            already_processed.append('partNum')
+            already_processed.add('partNum')
             outfile.write(' partNum=%s' % (quote_attrib(self.partNum), ))
     def exportChildren(self, outfile, level, namespace_='ipo:', name_='itemType', fromsubclass_=False, pretty_print=True):
         if pretty_print:
@@ -1152,12 +1162,13 @@ class itemType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='itemType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.partNum is not None and 'partNum' not in already_processed:
-            already_processed.append('partNum')
+            already_processed.add('partNum')
             showIndent(outfile, level)
             outfile.write('partNum = %s,\n' % (self.partNum,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -1177,14 +1188,15 @@ class itemType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('shipDate=datetime_.strptime("%s", "%%Y-%%m-%%d"),\n' % self.gds_format_date(self.shipDate, input_name='shipDate'))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('partNum', node)
         if value is not None and 'partNum' not in already_processed:
-            already_processed.append('partNum')
+            already_processed.add('partNum')
             self.partNum = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'productName':
@@ -1240,7 +1252,7 @@ class quantity(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='quantity')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1261,7 +1273,8 @@ class quantity(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='quantity'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -1269,7 +1282,8 @@ class quantity(GeneratedsSuper):
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/out1_sup.py b/tests/out1_sup.py
index e27c95b5710fb4b53565cd9c73b9bf036c6ef3a1..c9105a9eb52d1c05690638b039511f056c4e691a 100644
--- a/tests/out1_sup.py
+++ b/tests/out1_sup.py
@@ -542,7 +542,7 @@ class people(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='people')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -581,7 +581,8 @@ class people(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='people'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -648,7 +649,8 @@ class people(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -772,7 +774,7 @@ class comments(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='comments')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -797,7 +799,8 @@ class comments(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='comments'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
@@ -813,7 +816,8 @@ class comments(GeneratedsSuper):
         outfile.write('],\n')
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         if node.text is not None:
             obj_ = self.mixedclass_(MixedContainer.CategoryText,
@@ -964,7 +968,7 @@ class person(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='person')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -975,22 +979,22 @@ class person(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='person'):
         if self.vegetable is not None and 'vegetable' not in already_processed:
-            already_processed.append('vegetable')
+            already_processed.add('vegetable')
             outfile.write(' vegetable=%s' % (self.gds_format_string(quote_attrib(self.vegetable).encode(ExternalEncoding), input_name='vegetable'), ))
         if self.fruit is not None and 'fruit' not in already_processed:
-            already_processed.append('fruit')
+            already_processed.add('fruit')
             outfile.write(' fruit=%s' % (self.gds_format_string(quote_attrib(self.fruit).encode(ExternalEncoding), input_name='fruit'), ))
         if self.ratio is not None and 'ratio' not in already_processed:
-            already_processed.append('ratio')
+            already_processed.add('ratio')
             outfile.write(' ratio="%s"' % self.gds_format_float(self.ratio, input_name='ratio'))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
         if self.value is not None and 'value' not in already_processed:
-            already_processed.append('value')
+            already_processed.add('value')
             outfile.write(' value=%s' % (self.gds_format_string(quote_attrib(self.value).encode(ExternalEncoding), input_name='value'), ))
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
     def exportChildren(self, outfile, level, namespace_='', name_='person', fromsubclass_=False, pretty_print=True):
@@ -1028,28 +1032,29 @@ class person(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='person'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.vegetable is not None and 'vegetable' not in already_processed:
-            already_processed.append('vegetable')
+            already_processed.add('vegetable')
             showIndent(outfile, level)
             outfile.write('vegetable = "%s",\n' % (self.vegetable,))
         if self.fruit is not None and 'fruit' not in already_processed:
-            already_processed.append('fruit')
+            already_processed.add('fruit')
             showIndent(outfile, level)
             outfile.write('fruit = "%s",\n' % (self.fruit,))
         if self.ratio is not None and 'ratio' not in already_processed:
-            already_processed.append('ratio')
+            already_processed.add('ratio')
             showIndent(outfile, level)
             outfile.write('ratio = %f,\n' % (self.ratio,))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             showIndent(outfile, level)
             outfile.write('id = %d,\n' % (self.id,))
         if self.value is not None and 'value' not in already_processed:
-            already_processed.append('value')
+            already_processed.add('value')
             showIndent(outfile, level)
             outfile.write('value = "%s",\n' % (self.value,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -1096,40 +1101,41 @@ class person(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('description=%s,\n' % quote_python(self.description).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('vegetable', node)
         if value is not None and 'vegetable' not in already_processed:
-            already_processed.append('vegetable')
+            already_processed.add('vegetable')
             self.vegetable = value
         value = find_attr_value_('fruit', node)
         if value is not None and 'fruit' not in already_processed:
-            already_processed.append('fruit')
+            already_processed.add('fruit')
             self.fruit = value
         value = find_attr_value_('ratio', node)
         if value is not None and 'ratio' not in already_processed:
-            already_processed.append('ratio')
+            already_processed.add('ratio')
             try:
                 self.ratio = float(value)
             except ValueError, exp:
                 raise ValueError('Bad float/double attribute (ratio): %s' % exp)
         value = find_attr_value_('id', node)
         if value is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             try:
                 self.id = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('value', node)
         if value is not None and 'value' not in already_processed:
-            already_processed.append('value')
+            already_processed.add('value')
             self.value = value
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'name':
@@ -1307,7 +1313,7 @@ class programmer(person):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='programmer')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1319,25 +1325,25 @@ class programmer(person):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='programmer'):
         super(programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='programmer')
         if self.language is not None and 'language' not in already_processed:
-            already_processed.append('language')
+            already_processed.add('language')
             outfile.write(' language=%s' % (self.gds_format_string(quote_attrib(self.language).encode(ExternalEncoding), input_name='language'), ))
         if self.area is not None and 'area' not in already_processed:
-            already_processed.append('area')
+            already_processed.add('area')
             outfile.write(' area=%s' % (self.gds_format_string(quote_attrib(self.area).encode(ExternalEncoding), input_name='area'), ))
         if self.attrnegint is not None and 'attrnegint' not in already_processed:
-            already_processed.append('attrnegint')
+            already_processed.add('attrnegint')
             outfile.write(' attrnegint="%s"' % self.gds_format_integer(self.attrnegint, input_name='attrnegint'))
         if self.attrposint is not None and 'attrposint' not in already_processed:
-            already_processed.append('attrposint')
+            already_processed.add('attrposint')
             outfile.write(' attrposint="%s"' % self.gds_format_integer(self.attrposint, input_name='attrposint'))
         if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed:
-            already_processed.append('attrnonnegint')
+            already_processed.add('attrnonnegint')
             outfile.write(' attrnonnegint="%s"' % self.gds_format_integer(self.attrnonnegint, input_name='attrnonnegint'))
         if self.attrnonposint is not None and 'attrnonposint' not in already_processed:
-            already_processed.append('attrnonposint')
+            already_processed.add('attrnonposint')
             outfile.write(' attrnonposint="%s"' % self.gds_format_integer(self.attrnonposint, input_name='attrnonposint'))
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
     def exportChildren(self, outfile, level, namespace_='', name_='programmer', fromsubclass_=False, pretty_print=True):
@@ -1402,32 +1408,33 @@ class programmer(person):
             return False
     def exportLiteral(self, outfile, level, name_='programmer'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.language is not None and 'language' not in already_processed:
-            already_processed.append('language')
+            already_processed.add('language')
             showIndent(outfile, level)
             outfile.write('language = "%s",\n' % (self.language,))
         if self.area is not None and 'area' not in already_processed:
-            already_processed.append('area')
+            already_processed.add('area')
             showIndent(outfile, level)
             outfile.write('area = "%s",\n' % (self.area,))
         if self.attrnegint is not None and 'attrnegint' not in already_processed:
-            already_processed.append('attrnegint')
+            already_processed.add('attrnegint')
             showIndent(outfile, level)
             outfile.write('attrnegint = %d,\n' % (self.attrnegint,))
         if self.attrposint is not None and 'attrposint' not in already_processed:
-            already_processed.append('attrposint')
+            already_processed.add('attrposint')
             showIndent(outfile, level)
             outfile.write('attrposint = %d,\n' % (self.attrposint,))
         if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed:
-            already_processed.append('attrnonnegint')
+            already_processed.add('attrnonnegint')
             showIndent(outfile, level)
             outfile.write('attrnonnegint = %d,\n' % (self.attrnonnegint,))
         if self.attrnonposint is not None and 'attrnonposint' not in already_processed:
-            already_processed.append('attrnonposint')
+            already_processed.add('attrnonposint')
             showIndent(outfile, level)
             outfile.write('attrnonposint = %d,\n' % (self.attrnonposint,))
         super(programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -1473,22 +1480,23 @@ class programmer(person):
             showIndent(outfile, level)
             outfile.write('elarraytypes=%s,\n' % quote_python(self.elarraytypes).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('language', node)
         if value is not None and 'language' not in already_processed:
-            already_processed.append('language')
+            already_processed.add('language')
             self.language = value
         value = find_attr_value_('area', node)
         if value is not None and 'area' not in already_processed:
-            already_processed.append('area')
+            already_processed.add('area')
             self.area = value
         value = find_attr_value_('attrnegint', node)
         if value is not None and 'attrnegint' not in already_processed:
-            already_processed.append('attrnegint')
+            already_processed.add('attrnegint')
             try:
                 self.attrnegint = int(value)
             except ValueError, exp:
@@ -1497,7 +1505,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid NegativeInteger')
         value = find_attr_value_('attrposint', node)
         if value is not None and 'attrposint' not in already_processed:
-            already_processed.append('attrposint')
+            already_processed.add('attrposint')
             try:
                 self.attrposint = int(value)
             except ValueError, exp:
@@ -1506,7 +1514,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid PositiveInteger')
         value = find_attr_value_('attrnonnegint', node)
         if value is not None and 'attrnonnegint' not in already_processed:
-            already_processed.append('attrnonnegint')
+            already_processed.add('attrnonnegint')
             try:
                 self.attrnonnegint = int(value)
             except ValueError, exp:
@@ -1515,7 +1523,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid NonNegativeInteger')
         value = find_attr_value_('attrnonposint', node)
         if value is not None and 'attrnonposint' not in already_processed:
-            already_processed.append('attrnonposint')
+            already_processed.add('attrnonposint')
             try:
                 self.attrnonposint = int(value)
             except ValueError, exp:
@@ -1524,7 +1532,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid NonPositiveInteger')
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
         super(programmer, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
@@ -1709,7 +1717,7 @@ class param(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='param')
         if self.hasContent_():
             outfile.write('>')
@@ -1720,22 +1728,22 @@ class param(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='param'):
         if self.semantic is not None and 'semantic' not in already_processed:
-            already_processed.append('semantic')
+            already_processed.add('semantic')
             outfile.write(' semantic=%s' % (self.gds_format_string(quote_attrib(self.semantic).encode(ExternalEncoding), input_name='semantic'), ))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             outfile.write(' name=%s' % (quote_attrib(self.name), ))
         if self.flow is not None and 'flow' not in already_processed:
-            already_processed.append('flow')
+            already_processed.add('flow')
             outfile.write(' flow=%s' % (quote_attrib(self.flow), ))
         if self.sid is not None and 'sid' not in already_processed:
-            already_processed.append('sid')
+            already_processed.add('sid')
             outfile.write(' sid=%s' % (quote_attrib(self.sid), ))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             outfile.write(' type=%s' % (self.gds_format_string(quote_attrib(self.type_).encode(ExternalEncoding), input_name='type'), ))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             outfile.write(' id=%s' % (self.gds_format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='param', fromsubclass_=False, pretty_print=True):
         pass
@@ -1748,40 +1756,42 @@ class param(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='param'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.semantic is not None and 'semantic' not in already_processed:
-            already_processed.append('semantic')
+            already_processed.add('semantic')
             showIndent(outfile, level)
             outfile.write('semantic = "%s",\n' % (self.semantic,))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             showIndent(outfile, level)
             outfile.write('name = "%s",\n' % (self.name,))
         if self.flow is not None and 'flow' not in already_processed:
-            already_processed.append('flow')
+            already_processed.add('flow')
             showIndent(outfile, level)
             outfile.write('flow = %s,\n' % (self.flow,))
         if self.sid is not None and 'sid' not in already_processed:
-            already_processed.append('sid')
+            already_processed.add('sid')
             showIndent(outfile, level)
             outfile.write('sid = "%s",\n' % (self.sid,))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             showIndent(outfile, level)
             outfile.write('type_ = "%s",\n' % (self.type_,))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             showIndent(outfile, level)
             outfile.write('id = "%s",\n' % (self.id,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -1789,28 +1799,28 @@ class param(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('semantic', node)
         if value is not None and 'semantic' not in already_processed:
-            already_processed.append('semantic')
+            already_processed.add('semantic')
             self.semantic = value
             self.semantic = ' '.join(self.semantic.split())
         value = find_attr_value_('name', node)
         if value is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             self.name = value
         value = find_attr_value_('flow', node)
         if value is not None and 'flow' not in already_processed:
-            already_processed.append('flow')
+            already_processed.add('flow')
             self.flow = value
         value = find_attr_value_('sid', node)
         if value is not None and 'sid' not in already_processed:
-            already_processed.append('sid')
+            already_processed.add('sid')
             self.sid = value
         value = find_attr_value_('type', node)
         if value is not None and 'type' not in already_processed:
-            already_processed.append('type')
+            already_processed.add('type')
             self.type_ = value
         value = find_attr_value_('id', node)
         if value is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             self.id = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -1891,7 +1901,7 @@ class python_programmer(programmer):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1903,7 +1913,7 @@ class python_programmer(programmer):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='python-programmer'):
         super(python_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer')
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='python-programmer', fromsubclass_=False, pretty_print=True):
         super(python_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
@@ -1924,12 +1934,13 @@ class python_programmer(programmer):
             return False
     def exportLiteral(self, outfile, level, name_='python-programmer'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             showIndent(outfile, level)
             outfile.write('nick_name = "%s",\n' % (self.nick_name,))
         super(python_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -1939,14 +1950,15 @@ class python_programmer(programmer):
             showIndent(outfile, level)
             outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('nick-name', node)
         if value is not None and 'nick-name' not in already_processed:
-            already_processed.append('nick-name')
+            already_processed.add('nick-name')
             self.nick_name = value
         super(python_programmer, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
@@ -2036,7 +2048,7 @@ class java_programmer(programmer):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2048,10 +2060,10 @@ class java_programmer(programmer):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='java-programmer'):
         super(java_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer')
         if self.status is not None and 'status' not in already_processed:
-            already_processed.append('status')
+            already_processed.add('status')
             outfile.write(' status=%s' % (self.gds_format_string(quote_attrib(self.status).encode(ExternalEncoding), input_name='status'), ))
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='java-programmer', fromsubclass_=False, pretty_print=True):
         super(java_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
@@ -2072,16 +2084,17 @@ class java_programmer(programmer):
             return False
     def exportLiteral(self, outfile, level, name_='java-programmer'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.status is not None and 'status' not in already_processed:
-            already_processed.append('status')
+            already_processed.add('status')
             showIndent(outfile, level)
             outfile.write('status = "%s",\n' % (self.status,))
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             showIndent(outfile, level)
             outfile.write('nick_name = "%s",\n' % (self.nick_name,))
         super(java_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -2091,18 +2104,19 @@ class java_programmer(programmer):
             showIndent(outfile, level)
             outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('status', node)
         if value is not None and 'status' not in already_processed:
-            already_processed.append('status')
+            already_processed.add('status')
             self.status = value
         value = find_attr_value_('nick-name', node)
         if value is not None and 'nick-name' not in already_processed:
-            already_processed.append('nick-name')
+            already_processed.add('nick-name')
             self.nick_name = value
         super(java_programmer, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
@@ -2195,7 +2209,7 @@ class agent(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='agent')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2234,7 +2248,8 @@ class agent(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='agent'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2256,7 +2271,8 @@ class agent(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -2367,7 +2383,7 @@ class special_agent(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='special-agent')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2406,7 +2422,8 @@ class special_agent(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='special-agent'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2428,7 +2445,8 @@ class special_agent(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -2566,7 +2584,7 @@ class booster(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='booster')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2617,7 +2635,8 @@ class booster(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='booster'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2666,7 +2685,8 @@ class booster(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -2798,7 +2818,7 @@ class info(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='info')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2808,13 +2828,13 @@ class info(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='info'):
         if self.rating is not None and 'rating' not in already_processed:
-            already_processed.append('rating')
+            already_processed.add('rating')
             outfile.write(' rating="%s"' % self.gds_format_float(self.rating, input_name='rating'))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             outfile.write(' type="%s"' % self.gds_format_integer(self.type_, input_name='type'))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             outfile.write(' name=%s' % (self.gds_format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='info', fromsubclass_=False, pretty_print=True):
         pass
@@ -2827,47 +2847,49 @@ class info(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='info'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.rating is not None and 'rating' not in already_processed:
-            already_processed.append('rating')
+            already_processed.add('rating')
             showIndent(outfile, level)
             outfile.write('rating = %f,\n' % (self.rating,))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             showIndent(outfile, level)
             outfile.write('type_ = %d,\n' % (self.type_,))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             showIndent(outfile, level)
             outfile.write('name = "%s",\n' % (self.name,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('rating', node)
         if value is not None and 'rating' not in already_processed:
-            already_processed.append('rating')
+            already_processed.add('rating')
             try:
                 self.rating = float(value)
             except ValueError, exp:
                 raise ValueError('Bad float/double attribute (rating): %s' % exp)
         value = find_attr_value_('type', node)
         if value is not None and 'type' not in already_processed:
-            already_processed.append('type')
+            already_processed.add('type')
             try:
                 self.type_ = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('name', node)
         if value is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             self.name = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -2947,7 +2969,7 @@ class client_handlerType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='client-handlerType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2979,7 +3001,8 @@ class client_handlerType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='client-handlerType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2992,7 +3015,8 @@ class client_handlerType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('refid=%d,\n' % self.refid)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/out2_sup.py b/tests/out2_sup.py
index e27c95b5710fb4b53565cd9c73b9bf036c6ef3a1..c9105a9eb52d1c05690638b039511f056c4e691a 100644
--- a/tests/out2_sup.py
+++ b/tests/out2_sup.py
@@ -542,7 +542,7 @@ class people(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='people')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -581,7 +581,8 @@ class people(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='people'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -648,7 +649,8 @@ class people(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -772,7 +774,7 @@ class comments(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='comments')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -797,7 +799,8 @@ class comments(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='comments'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
@@ -813,7 +816,8 @@ class comments(GeneratedsSuper):
         outfile.write('],\n')
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         if node.text is not None:
             obj_ = self.mixedclass_(MixedContainer.CategoryText,
@@ -964,7 +968,7 @@ class person(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='person')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -975,22 +979,22 @@ class person(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='person'):
         if self.vegetable is not None and 'vegetable' not in already_processed:
-            already_processed.append('vegetable')
+            already_processed.add('vegetable')
             outfile.write(' vegetable=%s' % (self.gds_format_string(quote_attrib(self.vegetable).encode(ExternalEncoding), input_name='vegetable'), ))
         if self.fruit is not None and 'fruit' not in already_processed:
-            already_processed.append('fruit')
+            already_processed.add('fruit')
             outfile.write(' fruit=%s' % (self.gds_format_string(quote_attrib(self.fruit).encode(ExternalEncoding), input_name='fruit'), ))
         if self.ratio is not None and 'ratio' not in already_processed:
-            already_processed.append('ratio')
+            already_processed.add('ratio')
             outfile.write(' ratio="%s"' % self.gds_format_float(self.ratio, input_name='ratio'))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
         if self.value is not None and 'value' not in already_processed:
-            already_processed.append('value')
+            already_processed.add('value')
             outfile.write(' value=%s' % (self.gds_format_string(quote_attrib(self.value).encode(ExternalEncoding), input_name='value'), ))
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
     def exportChildren(self, outfile, level, namespace_='', name_='person', fromsubclass_=False, pretty_print=True):
@@ -1028,28 +1032,29 @@ class person(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='person'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.vegetable is not None and 'vegetable' not in already_processed:
-            already_processed.append('vegetable')
+            already_processed.add('vegetable')
             showIndent(outfile, level)
             outfile.write('vegetable = "%s",\n' % (self.vegetable,))
         if self.fruit is not None and 'fruit' not in already_processed:
-            already_processed.append('fruit')
+            already_processed.add('fruit')
             showIndent(outfile, level)
             outfile.write('fruit = "%s",\n' % (self.fruit,))
         if self.ratio is not None and 'ratio' not in already_processed:
-            already_processed.append('ratio')
+            already_processed.add('ratio')
             showIndent(outfile, level)
             outfile.write('ratio = %f,\n' % (self.ratio,))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             showIndent(outfile, level)
             outfile.write('id = %d,\n' % (self.id,))
         if self.value is not None and 'value' not in already_processed:
-            already_processed.append('value')
+            already_processed.add('value')
             showIndent(outfile, level)
             outfile.write('value = "%s",\n' % (self.value,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -1096,40 +1101,41 @@ class person(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('description=%s,\n' % quote_python(self.description).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('vegetable', node)
         if value is not None and 'vegetable' not in already_processed:
-            already_processed.append('vegetable')
+            already_processed.add('vegetable')
             self.vegetable = value
         value = find_attr_value_('fruit', node)
         if value is not None and 'fruit' not in already_processed:
-            already_processed.append('fruit')
+            already_processed.add('fruit')
             self.fruit = value
         value = find_attr_value_('ratio', node)
         if value is not None and 'ratio' not in already_processed:
-            already_processed.append('ratio')
+            already_processed.add('ratio')
             try:
                 self.ratio = float(value)
             except ValueError, exp:
                 raise ValueError('Bad float/double attribute (ratio): %s' % exp)
         value = find_attr_value_('id', node)
         if value is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             try:
                 self.id = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('value', node)
         if value is not None and 'value' not in already_processed:
-            already_processed.append('value')
+            already_processed.add('value')
             self.value = value
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'name':
@@ -1307,7 +1313,7 @@ class programmer(person):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='programmer')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1319,25 +1325,25 @@ class programmer(person):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='programmer'):
         super(programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='programmer')
         if self.language is not None and 'language' not in already_processed:
-            already_processed.append('language')
+            already_processed.add('language')
             outfile.write(' language=%s' % (self.gds_format_string(quote_attrib(self.language).encode(ExternalEncoding), input_name='language'), ))
         if self.area is not None and 'area' not in already_processed:
-            already_processed.append('area')
+            already_processed.add('area')
             outfile.write(' area=%s' % (self.gds_format_string(quote_attrib(self.area).encode(ExternalEncoding), input_name='area'), ))
         if self.attrnegint is not None and 'attrnegint' not in already_processed:
-            already_processed.append('attrnegint')
+            already_processed.add('attrnegint')
             outfile.write(' attrnegint="%s"' % self.gds_format_integer(self.attrnegint, input_name='attrnegint'))
         if self.attrposint is not None and 'attrposint' not in already_processed:
-            already_processed.append('attrposint')
+            already_processed.add('attrposint')
             outfile.write(' attrposint="%s"' % self.gds_format_integer(self.attrposint, input_name='attrposint'))
         if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed:
-            already_processed.append('attrnonnegint')
+            already_processed.add('attrnonnegint')
             outfile.write(' attrnonnegint="%s"' % self.gds_format_integer(self.attrnonnegint, input_name='attrnonnegint'))
         if self.attrnonposint is not None and 'attrnonposint' not in already_processed:
-            already_processed.append('attrnonposint')
+            already_processed.add('attrnonposint')
             outfile.write(' attrnonposint="%s"' % self.gds_format_integer(self.attrnonposint, input_name='attrnonposint'))
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
     def exportChildren(self, outfile, level, namespace_='', name_='programmer', fromsubclass_=False, pretty_print=True):
@@ -1402,32 +1408,33 @@ class programmer(person):
             return False
     def exportLiteral(self, outfile, level, name_='programmer'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.language is not None and 'language' not in already_processed:
-            already_processed.append('language')
+            already_processed.add('language')
             showIndent(outfile, level)
             outfile.write('language = "%s",\n' % (self.language,))
         if self.area is not None and 'area' not in already_processed:
-            already_processed.append('area')
+            already_processed.add('area')
             showIndent(outfile, level)
             outfile.write('area = "%s",\n' % (self.area,))
         if self.attrnegint is not None and 'attrnegint' not in already_processed:
-            already_processed.append('attrnegint')
+            already_processed.add('attrnegint')
             showIndent(outfile, level)
             outfile.write('attrnegint = %d,\n' % (self.attrnegint,))
         if self.attrposint is not None and 'attrposint' not in already_processed:
-            already_processed.append('attrposint')
+            already_processed.add('attrposint')
             showIndent(outfile, level)
             outfile.write('attrposint = %d,\n' % (self.attrposint,))
         if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed:
-            already_processed.append('attrnonnegint')
+            already_processed.add('attrnonnegint')
             showIndent(outfile, level)
             outfile.write('attrnonnegint = %d,\n' % (self.attrnonnegint,))
         if self.attrnonposint is not None and 'attrnonposint' not in already_processed:
-            already_processed.append('attrnonposint')
+            already_processed.add('attrnonposint')
             showIndent(outfile, level)
             outfile.write('attrnonposint = %d,\n' % (self.attrnonposint,))
         super(programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -1473,22 +1480,23 @@ class programmer(person):
             showIndent(outfile, level)
             outfile.write('elarraytypes=%s,\n' % quote_python(self.elarraytypes).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('language', node)
         if value is not None and 'language' not in already_processed:
-            already_processed.append('language')
+            already_processed.add('language')
             self.language = value
         value = find_attr_value_('area', node)
         if value is not None and 'area' not in already_processed:
-            already_processed.append('area')
+            already_processed.add('area')
             self.area = value
         value = find_attr_value_('attrnegint', node)
         if value is not None and 'attrnegint' not in already_processed:
-            already_processed.append('attrnegint')
+            already_processed.add('attrnegint')
             try:
                 self.attrnegint = int(value)
             except ValueError, exp:
@@ -1497,7 +1505,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid NegativeInteger')
         value = find_attr_value_('attrposint', node)
         if value is not None and 'attrposint' not in already_processed:
-            already_processed.append('attrposint')
+            already_processed.add('attrposint')
             try:
                 self.attrposint = int(value)
             except ValueError, exp:
@@ -1506,7 +1514,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid PositiveInteger')
         value = find_attr_value_('attrnonnegint', node)
         if value is not None and 'attrnonnegint' not in already_processed:
-            already_processed.append('attrnonnegint')
+            already_processed.add('attrnonnegint')
             try:
                 self.attrnonnegint = int(value)
             except ValueError, exp:
@@ -1515,7 +1523,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid NonNegativeInteger')
         value = find_attr_value_('attrnonposint', node)
         if value is not None and 'attrnonposint' not in already_processed:
-            already_processed.append('attrnonposint')
+            already_processed.add('attrnonposint')
             try:
                 self.attrnonposint = int(value)
             except ValueError, exp:
@@ -1524,7 +1532,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid NonPositiveInteger')
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
         super(programmer, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
@@ -1709,7 +1717,7 @@ class param(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='param')
         if self.hasContent_():
             outfile.write('>')
@@ -1720,22 +1728,22 @@ class param(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='param'):
         if self.semantic is not None and 'semantic' not in already_processed:
-            already_processed.append('semantic')
+            already_processed.add('semantic')
             outfile.write(' semantic=%s' % (self.gds_format_string(quote_attrib(self.semantic).encode(ExternalEncoding), input_name='semantic'), ))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             outfile.write(' name=%s' % (quote_attrib(self.name), ))
         if self.flow is not None and 'flow' not in already_processed:
-            already_processed.append('flow')
+            already_processed.add('flow')
             outfile.write(' flow=%s' % (quote_attrib(self.flow), ))
         if self.sid is not None and 'sid' not in already_processed:
-            already_processed.append('sid')
+            already_processed.add('sid')
             outfile.write(' sid=%s' % (quote_attrib(self.sid), ))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             outfile.write(' type=%s' % (self.gds_format_string(quote_attrib(self.type_).encode(ExternalEncoding), input_name='type'), ))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             outfile.write(' id=%s' % (self.gds_format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='param', fromsubclass_=False, pretty_print=True):
         pass
@@ -1748,40 +1756,42 @@ class param(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='param'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.semantic is not None and 'semantic' not in already_processed:
-            already_processed.append('semantic')
+            already_processed.add('semantic')
             showIndent(outfile, level)
             outfile.write('semantic = "%s",\n' % (self.semantic,))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             showIndent(outfile, level)
             outfile.write('name = "%s",\n' % (self.name,))
         if self.flow is not None and 'flow' not in already_processed:
-            already_processed.append('flow')
+            already_processed.add('flow')
             showIndent(outfile, level)
             outfile.write('flow = %s,\n' % (self.flow,))
         if self.sid is not None and 'sid' not in already_processed:
-            already_processed.append('sid')
+            already_processed.add('sid')
             showIndent(outfile, level)
             outfile.write('sid = "%s",\n' % (self.sid,))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             showIndent(outfile, level)
             outfile.write('type_ = "%s",\n' % (self.type_,))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             showIndent(outfile, level)
             outfile.write('id = "%s",\n' % (self.id,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -1789,28 +1799,28 @@ class param(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('semantic', node)
         if value is not None and 'semantic' not in already_processed:
-            already_processed.append('semantic')
+            already_processed.add('semantic')
             self.semantic = value
             self.semantic = ' '.join(self.semantic.split())
         value = find_attr_value_('name', node)
         if value is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             self.name = value
         value = find_attr_value_('flow', node)
         if value is not None and 'flow' not in already_processed:
-            already_processed.append('flow')
+            already_processed.add('flow')
             self.flow = value
         value = find_attr_value_('sid', node)
         if value is not None and 'sid' not in already_processed:
-            already_processed.append('sid')
+            already_processed.add('sid')
             self.sid = value
         value = find_attr_value_('type', node)
         if value is not None and 'type' not in already_processed:
-            already_processed.append('type')
+            already_processed.add('type')
             self.type_ = value
         value = find_attr_value_('id', node)
         if value is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             self.id = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -1891,7 +1901,7 @@ class python_programmer(programmer):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1903,7 +1913,7 @@ class python_programmer(programmer):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='python-programmer'):
         super(python_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer')
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='python-programmer', fromsubclass_=False, pretty_print=True):
         super(python_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
@@ -1924,12 +1934,13 @@ class python_programmer(programmer):
             return False
     def exportLiteral(self, outfile, level, name_='python-programmer'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             showIndent(outfile, level)
             outfile.write('nick_name = "%s",\n' % (self.nick_name,))
         super(python_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -1939,14 +1950,15 @@ class python_programmer(programmer):
             showIndent(outfile, level)
             outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('nick-name', node)
         if value is not None and 'nick-name' not in already_processed:
-            already_processed.append('nick-name')
+            already_processed.add('nick-name')
             self.nick_name = value
         super(python_programmer, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
@@ -2036,7 +2048,7 @@ class java_programmer(programmer):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2048,10 +2060,10 @@ class java_programmer(programmer):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='java-programmer'):
         super(java_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer')
         if self.status is not None and 'status' not in already_processed:
-            already_processed.append('status')
+            already_processed.add('status')
             outfile.write(' status=%s' % (self.gds_format_string(quote_attrib(self.status).encode(ExternalEncoding), input_name='status'), ))
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='java-programmer', fromsubclass_=False, pretty_print=True):
         super(java_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
@@ -2072,16 +2084,17 @@ class java_programmer(programmer):
             return False
     def exportLiteral(self, outfile, level, name_='java-programmer'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.status is not None and 'status' not in already_processed:
-            already_processed.append('status')
+            already_processed.add('status')
             showIndent(outfile, level)
             outfile.write('status = "%s",\n' % (self.status,))
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             showIndent(outfile, level)
             outfile.write('nick_name = "%s",\n' % (self.nick_name,))
         super(java_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -2091,18 +2104,19 @@ class java_programmer(programmer):
             showIndent(outfile, level)
             outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('status', node)
         if value is not None and 'status' not in already_processed:
-            already_processed.append('status')
+            already_processed.add('status')
             self.status = value
         value = find_attr_value_('nick-name', node)
         if value is not None and 'nick-name' not in already_processed:
-            already_processed.append('nick-name')
+            already_processed.add('nick-name')
             self.nick_name = value
         super(java_programmer, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
@@ -2195,7 +2209,7 @@ class agent(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='agent')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2234,7 +2248,8 @@ class agent(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='agent'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2256,7 +2271,8 @@ class agent(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -2367,7 +2383,7 @@ class special_agent(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='special-agent')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2406,7 +2422,8 @@ class special_agent(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='special-agent'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2428,7 +2445,8 @@ class special_agent(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -2566,7 +2584,7 @@ class booster(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='booster')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2617,7 +2635,8 @@ class booster(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='booster'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2666,7 +2685,8 @@ class booster(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -2798,7 +2818,7 @@ class info(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='info')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2808,13 +2828,13 @@ class info(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='info'):
         if self.rating is not None and 'rating' not in already_processed:
-            already_processed.append('rating')
+            already_processed.add('rating')
             outfile.write(' rating="%s"' % self.gds_format_float(self.rating, input_name='rating'))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             outfile.write(' type="%s"' % self.gds_format_integer(self.type_, input_name='type'))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             outfile.write(' name=%s' % (self.gds_format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='info', fromsubclass_=False, pretty_print=True):
         pass
@@ -2827,47 +2847,49 @@ class info(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='info'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.rating is not None and 'rating' not in already_processed:
-            already_processed.append('rating')
+            already_processed.add('rating')
             showIndent(outfile, level)
             outfile.write('rating = %f,\n' % (self.rating,))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             showIndent(outfile, level)
             outfile.write('type_ = %d,\n' % (self.type_,))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             showIndent(outfile, level)
             outfile.write('name = "%s",\n' % (self.name,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('rating', node)
         if value is not None and 'rating' not in already_processed:
-            already_processed.append('rating')
+            already_processed.add('rating')
             try:
                 self.rating = float(value)
             except ValueError, exp:
                 raise ValueError('Bad float/double attribute (rating): %s' % exp)
         value = find_attr_value_('type', node)
         if value is not None and 'type' not in already_processed:
-            already_processed.append('type')
+            already_processed.add('type')
             try:
                 self.type_ = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('name', node)
         if value is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             self.name = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -2947,7 +2969,7 @@ class client_handlerType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='client-handlerType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2979,7 +3001,8 @@ class client_handlerType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='client-handlerType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2992,7 +3015,8 @@ class client_handlerType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('refid=%d,\n' % self.refid)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/people_procincl1_sup.py b/tests/people_procincl1_sup.py
index c569a6870f3c507a661b9f98053234c23dea4b63..996b7af96158cae1ad4b47b5f15de0712efde8e3 100644
--- a/tests/people_procincl1_sup.py
+++ b/tests/people_procincl1_sup.py
@@ -552,7 +552,7 @@ class people(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='people')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -594,7 +594,8 @@ class people(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='people'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -673,7 +674,8 @@ class people(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -759,7 +761,7 @@ class comments(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='comments')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -785,7 +787,8 @@ class comments(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='comments'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
@@ -807,7 +810,8 @@ class comments(GeneratedsSuper):
         outfile.write('],\n')
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         if node.text is not None:
             obj_ = self.mixedclass_(MixedContainer.CategoryText,
@@ -920,7 +924,7 @@ class person(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='person')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -931,22 +935,22 @@ class person(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='person'):
         if self.vegetable is not None and 'vegetable' not in already_processed:
-            already_processed.append('vegetable')
+            already_processed.add('vegetable')
             outfile.write(' vegetable=%s' % (self.gds_format_string(quote_attrib(self.vegetable).encode(ExternalEncoding), input_name='vegetable'), ))
         if self.fruit is not None and 'fruit' not in already_processed:
-            already_processed.append('fruit')
+            already_processed.add('fruit')
             outfile.write(' fruit=%s' % (self.gds_format_string(quote_attrib(self.fruit).encode(ExternalEncoding), input_name='fruit'), ))
         if self.ratio is not None and 'ratio' not in already_processed:
-            already_processed.append('ratio')
+            already_processed.add('ratio')
             outfile.write(' ratio="%s"' % self.gds_format_float(self.ratio, input_name='ratio'))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
         if self.value is not None and 'value' not in already_processed:
-            already_processed.append('value')
+            already_processed.add('value')
             outfile.write(' value=%s' % (self.gds_format_string(quote_attrib(self.value).encode(ExternalEncoding), input_name='value'), ))
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
     def exportChildren(self, outfile, level, namespace_='', name_='person', fromsubclass_=False, pretty_print=True):
@@ -984,28 +988,29 @@ class person(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='person'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.vegetable is not None and 'vegetable' not in already_processed:
-            already_processed.append('vegetable')
+            already_processed.add('vegetable')
             showIndent(outfile, level)
             outfile.write('vegetable = "%s",\n' % (self.vegetable,))
         if self.fruit is not None and 'fruit' not in already_processed:
-            already_processed.append('fruit')
+            already_processed.add('fruit')
             showIndent(outfile, level)
             outfile.write('fruit = "%s",\n' % (self.fruit,))
         if self.ratio is not None and 'ratio' not in already_processed:
-            already_processed.append('ratio')
+            already_processed.add('ratio')
             showIndent(outfile, level)
             outfile.write('ratio = %f,\n' % (self.ratio,))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             showIndent(outfile, level)
             outfile.write('id = %d,\n' % (self.id,))
         if self.value is not None and 'value' not in already_processed:
-            already_processed.append('value')
+            already_processed.add('value')
             showIndent(outfile, level)
             outfile.write('value = "%s",\n' % (self.value,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -1052,40 +1057,41 @@ class person(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('description=%s,\n' % quote_python(self.description).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('vegetable', node)
         if value is not None and 'vegetable' not in already_processed:
-            already_processed.append('vegetable')
+            already_processed.add('vegetable')
             self.vegetable = value
         value = find_attr_value_('fruit', node)
         if value is not None and 'fruit' not in already_processed:
-            already_processed.append('fruit')
+            already_processed.add('fruit')
             self.fruit = value
         value = find_attr_value_('ratio', node)
         if value is not None and 'ratio' not in already_processed:
-            already_processed.append('ratio')
+            already_processed.add('ratio')
             try:
                 self.ratio = float(value)
             except ValueError, exp:
                 raise ValueError('Bad float/double attribute (ratio): %s' % exp)
         value = find_attr_value_('id', node)
         if value is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             try:
                 self.id = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('value', node)
         if value is not None and 'value' not in already_processed:
-            already_processed.append('value')
+            already_processed.add('value')
             self.value = value
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'name':
@@ -1140,7 +1146,7 @@ class specialperson(person):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='specialperson')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1162,7 +1168,8 @@ class specialperson(person):
             return False
     def exportLiteral(self, outfile, level, name_='specialperson'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -1170,7 +1177,8 @@ class specialperson(person):
     def exportLiteralChildren(self, outfile, level, name_):
         super(specialperson, self).exportLiteralChildren(outfile, level, name_)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -1231,7 +1239,7 @@ class param(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='param')
         if self.hasContent_():
             outfile.write('>')
@@ -1242,22 +1250,22 @@ class param(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='param'):
         if self.semantic is not None and 'semantic' not in already_processed:
-            already_processed.append('semantic')
+            already_processed.add('semantic')
             outfile.write(' semantic=%s' % (self.gds_format_string(quote_attrib(self.semantic).encode(ExternalEncoding), input_name='semantic'), ))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             outfile.write(' name=%s' % (quote_attrib(self.name), ))
         if self.flow is not None and 'flow' not in already_processed:
-            already_processed.append('flow')
+            already_processed.add('flow')
             outfile.write(' flow=%s' % (quote_attrib(self.flow), ))
         if self.sid is not None and 'sid' not in already_processed:
-            already_processed.append('sid')
+            already_processed.add('sid')
             outfile.write(' sid=%s' % (quote_attrib(self.sid), ))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             outfile.write(' type=%s' % (self.gds_format_string(quote_attrib(self.type_).encode(ExternalEncoding), input_name='type'), ))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             outfile.write(' id=%s' % (self.gds_format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='param', fromsubclass_=False, pretty_print=True):
         pass
@@ -1270,40 +1278,42 @@ class param(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='param'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.semantic is not None and 'semantic' not in already_processed:
-            already_processed.append('semantic')
+            already_processed.add('semantic')
             showIndent(outfile, level)
             outfile.write('semantic = "%s",\n' % (self.semantic,))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             showIndent(outfile, level)
             outfile.write('name = "%s",\n' % (self.name,))
         if self.flow is not None and 'flow' not in already_processed:
-            already_processed.append('flow')
+            already_processed.add('flow')
             showIndent(outfile, level)
             outfile.write('flow = %s,\n' % (self.flow,))
         if self.sid is not None and 'sid' not in already_processed:
-            already_processed.append('sid')
+            already_processed.add('sid')
             showIndent(outfile, level)
             outfile.write('sid = "%s",\n' % (self.sid,))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             showIndent(outfile, level)
             outfile.write('type_ = "%s",\n' % (self.type_,))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             showIndent(outfile, level)
             outfile.write('id = "%s",\n' % (self.id,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -1311,28 +1321,28 @@ class param(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('semantic', node)
         if value is not None and 'semantic' not in already_processed:
-            already_processed.append('semantic')
+            already_processed.add('semantic')
             self.semantic = value
             self.semantic = ' '.join(self.semantic.split())
         value = find_attr_value_('name', node)
         if value is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             self.name = value
         value = find_attr_value_('flow', node)
         if value is not None and 'flow' not in already_processed:
-            already_processed.append('flow')
+            already_processed.add('flow')
             self.flow = value
         value = find_attr_value_('sid', node)
         if value is not None and 'sid' not in already_processed:
-            already_processed.append('sid')
+            already_processed.add('sid')
             self.sid = value
         value = find_attr_value_('type', node)
         if value is not None and 'type' not in already_processed:
-            already_processed.append('type')
+            already_processed.add('type')
             self.type_ = value
         value = find_attr_value_('id', node)
         if value is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             self.id = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -1383,7 +1393,7 @@ class agent(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='agent')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1425,7 +1435,8 @@ class agent(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='agent'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -1459,7 +1470,8 @@ class agent(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -1544,7 +1556,7 @@ class special_agent(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='special-agent')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1583,7 +1595,8 @@ class special_agent(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='special-agent'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -1605,7 +1618,8 @@ class special_agent(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -1701,7 +1715,7 @@ class booster(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='booster')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1712,7 +1726,7 @@ class booster(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='booster'):
         if self.member_id is not None and 'member_id' not in already_processed:
-            already_processed.append('member_id')
+            already_processed.add('member_id')
             outfile.write(' member-id=%s' % (self.gds_format_string(quote_attrib(self.member_id).encode(ExternalEncoding), input_name='member-id'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='booster', fromsubclass_=False, pretty_print=True):
         if pretty_print:
@@ -1754,12 +1768,13 @@ class booster(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='booster'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.member_id is not None and 'member_id' not in already_processed:
-            already_processed.append('member_id')
+            already_processed.add('member_id')
             showIndent(outfile, level)
             outfile.write('member_id = "%s",\n' % (self.member_id,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -1806,14 +1821,15 @@ class booster(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('member-id', node)
         if value is not None and 'member-id' not in already_processed:
-            already_processed.append('member-id')
+            already_processed.add('member-id')
             self.member_id = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'firstname':
@@ -1895,7 +1911,7 @@ class info(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='info')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1905,13 +1921,13 @@ class info(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='info'):
         if self.rating is not None and 'rating' not in already_processed:
-            already_processed.append('rating')
+            already_processed.add('rating')
             outfile.write(' rating="%s"' % self.gds_format_float(self.rating, input_name='rating'))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             outfile.write(' type="%s"' % self.gds_format_integer(self.type_, input_name='type'))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             outfile.write(' name=%s' % (self.gds_format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='info', fromsubclass_=False, pretty_print=True):
         pass
@@ -1924,47 +1940,49 @@ class info(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='info'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.rating is not None and 'rating' not in already_processed:
-            already_processed.append('rating')
+            already_processed.add('rating')
             showIndent(outfile, level)
             outfile.write('rating = %f,\n' % (self.rating,))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             showIndent(outfile, level)
             outfile.write('type_ = %d,\n' % (self.type_,))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             showIndent(outfile, level)
             outfile.write('name = "%s",\n' % (self.name,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('rating', node)
         if value is not None and 'rating' not in already_processed:
-            already_processed.append('rating')
+            already_processed.add('rating')
             try:
                 self.rating = float(value)
             except ValueError, exp:
                 raise ValueError('Bad float/double attribute (rating): %s' % exp)
         value = find_attr_value_('type', node)
         if value is not None and 'type' not in already_processed:
-            already_processed.append('type')
+            already_processed.add('type')
             try:
                 self.type_ = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('name', node)
         if value is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             self.name = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -1997,7 +2015,7 @@ class vehicle(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='vehicle')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2008,7 +2026,7 @@ class vehicle(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='vehicle'):
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
         pass
@@ -2029,7 +2047,8 @@ class vehicle(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='vehicle'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2039,14 +2058,15 @@ class vehicle(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('wheelcount=%d,\n' % self.wheelcount)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'wheelcount':
@@ -2084,7 +2104,7 @@ class automobile(vehicle):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='automobile')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2114,7 +2134,8 @@ class automobile(vehicle):
             return False
     def exportLiteral(self, outfile, level, name_='automobile'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2125,7 +2146,8 @@ class automobile(vehicle):
             showIndent(outfile, level)
             outfile.write('drivername=%s,\n' % quote_python(self.drivername).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -2164,7 +2186,7 @@ class airplane(vehicle):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='airplane')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2194,7 +2216,8 @@ class airplane(vehicle):
             return False
     def exportLiteral(self, outfile, level, name_='airplane'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2205,7 +2228,8 @@ class airplane(vehicle):
             showIndent(outfile, level)
             outfile.write('pilotname=%s,\n' % quote_python(self.pilotname).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -2316,7 +2340,7 @@ class programmer(person):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='programmer')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2328,25 +2352,25 @@ class programmer(person):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='programmer'):
         super(programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='programmer')
         if self.language is not None and 'language' not in already_processed:
-            already_processed.append('language')
+            already_processed.add('language')
             outfile.write(' language=%s' % (self.gds_format_string(quote_attrib(self.language).encode(ExternalEncoding), input_name='language'), ))
         if self.area is not None and 'area' not in already_processed:
-            already_processed.append('area')
+            already_processed.add('area')
             outfile.write(' area=%s' % (self.gds_format_string(quote_attrib(self.area).encode(ExternalEncoding), input_name='area'), ))
         if self.attrnegint is not None and 'attrnegint' not in already_processed:
-            already_processed.append('attrnegint')
+            already_processed.add('attrnegint')
             outfile.write(' attrnegint="%s"' % self.gds_format_integer(self.attrnegint, input_name='attrnegint'))
         if self.attrposint is not None and 'attrposint' not in already_processed:
-            already_processed.append('attrposint')
+            already_processed.add('attrposint')
             outfile.write(' attrposint="%s"' % self.gds_format_integer(self.attrposint, input_name='attrposint'))
         if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed:
-            already_processed.append('attrnonnegint')
+            already_processed.add('attrnonnegint')
             outfile.write(' attrnonnegint="%s"' % self.gds_format_integer(self.attrnonnegint, input_name='attrnonnegint'))
         if self.attrnonposint is not None and 'attrnonposint' not in already_processed:
-            already_processed.append('attrnonposint')
+            already_processed.add('attrnonposint')
             outfile.write(' attrnonposint="%s"' % self.gds_format_integer(self.attrnonposint, input_name='attrnonposint'))
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
     def exportChildren(self, outfile, level, namespace_='', name_='programmer', fromsubclass_=False, pretty_print=True):
@@ -2407,32 +2431,33 @@ class programmer(person):
             return False
     def exportLiteral(self, outfile, level, name_='programmer'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.language is not None and 'language' not in already_processed:
-            already_processed.append('language')
+            already_processed.add('language')
             showIndent(outfile, level)
             outfile.write('language = "%s",\n' % (self.language,))
         if self.area is not None and 'area' not in already_processed:
-            already_processed.append('area')
+            already_processed.add('area')
             showIndent(outfile, level)
             outfile.write('area = "%s",\n' % (self.area,))
         if self.attrnegint is not None and 'attrnegint' not in already_processed:
-            already_processed.append('attrnegint')
+            already_processed.add('attrnegint')
             showIndent(outfile, level)
             outfile.write('attrnegint = %d,\n' % (self.attrnegint,))
         if self.attrposint is not None and 'attrposint' not in already_processed:
-            already_processed.append('attrposint')
+            already_processed.add('attrposint')
             showIndent(outfile, level)
             outfile.write('attrposint = %d,\n' % (self.attrposint,))
         if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed:
-            already_processed.append('attrnonnegint')
+            already_processed.add('attrnonnegint')
             showIndent(outfile, level)
             outfile.write('attrnonnegint = %d,\n' % (self.attrnonnegint,))
         if self.attrnonposint is not None and 'attrnonposint' not in already_processed:
-            already_processed.append('attrnonposint')
+            already_processed.add('attrnonposint')
             showIndent(outfile, level)
             outfile.write('attrnonposint = %d,\n' % (self.attrnonposint,))
         super(programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -2475,22 +2500,23 @@ class programmer(person):
             showIndent(outfile, level)
             outfile.write('elarraytypes=%s,\n' % quote_python(self.elarraytypes).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('language', node)
         if value is not None and 'language' not in already_processed:
-            already_processed.append('language')
+            already_processed.add('language')
             self.language = value
         value = find_attr_value_('area', node)
         if value is not None and 'area' not in already_processed:
-            already_processed.append('area')
+            already_processed.add('area')
             self.area = value
         value = find_attr_value_('attrnegint', node)
         if value is not None and 'attrnegint' not in already_processed:
-            already_processed.append('attrnegint')
+            already_processed.add('attrnegint')
             try:
                 self.attrnegint = int(value)
             except ValueError, exp:
@@ -2499,7 +2525,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid NegativeInteger')
         value = find_attr_value_('attrposint', node)
         if value is not None and 'attrposint' not in already_processed:
-            already_processed.append('attrposint')
+            already_processed.add('attrposint')
             try:
                 self.attrposint = int(value)
             except ValueError, exp:
@@ -2508,7 +2534,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid PositiveInteger')
         value = find_attr_value_('attrnonnegint', node)
         if value is not None and 'attrnonnegint' not in already_processed:
-            already_processed.append('attrnonnegint')
+            already_processed.add('attrnonnegint')
             try:
                 self.attrnonnegint = int(value)
             except ValueError, exp:
@@ -2517,7 +2543,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid NonNegativeInteger')
         value = find_attr_value_('attrnonposint', node)
         if value is not None and 'attrnonposint' not in already_processed:
-            already_processed.append('attrnonposint')
+            already_processed.add('attrnonposint')
             try:
                 self.attrnonposint = int(value)
             except ValueError, exp:
@@ -2526,7 +2552,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid NonPositiveInteger')
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
         super(programmer, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
@@ -2639,7 +2665,7 @@ class client_handlerType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='client-handlerType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2671,7 +2697,8 @@ class client_handlerType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='client-handlerType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2684,7 +2711,8 @@ class client_handlerType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('refid=%d,\n' % self.refid)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -2741,7 +2769,7 @@ class java_programmer(programmer):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2753,10 +2781,10 @@ class java_programmer(programmer):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='java-programmer'):
         super(java_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer')
         if self.status is not None and 'status' not in already_processed:
-            already_processed.append('status')
+            already_processed.add('status')
             outfile.write(' status=%s' % (self.gds_format_string(quote_attrib(self.status).encode(ExternalEncoding), input_name='status'), ))
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='java-programmer', fromsubclass_=False, pretty_print=True):
         super(java_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
@@ -2777,16 +2805,17 @@ class java_programmer(programmer):
             return False
     def exportLiteral(self, outfile, level, name_='java-programmer'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.status is not None and 'status' not in already_processed:
-            already_processed.append('status')
+            already_processed.add('status')
             showIndent(outfile, level)
             outfile.write('status = "%s",\n' % (self.status,))
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             showIndent(outfile, level)
             outfile.write('nick_name = "%s",\n' % (self.nick_name,))
         super(java_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -2796,18 +2825,19 @@ class java_programmer(programmer):
             showIndent(outfile, level)
             outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('status', node)
         if value is not None and 'status' not in already_processed:
-            already_processed.append('status')
+            already_processed.add('status')
             self.status = value
         value = find_attr_value_('nick-name', node)
         if value is not None and 'nick-name' not in already_processed:
-            already_processed.append('nick-name')
+            already_processed.add('nick-name')
             self.nick_name = value
         super(java_programmer, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
@@ -2849,7 +2879,7 @@ class python_programmer(programmer):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2861,7 +2891,7 @@ class python_programmer(programmer):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='python-programmer'):
         super(python_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer')
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='python-programmer', fromsubclass_=False, pretty_print=True):
         super(python_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
@@ -2882,12 +2912,13 @@ class python_programmer(programmer):
             return False
     def exportLiteral(self, outfile, level, name_='python-programmer'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             showIndent(outfile, level)
             outfile.write('nick_name = "%s",\n' % (self.nick_name,))
         super(python_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -2897,14 +2928,15 @@ class python_programmer(programmer):
             showIndent(outfile, level)
             outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('nick-name', node)
         if value is not None and 'nick-name' not in already_processed:
-            already_processed.append('nick-name')
+            already_processed.add('nick-name')
             self.nick_name = value
         super(python_programmer, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
diff --git a/tests/people_procincl2_sup.py b/tests/people_procincl2_sup.py
index c569a6870f3c507a661b9f98053234c23dea4b63..996b7af96158cae1ad4b47b5f15de0712efde8e3 100644
--- a/tests/people_procincl2_sup.py
+++ b/tests/people_procincl2_sup.py
@@ -552,7 +552,7 @@ class people(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='people')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -594,7 +594,8 @@ class people(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='people'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -673,7 +674,8 @@ class people(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -759,7 +761,7 @@ class comments(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='comments')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -785,7 +787,8 @@ class comments(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='comments'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
@@ -807,7 +810,8 @@ class comments(GeneratedsSuper):
         outfile.write('],\n')
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         if node.text is not None:
             obj_ = self.mixedclass_(MixedContainer.CategoryText,
@@ -920,7 +924,7 @@ class person(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='person')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -931,22 +935,22 @@ class person(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='person'):
         if self.vegetable is not None and 'vegetable' not in already_processed:
-            already_processed.append('vegetable')
+            already_processed.add('vegetable')
             outfile.write(' vegetable=%s' % (self.gds_format_string(quote_attrib(self.vegetable).encode(ExternalEncoding), input_name='vegetable'), ))
         if self.fruit is not None and 'fruit' not in already_processed:
-            already_processed.append('fruit')
+            already_processed.add('fruit')
             outfile.write(' fruit=%s' % (self.gds_format_string(quote_attrib(self.fruit).encode(ExternalEncoding), input_name='fruit'), ))
         if self.ratio is not None and 'ratio' not in already_processed:
-            already_processed.append('ratio')
+            already_processed.add('ratio')
             outfile.write(' ratio="%s"' % self.gds_format_float(self.ratio, input_name='ratio'))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             outfile.write(' id="%s"' % self.gds_format_integer(self.id, input_name='id'))
         if self.value is not None and 'value' not in already_processed:
-            already_processed.append('value')
+            already_processed.add('value')
             outfile.write(' value=%s' % (self.gds_format_string(quote_attrib(self.value).encode(ExternalEncoding), input_name='value'), ))
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
     def exportChildren(self, outfile, level, namespace_='', name_='person', fromsubclass_=False, pretty_print=True):
@@ -984,28 +988,29 @@ class person(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='person'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.vegetable is not None and 'vegetable' not in already_processed:
-            already_processed.append('vegetable')
+            already_processed.add('vegetable')
             showIndent(outfile, level)
             outfile.write('vegetable = "%s",\n' % (self.vegetable,))
         if self.fruit is not None and 'fruit' not in already_processed:
-            already_processed.append('fruit')
+            already_processed.add('fruit')
             showIndent(outfile, level)
             outfile.write('fruit = "%s",\n' % (self.fruit,))
         if self.ratio is not None and 'ratio' not in already_processed:
-            already_processed.append('ratio')
+            already_processed.add('ratio')
             showIndent(outfile, level)
             outfile.write('ratio = %f,\n' % (self.ratio,))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             showIndent(outfile, level)
             outfile.write('id = %d,\n' % (self.id,))
         if self.value is not None and 'value' not in already_processed:
-            already_processed.append('value')
+            already_processed.add('value')
             showIndent(outfile, level)
             outfile.write('value = "%s",\n' % (self.value,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -1052,40 +1057,41 @@ class person(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('description=%s,\n' % quote_python(self.description).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('vegetable', node)
         if value is not None and 'vegetable' not in already_processed:
-            already_processed.append('vegetable')
+            already_processed.add('vegetable')
             self.vegetable = value
         value = find_attr_value_('fruit', node)
         if value is not None and 'fruit' not in already_processed:
-            already_processed.append('fruit')
+            already_processed.add('fruit')
             self.fruit = value
         value = find_attr_value_('ratio', node)
         if value is not None and 'ratio' not in already_processed:
-            already_processed.append('ratio')
+            already_processed.add('ratio')
             try:
                 self.ratio = float(value)
             except ValueError, exp:
                 raise ValueError('Bad float/double attribute (ratio): %s' % exp)
         value = find_attr_value_('id', node)
         if value is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             try:
                 self.id = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('value', node)
         if value is not None and 'value' not in already_processed:
-            already_processed.append('value')
+            already_processed.add('value')
             self.value = value
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'name':
@@ -1140,7 +1146,7 @@ class specialperson(person):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='specialperson')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1162,7 +1168,8 @@ class specialperson(person):
             return False
     def exportLiteral(self, outfile, level, name_='specialperson'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -1170,7 +1177,8 @@ class specialperson(person):
     def exportLiteralChildren(self, outfile, level, name_):
         super(specialperson, self).exportLiteralChildren(outfile, level, name_)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -1231,7 +1239,7 @@ class param(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='param')
         if self.hasContent_():
             outfile.write('>')
@@ -1242,22 +1250,22 @@ class param(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='param'):
         if self.semantic is not None and 'semantic' not in already_processed:
-            already_processed.append('semantic')
+            already_processed.add('semantic')
             outfile.write(' semantic=%s' % (self.gds_format_string(quote_attrib(self.semantic).encode(ExternalEncoding), input_name='semantic'), ))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             outfile.write(' name=%s' % (quote_attrib(self.name), ))
         if self.flow is not None and 'flow' not in already_processed:
-            already_processed.append('flow')
+            already_processed.add('flow')
             outfile.write(' flow=%s' % (quote_attrib(self.flow), ))
         if self.sid is not None and 'sid' not in already_processed:
-            already_processed.append('sid')
+            already_processed.add('sid')
             outfile.write(' sid=%s' % (quote_attrib(self.sid), ))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             outfile.write(' type=%s' % (self.gds_format_string(quote_attrib(self.type_).encode(ExternalEncoding), input_name='type'), ))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             outfile.write(' id=%s' % (self.gds_format_string(quote_attrib(self.id).encode(ExternalEncoding), input_name='id'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='param', fromsubclass_=False, pretty_print=True):
         pass
@@ -1270,40 +1278,42 @@ class param(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='param'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.semantic is not None and 'semantic' not in already_processed:
-            already_processed.append('semantic')
+            already_processed.add('semantic')
             showIndent(outfile, level)
             outfile.write('semantic = "%s",\n' % (self.semantic,))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             showIndent(outfile, level)
             outfile.write('name = "%s",\n' % (self.name,))
         if self.flow is not None and 'flow' not in already_processed:
-            already_processed.append('flow')
+            already_processed.add('flow')
             showIndent(outfile, level)
             outfile.write('flow = %s,\n' % (self.flow,))
         if self.sid is not None and 'sid' not in already_processed:
-            already_processed.append('sid')
+            already_processed.add('sid')
             showIndent(outfile, level)
             outfile.write('sid = "%s",\n' % (self.sid,))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             showIndent(outfile, level)
             outfile.write('type_ = "%s",\n' % (self.type_,))
         if self.id is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             showIndent(outfile, level)
             outfile.write('id = "%s",\n' % (self.id,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -1311,28 +1321,28 @@ class param(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('semantic', node)
         if value is not None and 'semantic' not in already_processed:
-            already_processed.append('semantic')
+            already_processed.add('semantic')
             self.semantic = value
             self.semantic = ' '.join(self.semantic.split())
         value = find_attr_value_('name', node)
         if value is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             self.name = value
         value = find_attr_value_('flow', node)
         if value is not None and 'flow' not in already_processed:
-            already_processed.append('flow')
+            already_processed.add('flow')
             self.flow = value
         value = find_attr_value_('sid', node)
         if value is not None and 'sid' not in already_processed:
-            already_processed.append('sid')
+            already_processed.add('sid')
             self.sid = value
         value = find_attr_value_('type', node)
         if value is not None and 'type' not in already_processed:
-            already_processed.append('type')
+            already_processed.add('type')
             self.type_ = value
         value = find_attr_value_('id', node)
         if value is not None and 'id' not in already_processed:
-            already_processed.append('id')
+            already_processed.add('id')
             self.id = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -1383,7 +1393,7 @@ class agent(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='agent')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1425,7 +1435,8 @@ class agent(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='agent'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -1459,7 +1470,8 @@ class agent(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -1544,7 +1556,7 @@ class special_agent(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='special-agent')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1583,7 +1595,8 @@ class special_agent(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='special-agent'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -1605,7 +1618,8 @@ class special_agent(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('),\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -1701,7 +1715,7 @@ class booster(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='booster')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1712,7 +1726,7 @@ class booster(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='booster'):
         if self.member_id is not None and 'member_id' not in already_processed:
-            already_processed.append('member_id')
+            already_processed.add('member_id')
             outfile.write(' member-id=%s' % (self.gds_format_string(quote_attrib(self.member_id).encode(ExternalEncoding), input_name='member-id'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='booster', fromsubclass_=False, pretty_print=True):
         if pretty_print:
@@ -1754,12 +1768,13 @@ class booster(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='booster'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.member_id is not None and 'member_id' not in already_processed:
-            already_processed.append('member_id')
+            already_processed.add('member_id')
             showIndent(outfile, level)
             outfile.write('member_id = "%s",\n' % (self.member_id,))
     def exportLiteralChildren(self, outfile, level, name_):
@@ -1806,14 +1821,15 @@ class booster(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('member-id', node)
         if value is not None and 'member-id' not in already_processed:
-            already_processed.append('member-id')
+            already_processed.add('member-id')
             self.member_id = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'firstname':
@@ -1895,7 +1911,7 @@ class info(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='info')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -1905,13 +1921,13 @@ class info(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='info'):
         if self.rating is not None and 'rating' not in already_processed:
-            already_processed.append('rating')
+            already_processed.add('rating')
             outfile.write(' rating="%s"' % self.gds_format_float(self.rating, input_name='rating'))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             outfile.write(' type="%s"' % self.gds_format_integer(self.type_, input_name='type'))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             outfile.write(' name=%s' % (self.gds_format_string(quote_attrib(self.name).encode(ExternalEncoding), input_name='name'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='info', fromsubclass_=False, pretty_print=True):
         pass
@@ -1924,47 +1940,49 @@ class info(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='info'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.rating is not None and 'rating' not in already_processed:
-            already_processed.append('rating')
+            already_processed.add('rating')
             showIndent(outfile, level)
             outfile.write('rating = %f,\n' % (self.rating,))
         if self.type_ is not None and 'type_' not in already_processed:
-            already_processed.append('type_')
+            already_processed.add('type_')
             showIndent(outfile, level)
             outfile.write('type_ = %d,\n' % (self.type_,))
         if self.name is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             showIndent(outfile, level)
             outfile.write('name = "%s",\n' % (self.name,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('rating', node)
         if value is not None and 'rating' not in already_processed:
-            already_processed.append('rating')
+            already_processed.add('rating')
             try:
                 self.rating = float(value)
             except ValueError, exp:
                 raise ValueError('Bad float/double attribute (rating): %s' % exp)
         value = find_attr_value_('type', node)
         if value is not None and 'type' not in already_processed:
-            already_processed.append('type')
+            already_processed.add('type')
             try:
                 self.type_ = int(value)
             except ValueError, exp:
                 raise_parse_error(node, 'Bad integer attribute: %s' % exp)
         value = find_attr_value_('name', node)
         if value is not None and 'name' not in already_processed:
-            already_processed.append('name')
+            already_processed.add('name')
             self.name = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -1997,7 +2015,7 @@ class vehicle(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='vehicle')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2008,7 +2026,7 @@ class vehicle(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='vehicle'):
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
         pass
@@ -2029,7 +2047,8 @@ class vehicle(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='vehicle'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2039,14 +2058,15 @@ class vehicle(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('wheelcount=%d,\n' % self.wheelcount)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         if nodeName_ == 'wheelcount':
@@ -2084,7 +2104,7 @@ class automobile(vehicle):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='automobile')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2114,7 +2134,8 @@ class automobile(vehicle):
             return False
     def exportLiteral(self, outfile, level, name_='automobile'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2125,7 +2146,8 @@ class automobile(vehicle):
             showIndent(outfile, level)
             outfile.write('drivername=%s,\n' % quote_python(self.drivername).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -2164,7 +2186,7 @@ class airplane(vehicle):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='airplane')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2194,7 +2216,8 @@ class airplane(vehicle):
             return False
     def exportLiteral(self, outfile, level, name_='airplane'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2205,7 +2228,8 @@ class airplane(vehicle):
             showIndent(outfile, level)
             outfile.write('pilotname=%s,\n' % quote_python(self.pilotname).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -2316,7 +2340,7 @@ class programmer(person):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='programmer')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2328,25 +2352,25 @@ class programmer(person):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='programmer'):
         super(programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='programmer')
         if self.language is not None and 'language' not in already_processed:
-            already_processed.append('language')
+            already_processed.add('language')
             outfile.write(' language=%s' % (self.gds_format_string(quote_attrib(self.language).encode(ExternalEncoding), input_name='language'), ))
         if self.area is not None and 'area' not in already_processed:
-            already_processed.append('area')
+            already_processed.add('area')
             outfile.write(' area=%s' % (self.gds_format_string(quote_attrib(self.area).encode(ExternalEncoding), input_name='area'), ))
         if self.attrnegint is not None and 'attrnegint' not in already_processed:
-            already_processed.append('attrnegint')
+            already_processed.add('attrnegint')
             outfile.write(' attrnegint="%s"' % self.gds_format_integer(self.attrnegint, input_name='attrnegint'))
         if self.attrposint is not None and 'attrposint' not in already_processed:
-            already_processed.append('attrposint')
+            already_processed.add('attrposint')
             outfile.write(' attrposint="%s"' % self.gds_format_integer(self.attrposint, input_name='attrposint'))
         if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed:
-            already_processed.append('attrnonnegint')
+            already_processed.add('attrnonnegint')
             outfile.write(' attrnonnegint="%s"' % self.gds_format_integer(self.attrnonnegint, input_name='attrnonnegint'))
         if self.attrnonposint is not None and 'attrnonposint' not in already_processed:
-            already_processed.append('attrnonposint')
+            already_processed.add('attrnonposint')
             outfile.write(' attrnonposint="%s"' % self.gds_format_integer(self.attrnonposint, input_name='attrnonposint'))
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
     def exportChildren(self, outfile, level, namespace_='', name_='programmer', fromsubclass_=False, pretty_print=True):
@@ -2407,32 +2431,33 @@ class programmer(person):
             return False
     def exportLiteral(self, outfile, level, name_='programmer'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.language is not None and 'language' not in already_processed:
-            already_processed.append('language')
+            already_processed.add('language')
             showIndent(outfile, level)
             outfile.write('language = "%s",\n' % (self.language,))
         if self.area is not None and 'area' not in already_processed:
-            already_processed.append('area')
+            already_processed.add('area')
             showIndent(outfile, level)
             outfile.write('area = "%s",\n' % (self.area,))
         if self.attrnegint is not None and 'attrnegint' not in already_processed:
-            already_processed.append('attrnegint')
+            already_processed.add('attrnegint')
             showIndent(outfile, level)
             outfile.write('attrnegint = %d,\n' % (self.attrnegint,))
         if self.attrposint is not None and 'attrposint' not in already_processed:
-            already_processed.append('attrposint')
+            already_processed.add('attrposint')
             showIndent(outfile, level)
             outfile.write('attrposint = %d,\n' % (self.attrposint,))
         if self.attrnonnegint is not None and 'attrnonnegint' not in already_processed:
-            already_processed.append('attrnonnegint')
+            already_processed.add('attrnonnegint')
             showIndent(outfile, level)
             outfile.write('attrnonnegint = %d,\n' % (self.attrnonnegint,))
         if self.attrnonposint is not None and 'attrnonposint' not in already_processed:
-            already_processed.append('attrnonposint')
+            already_processed.add('attrnonposint')
             showIndent(outfile, level)
             outfile.write('attrnonposint = %d,\n' % (self.attrnonposint,))
         super(programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -2475,22 +2500,23 @@ class programmer(person):
             showIndent(outfile, level)
             outfile.write('elarraytypes=%s,\n' % quote_python(self.elarraytypes).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('language', node)
         if value is not None and 'language' not in already_processed:
-            already_processed.append('language')
+            already_processed.add('language')
             self.language = value
         value = find_attr_value_('area', node)
         if value is not None and 'area' not in already_processed:
-            already_processed.append('area')
+            already_processed.add('area')
             self.area = value
         value = find_attr_value_('attrnegint', node)
         if value is not None and 'attrnegint' not in already_processed:
-            already_processed.append('attrnegint')
+            already_processed.add('attrnegint')
             try:
                 self.attrnegint = int(value)
             except ValueError, exp:
@@ -2499,7 +2525,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid NegativeInteger')
         value = find_attr_value_('attrposint', node)
         if value is not None and 'attrposint' not in already_processed:
-            already_processed.append('attrposint')
+            already_processed.add('attrposint')
             try:
                 self.attrposint = int(value)
             except ValueError, exp:
@@ -2508,7 +2534,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid PositiveInteger')
         value = find_attr_value_('attrnonnegint', node)
         if value is not None and 'attrnonnegint' not in already_processed:
-            already_processed.append('attrnonnegint')
+            already_processed.add('attrnonnegint')
             try:
                 self.attrnonnegint = int(value)
             except ValueError, exp:
@@ -2517,7 +2543,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid NonNegativeInteger')
         value = find_attr_value_('attrnonposint', node)
         if value is not None and 'attrnonposint' not in already_processed:
-            already_processed.append('attrnonposint')
+            already_processed.add('attrnonposint')
             try:
                 self.attrnonposint = int(value)
             except ValueError, exp:
@@ -2526,7 +2552,7 @@ class programmer(person):
                 raise_parse_error(node, 'Invalid NonPositiveInteger')
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
         super(programmer, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
@@ -2639,7 +2665,7 @@ class client_handlerType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='client-handlerType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2671,7 +2697,8 @@ class client_handlerType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='client-handlerType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -2684,7 +2711,8 @@ class client_handlerType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('refid=%d,\n' % self.refid)
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -2741,7 +2769,7 @@ class java_programmer(programmer):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2753,10 +2781,10 @@ class java_programmer(programmer):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='java-programmer'):
         super(java_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='java-programmer')
         if self.status is not None and 'status' not in already_processed:
-            already_processed.append('status')
+            already_processed.add('status')
             outfile.write(' status=%s' % (self.gds_format_string(quote_attrib(self.status).encode(ExternalEncoding), input_name='status'), ))
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='java-programmer', fromsubclass_=False, pretty_print=True):
         super(java_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
@@ -2777,16 +2805,17 @@ class java_programmer(programmer):
             return False
     def exportLiteral(self, outfile, level, name_='java-programmer'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.status is not None and 'status' not in already_processed:
-            already_processed.append('status')
+            already_processed.add('status')
             showIndent(outfile, level)
             outfile.write('status = "%s",\n' % (self.status,))
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             showIndent(outfile, level)
             outfile.write('nick_name = "%s",\n' % (self.nick_name,))
         super(java_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -2796,18 +2825,19 @@ class java_programmer(programmer):
             showIndent(outfile, level)
             outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('status', node)
         if value is not None and 'status' not in already_processed:
-            already_processed.append('status')
+            already_processed.add('status')
             self.status = value
         value = find_attr_value_('nick-name', node)
         if value is not None and 'nick-name' not in already_processed:
-            already_processed.append('nick-name')
+            already_processed.add('nick-name')
             self.nick_name = value
         super(java_programmer, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
@@ -2849,7 +2879,7 @@ class python_programmer(programmer):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -2861,7 +2891,7 @@ class python_programmer(programmer):
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='python-programmer'):
         super(python_programmer, self).exportAttributes(outfile, level, already_processed, namespace_, name_='python-programmer')
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             outfile.write(' nick-name=%s' % (self.gds_format_string(quote_attrib(self.nick_name).encode(ExternalEncoding), input_name='nick-name'), ))
     def exportChildren(self, outfile, level, namespace_='', name_='python-programmer', fromsubclass_=False, pretty_print=True):
         super(python_programmer, self).exportChildren(outfile, level, namespace_, name_, True, pretty_print=pretty_print)
@@ -2882,12 +2912,13 @@ class python_programmer(programmer):
             return False
     def exportLiteral(self, outfile, level, name_='python-programmer'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.nick_name is not None and 'nick_name' not in already_processed:
-            already_processed.append('nick_name')
+            already_processed.add('nick_name')
             showIndent(outfile, level)
             outfile.write('nick_name = "%s",\n' % (self.nick_name,))
         super(python_programmer, self).exportLiteralAttributes(outfile, level, already_processed, name_)
@@ -2897,14 +2928,15 @@ class python_programmer(programmer):
             showIndent(outfile, level)
             outfile.write('favorite_editor=%s,\n' % quote_python(self.favorite_editor).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('nick-name', node)
         if value is not None and 'nick-name' not in already_processed:
-            already_processed.append('nick-name')
+            already_processed.add('nick-name')
             self.nick_name = value
         super(python_programmer, self).buildAttributes(node, attrs, already_processed)
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
diff --git a/tests/recursive_simpletype1_sup.py b/tests/recursive_simpletype1_sup.py
index 262e1856e31f0f267d48471f44f7c24fa50d1b5e..35d7d54e41600587443096d73e6deba4d900508f 100644
--- a/tests/recursive_simpletype1_sup.py
+++ b/tests/recursive_simpletype1_sup.py
@@ -509,7 +509,7 @@ class PersonType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='PersonType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -545,7 +545,8 @@ class PersonType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='PersonType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -561,7 +562,8 @@ class PersonType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('lname=%s,\n' % quote_python(self.lname).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/recursive_simpletype2_sup.py b/tests/recursive_simpletype2_sup.py
index 262e1856e31f0f267d48471f44f7c24fa50d1b5e..35d7d54e41600587443096d73e6deba4d900508f 100644
--- a/tests/recursive_simpletype2_sup.py
+++ b/tests/recursive_simpletype2_sup.py
@@ -509,7 +509,7 @@ class PersonType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='PersonType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -545,7 +545,8 @@ class PersonType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='PersonType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -561,7 +562,8 @@ class PersonType(GeneratedsSuper):
             showIndent(outfile, level)
             outfile.write('lname=%s,\n' % quote_python(self.lname).encode(ExternalEncoding))
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/simplecontent_restriction1_sup.py b/tests/simplecontent_restriction1_sup.py
index 08211cf98eda4b60933de8e6970c6bdca4722d97..0e815f572e344ab48fd2296d6a6a7659ee216554 100644
--- a/tests/simplecontent_restriction1_sup.py
+++ b/tests/simplecontent_restriction1_sup.py
@@ -532,7 +532,7 @@ class IdentifierType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='IdentifierType')
         if self.hasContent_():
             outfile.write('>')
@@ -543,28 +543,28 @@ class IdentifierType(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='', name_='IdentifierType'):
         if self.schemeDataURI is not None and 'schemeDataURI' not in already_processed:
-            already_processed.append('schemeDataURI')
+            already_processed.add('schemeDataURI')
             outfile.write(' schemeDataURI=%s' % (self.gds_format_string(quote_attrib(self.schemeDataURI).encode(ExternalEncoding), input_name='schemeDataURI'), ))
         if self.schemeID is not None and 'schemeID' not in already_processed:
-            already_processed.append('schemeID')
+            already_processed.add('schemeID')
             outfile.write(' schemeID=%s' % (self.gds_format_string(quote_attrib(self.schemeID).encode(ExternalEncoding), input_name='schemeID'), ))
         if self.schemeAgencyName is not None and 'schemeAgencyName' not in already_processed:
-            already_processed.append('schemeAgencyName')
+            already_processed.add('schemeAgencyName')
             outfile.write(' schemeAgencyName=%s' % (self.gds_format_string(quote_attrib(self.schemeAgencyName).encode(ExternalEncoding), input_name='schemeAgencyName'), ))
         if self.schemeAgencyID is not None and 'schemeAgencyID' not in already_processed:
-            already_processed.append('schemeAgencyID')
+            already_processed.add('schemeAgencyID')
             outfile.write(' schemeAgencyID=%s' % (self.gds_format_string(quote_attrib(self.schemeAgencyID).encode(ExternalEncoding), input_name='schemeAgencyID'), ))
         if self.schemeName is not None and 'schemeName' not in already_processed:
-            already_processed.append('schemeName')
+            already_processed.add('schemeName')
             outfile.write(' schemeName=%s' % (self.gds_format_string(quote_attrib(self.schemeName).encode(ExternalEncoding), input_name='schemeName'), ))
         if self.schemeVersionID is not None and 'schemeVersionID' not in already_processed:
-            already_processed.append('schemeVersionID')
+            already_processed.add('schemeVersionID')
             outfile.write(' schemeVersionID=%s' % (self.gds_format_string(quote_attrib(self.schemeVersionID).encode(ExternalEncoding), input_name='schemeVersionID'), ))
         if self.schemeURI is not None and 'schemeURI' not in already_processed:
-            already_processed.append('schemeURI')
+            already_processed.add('schemeURI')
             outfile.write(' schemeURI=%s' % (self.gds_format_string(quote_attrib(self.schemeURI).encode(ExternalEncoding), input_name='schemeURI'), ))
         if self.extensiontype_ is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             outfile.write(' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"')
             outfile.write(' xsi:type="%s"' % self.extensiontype_)
     def exportChildren(self, outfile, level, namespace_='', name_='IdentifierType', fromsubclass_=False, pretty_print=True):
@@ -578,44 +578,46 @@ class IdentifierType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='IdentifierType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.schemeDataURI is not None and 'schemeDataURI' not in already_processed:
-            already_processed.append('schemeDataURI')
+            already_processed.add('schemeDataURI')
             showIndent(outfile, level)
             outfile.write('schemeDataURI = "%s",\n' % (self.schemeDataURI,))
         if self.schemeID is not None and 'schemeID' not in already_processed:
-            already_processed.append('schemeID')
+            already_processed.add('schemeID')
             showIndent(outfile, level)
             outfile.write('schemeID = "%s",\n' % (self.schemeID,))
         if self.schemeAgencyName is not None and 'schemeAgencyName' not in already_processed:
-            already_processed.append('schemeAgencyName')
+            already_processed.add('schemeAgencyName')
             showIndent(outfile, level)
             outfile.write('schemeAgencyName = "%s",\n' % (self.schemeAgencyName,))
         if self.schemeAgencyID is not None and 'schemeAgencyID' not in already_processed:
-            already_processed.append('schemeAgencyID')
+            already_processed.add('schemeAgencyID')
             showIndent(outfile, level)
             outfile.write('schemeAgencyID = "%s",\n' % (self.schemeAgencyID,))
         if self.schemeName is not None and 'schemeName' not in already_processed:
-            already_processed.append('schemeName')
+            already_processed.add('schemeName')
             showIndent(outfile, level)
             outfile.write('schemeName = "%s",\n' % (self.schemeName,))
         if self.schemeVersionID is not None and 'schemeVersionID' not in already_processed:
-            already_processed.append('schemeVersionID')
+            already_processed.add('schemeVersionID')
             showIndent(outfile, level)
             outfile.write('schemeVersionID = "%s",\n' % (self.schemeVersionID,))
         if self.schemeURI is not None and 'schemeURI' not in already_processed:
-            already_processed.append('schemeURI')
+            already_processed.add('schemeURI')
             showIndent(outfile, level)
             outfile.write('schemeURI = "%s",\n' % (self.schemeURI,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -623,35 +625,35 @@ class IdentifierType(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('schemeDataURI', node)
         if value is not None and 'schemeDataURI' not in already_processed:
-            already_processed.append('schemeDataURI')
+            already_processed.add('schemeDataURI')
             self.schemeDataURI = value
         value = find_attr_value_('schemeID', node)
         if value is not None and 'schemeID' not in already_processed:
-            already_processed.append('schemeID')
+            already_processed.add('schemeID')
             self.schemeID = value
         value = find_attr_value_('schemeAgencyName', node)
         if value is not None and 'schemeAgencyName' not in already_processed:
-            already_processed.append('schemeAgencyName')
+            already_processed.add('schemeAgencyName')
             self.schemeAgencyName = value
         value = find_attr_value_('schemeAgencyID', node)
         if value is not None and 'schemeAgencyID' not in already_processed:
-            already_processed.append('schemeAgencyID')
+            already_processed.add('schemeAgencyID')
             self.schemeAgencyID = value
         value = find_attr_value_('schemeName', node)
         if value is not None and 'schemeName' not in already_processed:
-            already_processed.append('schemeName')
+            already_processed.add('schemeName')
             self.schemeName = value
         value = find_attr_value_('schemeVersionID', node)
         if value is not None and 'schemeVersionID' not in already_processed:
-            already_processed.append('schemeVersionID')
+            already_processed.add('schemeVersionID')
             self.schemeVersionID = value
         value = find_attr_value_('schemeURI', node)
         if value is not None and 'schemeURI' not in already_processed:
-            already_processed.append('schemeURI')
+            already_processed.add('schemeURI')
             self.schemeURI = value
         value = find_attr_value_('xsi:type', node)
         if value is not None and 'xsi:type' not in already_processed:
-            already_processed.append('xsi:type')
+            already_processed.add('xsi:type')
             self.extensiontype_ = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -682,7 +684,7 @@ class BillOfResourcesIDType(IdentifierType):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='BillOfResourcesIDType')
         if self.hasContent_():
             outfile.write('>')
@@ -706,7 +708,8 @@ class BillOfResourcesIDType(IdentifierType):
             return False
     def exportLiteral(self, outfile, level, name_='BillOfResourcesIDType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
@@ -717,7 +720,8 @@ class BillOfResourcesIDType(IdentifierType):
         super(BillOfResourcesIDType, self).exportLiteralChildren(outfile, level, name_)
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -753,7 +757,7 @@ class BillOfMaterialIDType(IdentifierType):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='BillOfMaterialIDType')
         if self.hasContent_():
             outfile.write('>')
@@ -777,7 +781,8 @@ class BillOfMaterialIDType(IdentifierType):
             return False
     def exportLiteral(self, outfile, level, name_='BillOfMaterialIDType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
@@ -788,7 +793,8 @@ class BillOfMaterialIDType(IdentifierType):
         super(BillOfMaterialIDType, self).exportLiteralChildren(outfile, level, name_)
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
diff --git a/tests/simpletype_memberspecs1_sup.py b/tests/simpletype_memberspecs1_sup.py
index d3be8d0cc173e29e1321d5926c371dab3a0956f2..990542591de211b78a4750728977e0aac2484714 100644
--- a/tests/simpletype_memberspecs1_sup.py
+++ b/tests/simpletype_memberspecs1_sup.py
@@ -505,7 +505,7 @@ class SpecialDate(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='SpecialDate')
         if self.hasContent_():
             outfile.write('>')
@@ -516,7 +516,7 @@ class SpecialDate(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='pl:', name_='SpecialDate'):
         if self.SpecialProperty is not None and 'SpecialProperty' not in already_processed:
-            already_processed.append('SpecialProperty')
+            already_processed.add('SpecialProperty')
             outfile.write(' SpecialProperty=%s' % (self.gds_format_string(quote_attrib(self.SpecialProperty).encode(ExternalEncoding), input_name='SpecialProperty'), ))
     def exportChildren(self, outfile, level, namespace_='pl:', name_='SpecialDate', fromsubclass_=False, pretty_print=True):
         pass
@@ -529,20 +529,22 @@ class SpecialDate(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='SpecialDate'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.SpecialProperty is not None and 'SpecialProperty' not in already_processed:
-            already_processed.append('SpecialProperty')
+            already_processed.add('SpecialProperty')
             showIndent(outfile, level)
             outfile.write('SpecialProperty = "%s",\n' % (self.SpecialProperty,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -550,7 +552,7 @@ class SpecialDate(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('SpecialProperty', node)
         if value is not None and 'SpecialProperty' not in already_processed:
-            already_processed.append('SpecialProperty')
+            already_processed.add('SpecialProperty')
             self.SpecialProperty = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
@@ -584,7 +586,7 @@ class ExtremeDate(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='ExtremeDate')
         if self.hasContent_():
             outfile.write('>')
@@ -595,7 +597,7 @@ class ExtremeDate(GeneratedsSuper):
             outfile.write('/>%s' % (eol_, ))
     def exportAttributes(self, outfile, level, already_processed, namespace_='pl:', name_='ExtremeDate'):
         if self.ExtremeProperty is not None and 'ExtremeProperty' not in already_processed:
-            already_processed.append('ExtremeProperty')
+            already_processed.add('ExtremeProperty')
             outfile.write(' ExtremeProperty=%s' % (self.gds_format_string(quote_attrib(self.ExtremeProperty).encode(ExternalEncoding), input_name='ExtremeProperty'), ))
     def exportChildren(self, outfile, level, namespace_='pl:', name_='ExtremeDate', fromsubclass_=False, pretty_print=True):
         pass
@@ -608,20 +610,22 @@ class ExtremeDate(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='ExtremeDate'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
         showIndent(outfile, level)
         outfile.write('valueOf_ = """%s""",\n' % (self.valueOf_,))
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
         if self.ExtremeProperty is not None and 'ExtremeProperty' not in already_processed:
-            already_processed.append('ExtremeProperty')
+            already_processed.add('ExtremeProperty')
             showIndent(outfile, level)
             outfile.write('ExtremeProperty = "%s",\n' % (self.ExtremeProperty,))
     def exportLiteralChildren(self, outfile, level, name_):
         pass
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         self.valueOf_ = get_all_text_(node)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
@@ -629,7 +633,7 @@ class ExtremeDate(GeneratedsSuper):
     def buildAttributes(self, node, attrs, already_processed):
         value = find_attr_value_('ExtremeProperty', node)
         if value is not None and 'ExtremeProperty' not in already_processed:
-            already_processed.append('ExtremeProperty')
+            already_processed.add('ExtremeProperty')
             self.ExtremeProperty = value
     def buildChildren(self, child_, node, nodeName_, fromsubclass_=False):
         pass
diff --git a/tests/simpletypes_other1_sup.py b/tests/simpletypes_other1_sup.py
index 390cf0db3a46f8176368f053e26c1d87299960a8..064dae497d2c2837801a8c23cf959535fe585407 100644
--- a/tests/simpletypes_other1_sup.py
+++ b/tests/simpletypes_other1_sup.py
@@ -506,7 +506,7 @@ class simpleTypeTestsType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='simpleTypeTestsType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -534,7 +534,8 @@ class simpleTypeTestsType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='simpleTypeTestsType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -550,7 +551,8 @@ class simpleTypeTestsType(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -707,7 +709,7 @@ class simpleTypeTest(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='simpleTypeTest')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -815,7 +817,8 @@ class simpleTypeTest(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='simpleTypeTest'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -933,7 +936,8 @@ class simpleTypeTest(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/simpletypes_other2_sup.py b/tests/simpletypes_other2_sup.py
index 390cf0db3a46f8176368f053e26c1d87299960a8..064dae497d2c2837801a8c23cf959535fe585407 100644
--- a/tests/simpletypes_other2_sup.py
+++ b/tests/simpletypes_other2_sup.py
@@ -506,7 +506,7 @@ class simpleTypeTestsType(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='simpleTypeTestsType')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -534,7 +534,8 @@ class simpleTypeTestsType(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='simpleTypeTestsType'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -550,7 +551,8 @@ class simpleTypeTestsType(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
@@ -707,7 +709,7 @@ class simpleTypeTest(GeneratedsSuper):
             eol_ = ''
         showIndent(outfile, level, pretty_print)
         outfile.write('<%s%s%s' % (namespace_, name_, namespacedef_ and ' ' + namespacedef_ or '', ))
-        already_processed = []
+        already_processed = set()
         self.exportAttributes(outfile, level, already_processed, namespace_, name_='simpleTypeTest')
         if self.hasContent_():
             outfile.write('>%s' % (eol_, ))
@@ -815,7 +817,8 @@ class simpleTypeTest(GeneratedsSuper):
             return False
     def exportLiteral(self, outfile, level, name_='simpleTypeTest'):
         level += 1
-        self.exportLiteralAttributes(outfile, level, [], name_)
+        already_processed = set()
+        self.exportLiteralAttributes(outfile, level, already_processed, name_)
         if self.hasContent_():
             self.exportLiteralChildren(outfile, level, name_)
     def exportLiteralAttributes(self, outfile, level, already_processed, name_):
@@ -933,7 +936,8 @@ class simpleTypeTest(GeneratedsSuper):
         showIndent(outfile, level)
         outfile.write('],\n')
     def build(self, node):
-        self.buildAttributes(node, node.attrib, [])
+        already_processed = set()
+        self.buildAttributes(node, node.attrib, already_processed)
         for child in node:
             nodeName_ = Tag_pattern_.match(child.tag).groups()[-1]
             self.buildChildren(child, node, nodeName_)
diff --git a/tests/test.py b/tests/test.py
index 8e53b082c0f8202bbbd486ea4aacaef8e952be1b..05bcf666fac73752589e6d3ac26cf781ed5dc6cb 100755
--- a/tests/test.py
+++ b/tests/test.py
@@ -228,7 +228,7 @@ class GenTest(unittest.TestCase):
         infile.close()
         self.failUnlessEqual(content1, content2)
 
-    def test_010_extensions(self):
+    def test_010_simplecontent_restriction(self):
         cmdTempl = ('python generateDS.py --no-dates --no-versions '
             '--silence --member-specs=list -f '
             '-o tests/%s2_sup.py -s tests/%s2_sub.py '
diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html
index ee6f56ae1725810e64d826684491fb7cd57452cc..09740725d5a0b096809f114017164782b62f9516 100644
--- a/tutorial/generateds_tutorial.html
+++ b/tutorial/generateds_tutorial.html
@@ -216,7 +216,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.8b</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.8c</td>
 </tr>
 </tbody>
 </table>
@@ -225,7 +225,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">January 28, 2013</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">January 31, 2013</td>
 </tr>
 </tbody>
 </table>
diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt
index e9dd79d400cf7ae770e2ea54edf6c72f0088e574..1f50f311f713c956d55e71ecc80a5db5033edbd8 100644
--- a/tutorial/generateds_tutorial.txt
+++ b/tutorial/generateds_tutorial.txt
@@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial
 
 .. version
 
-:revision: 2.8b
+:revision: 2.8c
 
 .. version
 
diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip
index d8f36eb7e53e33950d93a2113e77edb1b8fae6ea..724d78077fb3ad5b7e3ff90edf6a1b6dd48e5125 100644
Binary files a/tutorial/generateds_tutorial.zip and b/tutorial/generateds_tutorial.zip differ