From bb8b5151e5d247a78660ab7d7fac74f4d6bcb79a Mon Sep 17 00:00:00 2001
From: Dave Kuhlman <dkuhlman@davekuhlman.org>
Date: Tue, 21 Mar 2017 13:01:34 -0700
Subject: [PATCH] Additional fixes for Django support

---
 README                                   |  22 +++
 django/gends_run_gen_django.py           |  24 ++-
 django/generatedssuper.py                |   9 +-
 generateDS.html                          |   6 +-
 generateDS.py                            |  11 +-
 generateDS.txt                           |   2 +-
 generateds_gui_notes.html                |   6 +-
 generateds_gui_notes.txt                 |   2 +-
 gui/generateds_gui.py                    |   2 +-
 librarytemplate_howto.html               |   6 +-
 librarytemplate_howto.txt                |   2 +-
 process_includes.py                      |   2 +-
 setup.py                                 |   2 +-
 tests/OnePer/oneperType00_2One.py        |   9 +-
 tests/OnePer/oneperType01_2One.py        |  11 +-
 tests/OnePer/oneperType02_2One.py        |  11 +-
 tests/OnePer/oneperType03_2One.py        |  11 +-
 tests/abstract_type1_sup.py              |   7 +-
 tests/annotations1_sup.py                |  19 ++-
 tests/anonymous_type1_sup.py             |  17 +-
 tests/anysimpletype1_sup.py              |   9 +-
 tests/anywildcard1_sup.py                |  29 ++--
 tests/attr_groups1_sup.py                |  25 +--
 tests/catalogtest1_sup.py                |   5 +-
 tests/cdata1_sup.py                      |   9 +-
 tests/check_results.rb                   |   4 +
 tests/cleanupname1_sup.py                |  25 +--
 tests/defaults_cases1_sup.py             |  33 ++--
 tests/defaults_coverage1_sup.py          |  77 ++++-----
 tests/extensions1_sup.py                 |  35 +++--
 tests/ipo1_sup.py                        |  43 ++---
 tests/ipo2_sup.py                        |  43 ++---
 tests/mapcleanname1_sup.py               |  49 +++---
 tests/nested_def1_sup.py                 |  21 +--
 tests/out1_sup.py                        | 137 ++++++++--------
 tests/people_procincl1_sup.py            | 149 +++++++++---------
 tests/prefix_classname1_sup.py           | 137 ++++++++--------
 tests/recursive_simpletype1_sup.py       |  11 +-
 tests/reference_simpletype1_sup.py       |  13 +-
 tests/rem_dup_elems1_sup.py              |  11 +-
 tests/simplecontent_restriction1_sup.py  |  19 ++-
 tests/simpletype_memberspecs1_sup.py     |   9 +-
 tests/simpletypes_other1_sup.py          |  49 +++---
 tests/test.py                            |   7 +-
 tests/to_etree1_sup.py                   | 191 ++++++++++++-----------
 tests/validate_simpletypes1_sup.py       |  67 ++++----
 tests/validate_simpletypes1_warnings.txt |  60 +++----
 tests/validate_simpletypes2_sup.py       |  67 ++++----
 tutorial/generateds_tutorial.html        |   6 +-
 tutorial/generateds_tutorial.txt         |   2 +-
 tutorial/generateds_tutorial.zip         | Bin 48766 -> 48769 bytes
 51 files changed, 834 insertions(+), 689 deletions(-)

diff --git a/README b/README
index 3c2805e..e70ab60 100644
--- a/README
+++ b/README
@@ -141,6 +141,28 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 Change history
 --------------
 
+Version 2.25a (03/21/2017)
+
+- Fixes to the Django support for Python 3.  Thanks to Shane Rigby
+  for all his help with all of these changes to the Django code.
+- Added `optional` to the MemberSpec so that when command line
+  option "--member-specs" is "dict" or "list", the generated code
+  specifies whether the member is optional or not.
+- In the Django support, `django/gends_run_gen_django.py` now has
+  new option "-s" ("--script") that can be used to write out the
+  command lines used internally by `django/gends_run_gen_django.py`.
+  This new flag can be used to generate a shell script that can be
+  run instead of `django/gends_run_gen_django.py`.  (Note: The
+  script might require a minor edit or two.)
+- In the Django support, there is now some attempt to treat optional
+  members specially and to generate "blank=True, null=True," in the
+  `models.py` file.
+- Fix to Django support so that we generate *unique* names for
+  `related_name`.
+- Added several date/time types for Django support: 'gYear',
+  'gYearMonth', 'gMonth', 'gMonthDay', 'gDay',
+
+
 Version 2.24b (01/02/2017)
 
 - Added several fixes to generateDS.py and process_includes.py that
diff --git a/django/gends_run_gen_django.py b/django/gends_run_gen_django.py
index 7eb8742..2786368 100755
--- a/django/gends_run_gen_django.py
+++ b/django/gends_run_gen_django.py
@@ -16,6 +16,8 @@ Options:
     -p, --path-to-generateDS-script=/path/to/generateDS.py
                     Path to the generateDS.py script.
     -v, --verbose   Display additional information while running.
+    -s, --script    Write out (display) the command lines used.  Can
+                    be captured and used in a shell script, for example.
 Examples:
     python gends_run_gen_django.py my_schema.xsd
     python gends_run_gen_django.py -f -p ../generateDS.py my_other_schema.xsd
@@ -90,7 +92,10 @@ def generate(options, schema_file_name):
 
 
 def run_cmd(options, args):
-    dbg_msg(options, '*** running %s\n' % (' '.join(args), ))
+    msg = '%s\n' % (' '.join(args), )
+    dbg_msg(options, '*** running %s' % (msg, ))
+    if options['script']:
+        write_msg(options, msg)
     process = Popen(args, stderr=PIPE, stdout=PIPE)
     content1 = process.stderr.read()
     content2 = process.stdout.read()
@@ -117,7 +122,17 @@ def exists(file_name):
 
 def dbg_msg(options, msg):
     if options['verbose']:
+        if isinstance(msg, str):
+            sys.stdout.write(msg)
+        else:
+            sys.stdout.write(msg.decode('utf-8'))
+
+
+def write_msg(options, msg):
+    if isinstance(msg, str):
         sys.stdout.write(msg)
+    else:
+        sys.stdout.write(msg.decode('utf-8'))
 
 
 def usage():
@@ -127,8 +142,8 @@ def usage():
 def main():
     args = sys.argv[1:]
     try:
-        opts, args = getopt.getopt(args, 'hvfp:', [
-            'help', 'verbose',
+        opts, args = getopt.getopt(args, 'hvfp:s', [
+            'help', 'verbose', 'script',
             'force', 'path-to-generateDS-script=',
         ])
     except:
@@ -136,6 +151,7 @@ def main():
     options = {}
     options['force'] = False
     options['verbose'] = False
+    options['script'] = False
     options['path'] = './generateDS.py'
     for opt, val in opts:
         if opt in ('-h', '--help'):
@@ -144,6 +160,8 @@ def main():
             options['force'] = True
         elif opt in ('-v', '--verbose'):
             options['verbose'] = True
+        elif opt in ('-s', '--script'):
+            options['script'] = True
         elif opt in ('-p', '--path-to-generateDS-script'):
             options['path'] = val
     if not os.path.exists(options['path']):
diff --git a/django/generatedssuper.py b/django/generatedssuper.py
index 60c5b46..741a499 100644
--- a/django/generatedssuper.py
+++ b/django/generatedssuper.py
@@ -172,7 +172,10 @@ class GeneratedsSuper(object):
                 name += 'x'
             data_type = cleanupName(data_type)
             if data_type in Simple_type_table:
-                options = 'blank=True'
+                if is_optional:
+                    options = 'blank=True, null=True'
+                else:
+                    options = ''
                 if data_type in Integer_type_table:
                     wrtmodels('    %s = models.IntegerField(%s)\n' % (
                         name, options, ))
@@ -218,8 +221,8 @@ class GeneratedsSuper(object):
                     '    %s = models.ForeignKey(\n        "%s_model",\n' % (
                         name, data_type, ))
                 wrtmodels(
-                    '        related_name="{}_{}",\n'.format(
-                        name, data_type, ))
+                    '        related_name="{}_{}_{}",\n'.format(
+                        class_name, name, data_type, ))
                 if is_optional:
                     wrtmodels(
                         '        blank=True, null=True,\n')
diff --git a/generateDS.html b/generateDS.html
index 1ee864e..3605073 100644
--- a/generateDS.html
+++ b/generateDS.html
@@ -220,7 +220,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.24c</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.25a</td>
 </tr>
 </tbody>
 </table>
@@ -229,7 +229,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">March 01, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">March 21, 2017</td>
 </tr>
 </tbody>
 </table>
@@ -3187,7 +3187,7 @@ following among others:</p>
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateDS.txt">View document source</a>.
-Generated on: 2017-03-01 22:05 UTC.
+Generated on: 2017-03-21 19:50 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/generateDS.py b/generateDS.py
index 52b6ebb..c26a271 100755
--- a/generateDS.py
+++ b/generateDS.py
@@ -204,7 +204,7 @@ logging.disable(logging.INFO)
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.24c'
+VERSION = '2.25a'
 ##VERSION##
 
 if sys.version_info.major == 2:
@@ -4748,12 +4748,13 @@ def generateMemberSpec(wrt, element):
         item1 = attrName
         item2 = attrDef.getType()
         item3 = 0
+        item4 = 1 if attrDef.getUse() == 'optional' else 0
         if generateDict:
-            item = "        '%s': MemberSpec_('%s', '%s', %d)," % (
-                item1, item1, item2, item3, )
+            item = "        '%s': MemberSpec_('%s', '%s', %d, %d)," % (
+                item1, item1, item2, item3, item4, )
         else:
-            item = "        MemberSpec_('%s', '%s', %d)," % (
-                item1, item2, item3, )
+            item = "        MemberSpec_('%s', '%s', %d, %d)," % (
+                item1, item2, item3, item4, )
         add(item)
     for child in element.getChildren():
         name = cleanupName(child.getCleanName())
diff --git a/generateDS.txt b/generateDS.txt
index d64c9ee..f07e88d 100644
--- a/generateDS.txt
+++ b/generateDS.txt
@@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema
 
 .. version
 
-:revision: 2.24c
+:revision: 2.25a
 
 .. version
 
diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html
index 7c8b0d5..fd42cbb 100644
--- a/generateds_gui_notes.html
+++ b/generateds_gui_notes.html
@@ -220,7 +220,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.24c</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.25a</td>
 </tr>
 </tbody>
 </table>
@@ -229,7 +229,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">March 01, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">March 21, 2017</td>
 </tr>
 </tbody>
 </table>
@@ -401,7 +401,7 @@ $ mv generateds_gui.mo locale/ru/LC_MESSAGES/
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateds_gui_notes.txt">View document source</a>.
-Generated on: 2017-03-01 22:05 UTC.
+Generated on: 2017-03-21 19:50 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/generateds_gui_notes.txt b/generateds_gui_notes.txt
index 9afb38e..ca2d1d2 100644
--- a/generateds_gui_notes.txt
+++ b/generateds_gui_notes.txt
@@ -12,7 +12,7 @@ GenerateDS GUI Notes
 
 .. version
 
-:revision: 2.24c
+:revision: 2.25a
 
 .. version
 
diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index c96bf5d..d5cf4cd 100755
--- a/gui/generateds_gui.py
+++ b/gui/generateds_gui.py
@@ -41,7 +41,7 @@ from libgenerateDS.gui import generateds_gui_session
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.24c'
+VERSION = '2.25a'
 ##VERSION##
 
 
diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html
index 570a071..1790efe 100644
--- a/librarytemplate_howto.html
+++ b/librarytemplate_howto.html
@@ -217,7 +217,7 @@ dkuhlman (at) davekuhlman (dot) org
 <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.24c</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.25a</td>
 </tr>
 </tbody>
 </table>
@@ -226,7 +226,7 @@ dkuhlman (at) davekuhlman (dot) org
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">March 01, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">March 21, 2017</td>
 </tr>
 </tbody>
 </table>
@@ -380,7 +380,7 @@ this command for your needs.  For example, you may need to use
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="librarytemplate_howto.txt">View document source</a>.
-Generated on: 2017-03-01 22:05 UTC.
+Generated on: 2017-03-21 19:50 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt
index 7a00efd..a2a52cb 100644
--- a/librarytemplate_howto.txt
+++ b/librarytemplate_howto.txt
@@ -8,7 +8,7 @@ How to package a generateDS.py generated library
 
 .. version
 
-:revision: 2.24c
+:revision: 2.25a
 
 .. version
 
diff --git a/process_includes.py b/process_includes.py
index 10f5317..bbdc026 100755
--- a/process_includes.py
+++ b/process_includes.py
@@ -40,7 +40,7 @@ except ImportError:
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.24c'
+VERSION = '2.25a'
 ##VERSION##
 
 CatalogDict = {}
diff --git a/setup.py b/setup.py
index a9055fd..adfdbd1 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.24c",
+    version="2.25a",
 ##VERSION##
     author="Dave Kuhlman",
     author_email="dkuhlman@davekuhlman.org",
diff --git a/tests/OnePer/oneperType00_2One.py b/tests/OnePer/oneperType00_2One.py
index 99f1c66..96ad398 100644
--- a/tests/OnePer/oneperType00_2One.py
+++ b/tests/OnePer/oneperType00_2One.py
@@ -631,10 +631,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -649,6 +650,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -663,8 +666,8 @@ def _cast(typ, value):
 
 class oneperType00_1(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('inner01', 'oneperType01_1', 0),
-        MemberSpec_('inner02', 'oneperType01_2', 0),
+        MemberSpec_('inner01', 'oneperType01_1', 0, 0),
+        MemberSpec_('inner02', 'oneperType01_2', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/OnePer/oneperType01_2One.py b/tests/OnePer/oneperType01_2One.py
index 652b9e6..6b9aec3 100644
--- a/tests/OnePer/oneperType01_2One.py
+++ b/tests/OnePer/oneperType01_2One.py
@@ -631,10 +631,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -649,6 +650,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -663,8 +666,8 @@ def _cast(typ, value):
 
 class oneperType01_1(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('username', 'xs:string', 0),
-        MemberSpec_('inner01', 'oneperType01_2', 0),
+        MemberSpec_('username', 'xs:string', 0, 0),
+        MemberSpec_('inner01', 'oneperType01_2', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -749,7 +752,7 @@ class oneperType01_1(GeneratedsSuper):
 
 class oneperType01_2(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('userdescription', 'xs:string', 0),
+        MemberSpec_('userdescription', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/OnePer/oneperType02_2One.py b/tests/OnePer/oneperType02_2One.py
index 06578e2..55cbdf0 100644
--- a/tests/OnePer/oneperType02_2One.py
+++ b/tests/OnePer/oneperType02_2One.py
@@ -631,10 +631,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -649,6 +650,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -663,8 +666,8 @@ def _cast(typ, value):
 
 class oneperType02_1(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('clientname', 'xs:string', 0),
-        MemberSpec_('inner01', 'oneperType02_2', 0),
+        MemberSpec_('clientname', 'xs:string', 0, 0),
+        MemberSpec_('inner01', 'oneperType02_2', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -749,7 +752,7 @@ class oneperType02_1(GeneratedsSuper):
 
 class oneperType02_2(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('clientdescription', 'xs:string', 0),
+        MemberSpec_('clientdescription', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/OnePer/oneperType03_2One.py b/tests/OnePer/oneperType03_2One.py
index 6bea073..f34f726 100644
--- a/tests/OnePer/oneperType03_2One.py
+++ b/tests/OnePer/oneperType03_2One.py
@@ -631,10 +631,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -649,6 +650,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -663,8 +666,8 @@ def _cast(typ, value):
 
 class oneperType03_1(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('helpername', 'xs:string', 0),
-        MemberSpec_('inner01', 'oneperType02_2', 0),
+        MemberSpec_('helpername', 'xs:string', 0, 0),
+        MemberSpec_('inner01', 'oneperType02_2', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -749,7 +752,7 @@ class oneperType03_1(GeneratedsSuper):
 
 class oneperType03_2(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('helperdescription', 'xs:string', 0),
+        MemberSpec_('helperdescription', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/abstract_type1_sup.py b/tests/abstract_type1_sup.py
index 08422d5..7d63ed1 100644
--- a/tests/abstract_type1_sup.py
+++ b/tests/abstract_type1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,7 +665,7 @@ def _cast(typ, value):
 
 class carrierType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('fleet', 'Vehicle', 1),
+        MemberSpec_('fleet', 'Vehicle', 1, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/annotations1_sup.py b/tests/annotations1_sup.py
index 87aa8d7..f7b7f4c 100644
--- a/tests/annotations1_sup.py
+++ b/tests/annotations1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -665,8 +668,8 @@ class document1Type(GeneratedsSuper):
     test purposes. It should make a somewhat uninteresting
     docstring."""
     member_data_items_ = [
-        MemberSpec_('comments', 'xs:string', 0),
-        MemberSpec_('otherdoc', 'document2Type', 0),
+        MemberSpec_('comments', 'xs:string', 0, 0),
+        MemberSpec_('otherdoc', 'document2Type', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -754,9 +757,9 @@ class document2Type(GeneratedsSuper):
     test purposes. It should make a somewhat uninteresting
     docstring."""
     member_data_items_ = [
-        MemberSpec_('comments', 'xs:string', 0),
-        MemberSpec_('rating', 'xs:integer', 0),
-        MemberSpec_('anotherdoc', 'document3Type', 0),
+        MemberSpec_('comments', 'xs:string', 0, 0),
+        MemberSpec_('rating', 'xs:integer', 0, 0),
+        MemberSpec_('anotherdoc', 'document3Type', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -857,8 +860,8 @@ class document2Type(GeneratedsSuper):
 class document3Type(GeneratedsSuper):
     """This is a element of Type 3. It is short."""
     member_data_items_ = [
-        MemberSpec_('comments', 'xs:string', 0),
-        MemberSpec_('rating', 'xs:integer', 0),
+        MemberSpec_('comments', 'xs:string', 0, 0),
+        MemberSpec_('rating', 'xs:integer', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/anonymous_type1_sup.py b/tests/anonymous_type1_sup.py
index e373bf8..54f4775 100644
--- a/tests/anonymous_type1_sup.py
+++ b/tests/anonymous_type1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,9 +665,9 @@ def _cast(typ, value):
 
 class FooList(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('Foo', 'FooType1', 0),
-        MemberSpec_('Bar', 'BarType2', 0),
-        MemberSpec_('Baz', 'BazType3', 0),
+        MemberSpec_('Foo', 'FooType1', 0, 0),
+        MemberSpec_('Bar', 'BarType2', 0, 0),
+        MemberSpec_('Baz', 'BazType3', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -760,7 +763,7 @@ class FooList(GeneratedsSuper):
 
 class FooType1(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('FooType', ['FooTypeType', 'xs:string'], 0),
+        MemberSpec_('FooType', ['FooTypeType', 'xs:string'], 0, 0),
     ]
     subclass = None
     superclass = None
@@ -844,7 +847,7 @@ class FooType1(GeneratedsSuper):
 
 class BarType2(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('BarType', ['BarTypeType', 'xs:string'], 0),
+        MemberSpec_('BarType', ['BarTypeType', 'xs:string'], 0, 0),
     ]
     subclass = None
     superclass = None
@@ -928,7 +931,7 @@ class BarType2(GeneratedsSuper):
 
 class BazType3(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('BazType', ['BazTypeType', 'xs:string'], 0),
+        MemberSpec_('BazType', ['BazTypeType', 'xs:string'], 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/anysimpletype1_sup.py b/tests/anysimpletype1_sup.py
index 28a1450..37b25dc 100644
--- a/tests/anysimpletype1_sup.py
+++ b/tests/anysimpletype1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,8 +665,8 @@ def _cast(typ, value):
 
 class test1element(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('test1attribute', 'cimAnySimpleType', 0),
-        MemberSpec_('test1member', 'cimAnySimpleType', 0),
+        MemberSpec_('test1attribute', 'cimAnySimpleType', 0, 1),
+        MemberSpec_('test1member', 'cimAnySimpleType', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/anywildcard1_sup.py b/tests/anywildcard1_sup.py
index 2d7a08c..fc9d2dd 100644
--- a/tests/anywildcard1_sup.py
+++ b/tests/anywildcard1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,9 +665,9 @@ def _cast(typ, value):
 
 class PlantType_single(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('name', 'xs:string', 0),
-        MemberSpec_('', 'xs:string', 0),
-        MemberSpec_('description', 'DescriptionType', 0),
+        MemberSpec_('name', 'xs:string', 0, 0),
+        MemberSpec_('', 'xs:string', 0, 0),
+        MemberSpec_('description', 'DescriptionType', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -759,9 +762,9 @@ class PlantType_single(GeneratedsSuper):
 
 class PlantType_multiple(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('name', 'xs:string', 0),
-        MemberSpec_('', 'xs:string', 1),
-        MemberSpec_('description', 'DescriptionType', 0),
+        MemberSpec_('name', 'xs:string', 0, 0),
+        MemberSpec_('', 'xs:string', 1, 0),
+        MemberSpec_('description', 'DescriptionType', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -862,8 +865,8 @@ class PlantType_multiple(GeneratedsSuper):
 class DescriptionType(GeneratedsSuper):
     """A standard complexType."""
     member_data_items_ = [
-        MemberSpec_('name', 'xs:string', 0),
-        MemberSpec_('size', 'xs:string', 0),
+        MemberSpec_('name', 'xs:string', 0, 0),
+        MemberSpec_('size', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -949,8 +952,8 @@ class DescriptionType(GeneratedsSuper):
 class CatalogType(GeneratedsSuper):
     """A standard complexType."""
     member_data_items_ = [
-        MemberSpec_('name', 'xs:string', 0),
-        MemberSpec_('catagory', 'xs:integer', 0),
+        MemberSpec_('name', 'xs:string', 0, 0),
+        MemberSpec_('catagory', 'xs:integer', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1039,7 +1042,7 @@ class CatalogType(GeneratedsSuper):
 
 class PlantType_single_nochild(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('', 'xs:string', 0),
+        MemberSpec_('', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1111,7 +1114,7 @@ class PlantType_single_nochild(GeneratedsSuper):
 
 class PlantType_multiple_nochild(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('', 'xs:string', 1),
+        MemberSpec_('', 'xs:string', 1, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/attr_groups1_sup.py b/tests/attr_groups1_sup.py
index c9f62ff..064f970 100644
--- a/tests/attr_groups1_sup.py
+++ b/tests/attr_groups1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,16 +665,16 @@ def _cast(typ, value):
 
 class GetUserReq(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('sequence', 'xsd:unsignedLong', 0),
-        MemberSpec_('value01', 'xsd:string', 0),
-        MemberSpec_('value02', 'xsd:integer', 0),
-        MemberSpec_('value03', 'xsd:string', 0),
-        MemberSpec_('value04', 'xsd:integer', 0),
-        MemberSpec_('value05', 'xsd:string', 0),
-        MemberSpec_('value06', 'xsd:integer', 0),
-        MemberSpec_('value07', 'xsd:integer', 0),
-        MemberSpec_('value08', 'xsd:string', 0),
-        MemberSpec_('returnedTags', 'xsd:string', 0),
+        MemberSpec_('sequence', 'xsd:unsignedLong', 0, 1),
+        MemberSpec_('value01', 'xsd:string', 0, 1),
+        MemberSpec_('value02', 'xsd:integer', 0, 1),
+        MemberSpec_('value03', 'xsd:string', 0, 1),
+        MemberSpec_('value04', 'xsd:integer', 0, 1),
+        MemberSpec_('value05', 'xsd:string', 0, 1),
+        MemberSpec_('value06', 'xsd:integer', 0, 1),
+        MemberSpec_('value07', 'xsd:integer', 0, 1),
+        MemberSpec_('value08', 'xsd:string', 0, 1),
+        MemberSpec_('returnedTags', 'xsd:string', 0, 1),
     ]
     subclass = None
     superclass = None
diff --git a/tests/catalogtest1_sup.py b/tests/catalogtest1_sup.py
index 6fa48d3..0822668 100644
--- a/tests/catalogtest1_sup.py
+++ b/tests/catalogtest1_sup.py
@@ -631,10 +631,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -649,6 +650,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
diff --git a/tests/cdata1_sup.py b/tests/cdata1_sup.py
index af309dd..3ddcfae 100644
--- a/tests/cdata1_sup.py
+++ b/tests/cdata1_sup.py
@@ -631,10 +631,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -649,6 +650,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -663,7 +666,7 @@ def _cast(typ, value):
 
 class cdataListType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('cdatalist', 'cdataType', 1),
+        MemberSpec_('cdatalist', 'cdataType', 1, 1),
     ]
     subclass = None
     superclass = None
@@ -743,7 +746,7 @@ class cdataListType(GeneratedsSuper):
 
 class cdataType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('script', 'xs:string', 0),
+        MemberSpec_('script', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/check_results.rb b/tests/check_results.rb
index bdbec1e..f9ad8d8 100755
--- a/tests/check_results.rb
+++ b/tests/check_results.rb
@@ -65,6 +65,10 @@ $commands = [
   "diff -u cleanupname1_sup.py cleanupname2_sup.py",
   "diff -u rem_dup_elems1_sub.py rem_dup_elems2_sub.py",
   "diff -u rem_dup_elems1_sup.py rem_dup_elems2_sup.py",
+  "diff -u nested_def1_sub.py nested_def2_sub.py",
+  "diff -u nested_def1_sup.py nested_def2_sup.py",
+  "diff -u catalogtest1_sub.py catalogtest2_sub.py",
+  "diff -u catalogtest1_sup.py catalogtest2_sup.py",
 ]
 
 def check
diff --git a/tests/cleanupname1_sup.py b/tests/cleanupname1_sup.py
index 59f05e9..ce85f41 100644
--- a/tests/cleanupname1_sup.py
+++ b/tests/cleanupname1_sup.py
@@ -631,10 +631,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -649,6 +650,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -663,11 +666,11 @@ def _cast(typ, value):
 
 class dataKind(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('data1', 'data1Type', 0),
-        MemberSpec_('data2', 'TypeData2', 0),
-        MemberSpec_('data3', 'RealTypeData3', 0),
-        MemberSpec_('data4', 'AABBCCdataType', 0),
-        MemberSpec_('data5', 'dataTypeXYZAXYZ', 0),
+        MemberSpec_('data1', 'data1Type', 0, 0),
+        MemberSpec_('data2', 'TypeData2', 0, 0),
+        MemberSpec_('data3', 'RealTypeData3', 0, 0),
+        MemberSpec_('data4', 'AABBCCdataType', 0, 0),
+        MemberSpec_('data5', 'dataTypeXYZAXYZ', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -785,7 +788,7 @@ class dataKind(GeneratedsSuper):
 
 class data1Kind(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('content1', 'xs:string', 0),
+        MemberSpec_('content1', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -859,7 +862,7 @@ class data1Kind(GeneratedsSuper):
 
 class MlassData2(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('content1', 'xs:string', 0),
+        MemberSpec_('content1', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -933,7 +936,7 @@ class MlassData2(GeneratedsSuper):
 
 class RealTypeData3(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('content1', 'xs:string', 0),
+        MemberSpec_('content1', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1007,7 +1010,7 @@ class RealTypeData3(GeneratedsSuper):
 
 class MMMMMMdataKind(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('content1', 'xs:string', 0),
+        MemberSpec_('content1', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1081,7 +1084,7 @@ class MMMMMMdataKind(GeneratedsSuper):
 
 class dataTypeNNNMNNN(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('content1', 'xs:string', 0),
+        MemberSpec_('content1', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/defaults_cases1_sup.py b/tests/defaults_cases1_sup.py
index 7eb901a..6a6b5dc 100644
--- a/tests/defaults_cases1_sup.py
+++ b/tests/defaults_cases1_sup.py
@@ -629,10 +629,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -647,6 +648,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -661,8 +664,8 @@ def _cast(typ, value):
 
 class DefaultTypes(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('default1', 'DefaultType1', 1),
-        MemberSpec_('default2', 'DefaultType2', 1),
+        MemberSpec_('default1', 'DefaultType1', 1, 0),
+        MemberSpec_('default2', 'DefaultType2', 1, 0),
     ]
     subclass = None
     superclass = None
@@ -759,14 +762,14 @@ class DefaultTypes(GeneratedsSuper):
 
 class DefaultType1(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('normal01', 'xs:integer', 0),
-        MemberSpec_('normal02', 'xs:string', 0),
-        MemberSpec_('default01', 'xs:integer', 0),
-        MemberSpec_('default02', 'xs:string', 0),
-        MemberSpec_('normal03', 'xs:float', 0),
-        MemberSpec_('normal04', 'xs:double', 0),
-        MemberSpec_('default03', 'xs:float', 0),
-        MemberSpec_('default04', 'xs:double', 0),
+        MemberSpec_('normal01', 'xs:integer', 0, 1),
+        MemberSpec_('normal02', 'xs:string', 0, 1),
+        MemberSpec_('default01', 'xs:integer', 0, 1),
+        MemberSpec_('default02', 'xs:string', 0, 1),
+        MemberSpec_('normal03', 'xs:float', 0, 0),
+        MemberSpec_('normal04', 'xs:double', 0, 0),
+        MemberSpec_('default03', 'xs:float', 0, 0),
+        MemberSpec_('default04', 'xs:double', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -941,10 +944,10 @@ class DefaultType1(GeneratedsSuper):
 
 class DefaultType2(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('attrdefault01', 'xs:string', 0),
-        MemberSpec_('attrdefault02', 'xs:integer', 0),
-        MemberSpec_('attrnormal01', 'xs:string', 0),
-        MemberSpec_('attrnormal02', 'xs:integer', 0),
+        MemberSpec_('attrdefault01', 'xs:string', 0, 1),
+        MemberSpec_('attrdefault02', 'xs:integer', 0, 1),
+        MemberSpec_('attrnormal01', 'xs:string', 0, 1),
+        MemberSpec_('attrnormal02', 'xs:integer', 0, 1),
     ]
     subclass = None
     superclass = None
diff --git a/tests/defaults_coverage1_sup.py b/tests/defaults_coverage1_sup.py
index 702722d..7808d17 100644
--- a/tests/defaults_coverage1_sup.py
+++ b/tests/defaults_coverage1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,8 +665,8 @@ def _cast(typ, value):
 
 class DefaultTypes(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('default1', 'DefaultType1', 0),
-        MemberSpec_('default2', 'DefaultType2', 0),
+        MemberSpec_('default1', 'DefaultType1', 0, 0),
+        MemberSpec_('default2', 'DefaultType2', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -748,23 +751,23 @@ class DefaultTypes(GeneratedsSuper):
 
 class DefaultType1(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('default01', 'xs:integer', 0),
-        MemberSpec_('normal01', 'xs:integer', 0),
-        MemberSpec_('default02', 'xs:string', 0),
-        MemberSpec_('normal02', 'xs:string', 0),
-        MemberSpec_('default03', 'xs:float', 0),
-        MemberSpec_('normal03', 'xs:float', 0),
-        MemberSpec_('default04', 'xs:double', 0),
-        MemberSpec_('normal04', 'xs:double', 0),
-        MemberSpec_('default05a', 'xs:boolean', 0),
-        MemberSpec_('default05b', 'xs:boolean', 0),
-        MemberSpec_('normal05', 'xs:boolean', 0),
-        MemberSpec_('default06', 'xs:date', 0),
-        MemberSpec_('normal06', 'xs:date', 0),
-        MemberSpec_('default07', 'xs:time', 0),
-        MemberSpec_('normal07', 'xs:date', 0),
-        MemberSpec_('default08', 'xs:dateTime', 0),
-        MemberSpec_('normal08', 'xs:dateTime', 0),
+        MemberSpec_('default01', 'xs:integer', 0, 1),
+        MemberSpec_('normal01', 'xs:integer', 0, 1),
+        MemberSpec_('default02', 'xs:string', 0, 1),
+        MemberSpec_('normal02', 'xs:string', 0, 1),
+        MemberSpec_('default03', 'xs:float', 0, 1),
+        MemberSpec_('normal03', 'xs:float', 0, 1),
+        MemberSpec_('default04', 'xs:double', 0, 1),
+        MemberSpec_('normal04', 'xs:double', 0, 1),
+        MemberSpec_('default05a', 'xs:boolean', 0, 1),
+        MemberSpec_('default05b', 'xs:boolean', 0, 1),
+        MemberSpec_('normal05', 'xs:boolean', 0, 1),
+        MemberSpec_('default06', 'xs:date', 0, 1),
+        MemberSpec_('normal06', 'xs:date', 0, 1),
+        MemberSpec_('default07', 'xs:time', 0, 1),
+        MemberSpec_('normal07', 'xs:date', 0, 1),
+        MemberSpec_('default08', 'xs:dateTime', 0, 1),
+        MemberSpec_('normal08', 'xs:dateTime', 0, 1),
     ]
     subclass = None
     superclass = None
@@ -1080,23 +1083,23 @@ class DefaultType1(GeneratedsSuper):
 
 class DefaultType2(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('default01', 'xs:integer', 0),
-        MemberSpec_('normal01', 'xs:integer', 0),
-        MemberSpec_('default02', 'xs:string', 0),
-        MemberSpec_('normal02', 'xs:string', 0),
-        MemberSpec_('default03', 'xs:float', 0),
-        MemberSpec_('normal03', 'xs:float', 0),
-        MemberSpec_('default04', 'xs:double', 0),
-        MemberSpec_('normal04', 'xs:double', 0),
-        MemberSpec_('default05a', 'xs:boolean', 0),
-        MemberSpec_('default05b', 'xs:boolean', 0),
-        MemberSpec_('normal05', 'xs:boolean', 0),
-        MemberSpec_('default06', 'xs:date', 0),
-        MemberSpec_('normal06', 'xs:date', 0),
-        MemberSpec_('default07', 'xs:time', 0),
-        MemberSpec_('normal07', 'xs:date', 0),
-        MemberSpec_('default08', 'xs:dateTime', 0),
-        MemberSpec_('normal08', 'xs:dateTime', 0),
+        MemberSpec_('default01', 'xs:integer', 0, 0),
+        MemberSpec_('normal01', 'xs:integer', 0, 0),
+        MemberSpec_('default02', 'xs:string', 0, 0),
+        MemberSpec_('normal02', 'xs:string', 0, 0),
+        MemberSpec_('default03', 'xs:float', 0, 0),
+        MemberSpec_('normal03', 'xs:float', 0, 0),
+        MemberSpec_('default04', 'xs:double', 0, 0),
+        MemberSpec_('normal04', 'xs:double', 0, 0),
+        MemberSpec_('default05a', 'xs:boolean', 0, 0),
+        MemberSpec_('default05b', 'xs:boolean', 0, 0),
+        MemberSpec_('normal05', 'xs:boolean', 0, 0),
+        MemberSpec_('default06', 'xs:date', 0, 0),
+        MemberSpec_('normal06', 'xs:date', 0, 0),
+        MemberSpec_('default07', 'xs:time', 0, 0),
+        MemberSpec_('normal07', 'xs:date', 0, 0),
+        MemberSpec_('default08', 'xs:dateTime', 0, 0),
+        MemberSpec_('normal08', 'xs:dateTime', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/extensions1_sup.py b/tests/extensions1_sup.py
index 5f3cb9a..18b6c74 100644
--- a/tests/extensions1_sup.py
+++ b/tests/extensions1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,7 +665,7 @@ def _cast(typ, value):
 
 class SpecialDate(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('SpecialProperty', 'xs:string', 0),
+        MemberSpec_('SpecialProperty', 'xs:string', 0, 1),
         MemberSpec_('valueOf_', 'xs:date', 0),
     ]
     subclass = None
@@ -737,7 +740,7 @@ class SpecialDate(GeneratedsSuper):
 
 class ExtremeDate(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('ExtremeProperty', 'xs:string', 0),
+        MemberSpec_('ExtremeProperty', 'xs:string', 0, 1),
         MemberSpec_('valueOf_', ['RelationType', 'RelationType2', 'RelationType3', 'xs:string'], 0),
     ]
     subclass = None
@@ -812,7 +815,7 @@ class ExtremeDate(GeneratedsSuper):
 
 class singleExtremeDate(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('ExtremeProperty', 'xs:string', 0),
+        MemberSpec_('ExtremeProperty', 'xs:string', 0, 1),
         MemberSpec_('valueOf_', 'xs:string', 0),
     ]
     subclass = None
@@ -887,8 +890,8 @@ class singleExtremeDate(GeneratedsSuper):
 
 class containerType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('simplefactoid', 'simpleFactoidType', 1),
-        MemberSpec_('mixedfactoid', 'mixedFactoidType', 0),
+        MemberSpec_('simplefactoid', 'simpleFactoidType', 1, 0),
+        MemberSpec_('mixedfactoid', 'mixedFactoidType', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -979,7 +982,7 @@ class containerType(GeneratedsSuper):
 
 class simpleFactoidType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('relation', ['RelationType', 'RelationType2', 'RelationType3', 'xs:string'], 0),
+        MemberSpec_('relation', ['RelationType', 'RelationType2', 'RelationType3', 'xs:string'], 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1086,7 +1089,7 @@ class simpleFactoidType(GeneratedsSuper):
 
 class mixedFactoidType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('relation', ['RelationType', 'RelationType2', 'RelationType3', 'xs:string'], 0),
+        MemberSpec_('relation', ['RelationType', 'RelationType2', 'RelationType3', 'xs:string'], 0, 0),
         MemberSpec_('valueOf_', [], 0),
     ]
     subclass = None
@@ -1211,8 +1214,8 @@ class mixedFactoidType(GeneratedsSuper):
 
 class BaseType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('BaseProperty1', 'xs:string', 0),
-        MemberSpec_('BaseProperty2', 'xs:string', 0),
+        MemberSpec_('BaseProperty1', 'xs:string', 0, 1),
+        MemberSpec_('BaseProperty2', 'xs:string', 0, 1),
         MemberSpec_('valueOf_', 'xs:string', 0),
     ]
     subclass = None
@@ -1308,8 +1311,8 @@ class BaseType(GeneratedsSuper):
 
 class DerivedType(BaseType):
     member_data_items_ = [
-        MemberSpec_('DerivedProperty1', 'xs:string', 0),
-        MemberSpec_('DerivedProperty2', 'xs:string', 0),
+        MemberSpec_('DerivedProperty1', 'xs:string', 0, 1),
+        MemberSpec_('DerivedProperty2', 'xs:string', 0, 1),
         MemberSpec_('valueOf_', 'BaseType', 0),
     ]
     subclass = None
@@ -1399,7 +1402,7 @@ class DerivedType(BaseType):
 
 class MyInteger(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('MyAttr', 'xs:string', 0),
+        MemberSpec_('MyAttr', 'xs:string', 0, 1),
         MemberSpec_('valueOf_', 'xs:integer', 0),
     ]
     subclass = None
@@ -1474,7 +1477,7 @@ class MyInteger(GeneratedsSuper):
 
 class MyBoolean(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('MyAttr', 'xs:string', 0),
+        MemberSpec_('MyAttr', 'xs:string', 0, 1),
         MemberSpec_('valueOf_', 'xs:boolean', 0),
     ]
     subclass = None
@@ -1549,7 +1552,7 @@ class MyBoolean(GeneratedsSuper):
 
 class MyFloat(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('MyAttr', 'xs:string', 0),
+        MemberSpec_('MyAttr', 'xs:string', 0, 1),
         MemberSpec_('valueOf_', 'xs:float', 0),
     ]
     subclass = None
@@ -1624,7 +1627,7 @@ class MyFloat(GeneratedsSuper):
 
 class MyDouble(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('MyAttr', 'xs:string', 0),
+        MemberSpec_('MyAttr', 'xs:string', 0, 1),
         MemberSpec_('valueOf_', 'xs:double', 0),
     ]
     subclass = None
diff --git a/tests/ipo1_sup.py b/tests/ipo1_sup.py
index 5a27592..a810324 100644
--- a/tests/ipo1_sup.py
+++ b/tests/ipo1_sup.py
@@ -629,10 +629,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -647,6 +648,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -661,11 +664,11 @@ def _cast(typ, value):
 
 class PurchaseOrderType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('orderDate', 'date', 0),
-        MemberSpec_('shipTo', 'Address', 0),
-        MemberSpec_('billTo', 'Address', 0),
-        MemberSpec_('comment', 'string', 0),
-        MemberSpec_('items', 'Items', 0),
+        MemberSpec_('orderDate', 'date', 0, 1),
+        MemberSpec_('shipTo', 'Address', 0, 0),
+        MemberSpec_('billTo', 'Address', 0, 0),
+        MemberSpec_('comment', 'string', 0, 1),
+        MemberSpec_('items', 'Items', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -789,7 +792,7 @@ class PurchaseOrderType(GeneratedsSuper):
 
 class Items(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('item', 'item', 1),
+        MemberSpec_('item', 'item', 1, 1),
     ]
     subclass = None
     superclass = None
@@ -869,12 +872,12 @@ class Items(GeneratedsSuper):
 
 class item(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('partNum', 'ipo:SKU', 0),
-        MemberSpec_('productName', 'string', 0),
-        MemberSpec_('quantity', ['quantity', 'positiveInteger'], 0),
-        MemberSpec_('USPrice', 'decimal', 0),
-        MemberSpec_('comment', 'string', 0),
-        MemberSpec_('shipDate', 'date', 0),
+        MemberSpec_('partNum', 'ipo:SKU', 0, 0),
+        MemberSpec_('productName', 'string', 0, 0),
+        MemberSpec_('quantity', ['quantity', 'positiveInteger'], 0, 0),
+        MemberSpec_('USPrice', 'decimal', 0, 0),
+        MemberSpec_('comment', 'string', 0, 1),
+        MemberSpec_('shipDate', 'date', 0, 1),
     ]
     subclass = None
     superclass = None
@@ -1075,9 +1078,9 @@ class quantity(GeneratedsSuper):
 
 class Address(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('name', 'string', 0),
-        MemberSpec_('street', 'string', 0),
-        MemberSpec_('city', 'string', 0),
+        MemberSpec_('name', 'string', 0, 0),
+        MemberSpec_('street', 'string', 0, 0),
+        MemberSpec_('city', 'string', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1183,8 +1186,8 @@ class Address(GeneratedsSuper):
 
 class USAddress(Address):
     member_data_items_ = [
-        MemberSpec_('state', ['USState', 'string'], 0),
-        MemberSpec_('zip', 'positiveInteger', 0),
+        MemberSpec_('state', ['USState', 'string'], 0, 0),
+        MemberSpec_('zip', 'positiveInteger', 0, 0),
     ]
     subclass = None
     superclass = Address
@@ -1294,8 +1297,8 @@ class USAddress(Address):
 
 class UKAddress(Address):
     member_data_items_ = [
-        MemberSpec_('exportCode', 'positiveInteger', 0),
-        MemberSpec_('postcode', 'string', 0),
+        MemberSpec_('exportCode', 'positiveInteger', 0, 1),
+        MemberSpec_('postcode', 'string', 0, 0),
     ]
     subclass = None
     superclass = Address
diff --git a/tests/ipo2_sup.py b/tests/ipo2_sup.py
index 5a27592..a810324 100644
--- a/tests/ipo2_sup.py
+++ b/tests/ipo2_sup.py
@@ -629,10 +629,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -647,6 +648,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -661,11 +664,11 @@ def _cast(typ, value):
 
 class PurchaseOrderType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('orderDate', 'date', 0),
-        MemberSpec_('shipTo', 'Address', 0),
-        MemberSpec_('billTo', 'Address', 0),
-        MemberSpec_('comment', 'string', 0),
-        MemberSpec_('items', 'Items', 0),
+        MemberSpec_('orderDate', 'date', 0, 1),
+        MemberSpec_('shipTo', 'Address', 0, 0),
+        MemberSpec_('billTo', 'Address', 0, 0),
+        MemberSpec_('comment', 'string', 0, 1),
+        MemberSpec_('items', 'Items', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -789,7 +792,7 @@ class PurchaseOrderType(GeneratedsSuper):
 
 class Items(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('item', 'item', 1),
+        MemberSpec_('item', 'item', 1, 1),
     ]
     subclass = None
     superclass = None
@@ -869,12 +872,12 @@ class Items(GeneratedsSuper):
 
 class item(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('partNum', 'ipo:SKU', 0),
-        MemberSpec_('productName', 'string', 0),
-        MemberSpec_('quantity', ['quantity', 'positiveInteger'], 0),
-        MemberSpec_('USPrice', 'decimal', 0),
-        MemberSpec_('comment', 'string', 0),
-        MemberSpec_('shipDate', 'date', 0),
+        MemberSpec_('partNum', 'ipo:SKU', 0, 0),
+        MemberSpec_('productName', 'string', 0, 0),
+        MemberSpec_('quantity', ['quantity', 'positiveInteger'], 0, 0),
+        MemberSpec_('USPrice', 'decimal', 0, 0),
+        MemberSpec_('comment', 'string', 0, 1),
+        MemberSpec_('shipDate', 'date', 0, 1),
     ]
     subclass = None
     superclass = None
@@ -1075,9 +1078,9 @@ class quantity(GeneratedsSuper):
 
 class Address(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('name', 'string', 0),
-        MemberSpec_('street', 'string', 0),
-        MemberSpec_('city', 'string', 0),
+        MemberSpec_('name', 'string', 0, 0),
+        MemberSpec_('street', 'string', 0, 0),
+        MemberSpec_('city', 'string', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1183,8 +1186,8 @@ class Address(GeneratedsSuper):
 
 class USAddress(Address):
     member_data_items_ = [
-        MemberSpec_('state', ['USState', 'string'], 0),
-        MemberSpec_('zip', 'positiveInteger', 0),
+        MemberSpec_('state', ['USState', 'string'], 0, 0),
+        MemberSpec_('zip', 'positiveInteger', 0, 0),
     ]
     subclass = None
     superclass = Address
@@ -1294,8 +1297,8 @@ class USAddress(Address):
 
 class UKAddress(Address):
     member_data_items_ = [
-        MemberSpec_('exportCode', 'positiveInteger', 0),
-        MemberSpec_('postcode', 'string', 0),
+        MemberSpec_('exportCode', 'positiveInteger', 0, 1),
+        MemberSpec_('postcode', 'string', 0, 0),
     ]
     subclass = None
     superclass = Address
diff --git a/tests/mapcleanname1_sup.py b/tests/mapcleanname1_sup.py
index 02e1136..f6017af 100644
--- a/tests/mapcleanname1_sup.py
+++ b/tests/mapcleanname1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,10 +665,10 @@ def _cast(typ, value):
 
 class complex_type01(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('string_value01', 'xs:string', 0),
-        MemberSpec_('integer_value01', 'xs:integer', 1),
-        MemberSpec_('float_value01', 'xs:float', 0),
-        MemberSpec_('field01', 'complex-type02', 0),
+        MemberSpec_('string_value01', 'xs:string', 0, 0),
+        MemberSpec_('integer_value01', 'xs:integer', 1, 1),
+        MemberSpec_('float_value01', 'xs:float', 0, 0),
+        MemberSpec_('field01', 'complex-type02', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -786,9 +789,9 @@ class complex_type01(GeneratedsSuper):
 
 class complex_type02(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('string_value02', 'xs:string', 0),
-        MemberSpec_('integer_value02', 'xs:integer', 1),
-        MemberSpec_('float_value02', 'xs:float', 0),
+        MemberSpec_('string_value02', 'xs:string', 0, 0),
+        MemberSpec_('integer_value02', 'xs:integer', 1, 1),
+        MemberSpec_('float_value02', 'xs:float', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -908,9 +911,9 @@ class complex_type02(GeneratedsSuper):
 
 class complex_type03(complex_type02):
     member_data_items_ = [
-        MemberSpec_('string_value03', 'xs:string', 0),
-        MemberSpec_('integer_value03', 'xs:integer', 1),
-        MemberSpec_('float_value03', 'xs:float', 0),
+        MemberSpec_('string_value03', 'xs:string', 0, 0),
+        MemberSpec_('integer_value03', 'xs:integer', 1, 1),
+        MemberSpec_('float_value03', 'xs:float', 0, 0),
     ]
     subclass = None
     superclass = complex_type02
@@ -1024,9 +1027,9 @@ class complex_type03(complex_type02):
 
 class type_(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('string_value02', 'xs:string', 0),
-        MemberSpec_('integer_value02', 'xs:integer', 1),
-        MemberSpec_('float_value02', 'xs:float', 0),
+        MemberSpec_('string_value02', 'xs:string', 0, 0),
+        MemberSpec_('integer_value02', 'xs:integer', 1, 1),
+        MemberSpec_('float_value02', 'xs:float', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1146,9 +1149,9 @@ class type_(GeneratedsSuper):
 
 class complex_type04(type_):
     member_data_items_ = [
-        MemberSpec_('string_value03', 'xs:string', 0),
-        MemberSpec_('integer_value03', 'xs:integer', 1),
-        MemberSpec_('float_value03', 'xs:float', 0),
+        MemberSpec_('string_value03', 'xs:string', 0, 0),
+        MemberSpec_('integer_value03', 'xs:integer', 1, 1),
+        MemberSpec_('float_value03', 'xs:float', 0, 0),
     ]
     subclass = None
     superclass = type_
@@ -1262,9 +1265,9 @@ class complex_type04(type_):
 
 class build_(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('string_value02', 'xs:string', 0),
-        MemberSpec_('integer_value02', 'xs:integer', 1),
-        MemberSpec_('float_value02', 'xs:float', 0),
+        MemberSpec_('string_value02', 'xs:string', 0, 0),
+        MemberSpec_('integer_value02', 'xs:integer', 1, 1),
+        MemberSpec_('float_value02', 'xs:float', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1384,9 +1387,9 @@ class build_(GeneratedsSuper):
 
 class complex_type05(build_):
     member_data_items_ = [
-        MemberSpec_('string_value03', 'xs:string', 0),
-        MemberSpec_('integer_value03', 'xs:integer', 1),
-        MemberSpec_('float_value03', 'xs:float', 0),
+        MemberSpec_('string_value03', 'xs:string', 0, 0),
+        MemberSpec_('integer_value03', 'xs:integer', 1, 1),
+        MemberSpec_('float_value03', 'xs:float', 0, 0),
     ]
     subclass = None
     superclass = build_
diff --git a/tests/nested_def1_sup.py b/tests/nested_def1_sup.py
index a0ca03d..8607979 100644
--- a/tests/nested_def1_sup.py
+++ b/tests/nested_def1_sup.py
@@ -629,10 +629,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -647,6 +648,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -661,8 +664,8 @@ def _cast(typ, value):
 
 class containerType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('item1', 'classAType', 0),
-        MemberSpec_('item2', 'classBType', 0),
+        MemberSpec_('item1', 'classAType', 0, 0),
+        MemberSpec_('item2', 'classBType', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -747,7 +750,7 @@ class containerType(GeneratedsSuper):
 
 class classAType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('inner', 'innerType', 0),
+        MemberSpec_('inner', 'innerType', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -821,7 +824,7 @@ class classAType(GeneratedsSuper):
 
 class classBType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('inner', 'innerType1', 0),
+        MemberSpec_('inner', 'innerType1', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -895,8 +898,8 @@ class classBType(GeneratedsSuper):
 
 class innerType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('attrA1', 'xs:string', 0),
-        MemberSpec_('attrA2', 'xs:string', 0),
+        MemberSpec_('attrA1', 'xs:string', 0, 1),
+        MemberSpec_('attrA2', 'xs:string', 0, 1),
     ]
     subclass = None
     superclass = None
@@ -975,8 +978,8 @@ class innerType(GeneratedsSuper):
 
 class innerType1(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('attrB1', 'xs:string', 0),
-        MemberSpec_('attrB2', 'xs:string', 0),
+        MemberSpec_('attrB1', 'xs:string', 0, 1),
+        MemberSpec_('attrB2', 'xs:string', 0, 1),
     ]
     subclass = None
     superclass = None
diff --git a/tests/out1_sup.py b/tests/out1_sup.py
index 7d3900a..3530bab 100644
--- a/tests/out1_sup.py
+++ b/tests/out1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,11 +665,11 @@ def _cast(typ, value):
 
 class people(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('comments', 'comments', 1),
-        MemberSpec_('person', 'person', 1),
-        MemberSpec_('programmer', 'programmer', 1),
-        MemberSpec_('python_programmer', 'python-programmer', 1),
-        MemberSpec_('java_programmer', 'java-programmer', 1),
+        MemberSpec_('comments', 'comments', 1, 0),
+        MemberSpec_('person', 'person', 1, 0),
+        MemberSpec_('programmer', 'programmer', 1, 0),
+        MemberSpec_('python_programmer', 'python-programmer', 1, 0),
+        MemberSpec_('java_programmer', 'java-programmer', 1, 0),
     ]
     subclass = None
     superclass = None
@@ -936,7 +939,7 @@ class people(GeneratedsSuper):
 
 class comments(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('emp', 'xs:string', 1),
+        MemberSpec_('emp', 'xs:string', 1, 0),
         MemberSpec_('valueOf_', [], 0),
     ]
     subclass = None
@@ -1100,17 +1103,17 @@ class comments(GeneratedsSuper):
 
 class person(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('value', 'xs:string', 0),
-        MemberSpec_('id', 'xs:integer', 0),
-        MemberSpec_('ratio', 'xs:float', 0),
-        MemberSpec_('fruit', 'xs:string', 0),
-        MemberSpec_('vegetable', 'xs:string', 0),
-        MemberSpec_('name', 'xs:string', 0),
-        MemberSpec_('interest', 'xs:string', 1),
-        MemberSpec_('category', 'xs:integer', 0),
-        MemberSpec_('agent', 'agent', 1),
-        MemberSpec_('promoter', 'booster', 1),
-        MemberSpec_('description', 'xs:string', 0),
+        MemberSpec_('value', 'xs:string', 0, 1),
+        MemberSpec_('id', 'xs:integer', 0, 1),
+        MemberSpec_('ratio', 'xs:float', 0, 1),
+        MemberSpec_('fruit', 'xs:string', 0, 1),
+        MemberSpec_('vegetable', 'xs:string', 0, 1),
+        MemberSpec_('name', 'xs:string', 0, 0),
+        MemberSpec_('interest', 'xs:string', 1, 0),
+        MemberSpec_('category', 'xs:integer', 0, 0),
+        MemberSpec_('agent', 'agent', 1, 0),
+        MemberSpec_('promoter', 'booster', 1, 0),
+        MemberSpec_('description', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1442,24 +1445,24 @@ class person(GeneratedsSuper):
 
 class programmer(person):
     member_data_items_ = [
-        MemberSpec_('language', 'xs:string', 0),
-        MemberSpec_('area', 'xs:string', 0),
-        MemberSpec_('attrposint', 'xs:positiveInteger', 0),
-        MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0),
-        MemberSpec_('attrnegint', 'xs:negativeInteger', 0),
-        MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0),
-        MemberSpec_('email', 'xs:string', 0),
-        MemberSpec_('elposint', 'xs:positiveInteger', 0),
-        MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0),
-        MemberSpec_('elnegint', 'xs:negativeInteger', 0),
-        MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0),
-        MemberSpec_('eldate', 'xs:date', 0),
-        MemberSpec_('eldatetime', 'xs:dateTime', 0),
-        MemberSpec_('eltoken', 'xs:token', 0),
-        MemberSpec_('elshort', 'xs:short', 0),
-        MemberSpec_('ellong', 'xs:long', 0),
-        MemberSpec_('elparam', 'param', 0),
-        MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0),
+        MemberSpec_('language', 'xs:string', 0, 1),
+        MemberSpec_('area', 'xs:string', 0, 1),
+        MemberSpec_('attrposint', 'xs:positiveInteger', 0, 1),
+        MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0, 1),
+        MemberSpec_('attrnegint', 'xs:negativeInteger', 0, 1),
+        MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0, 1),
+        MemberSpec_('email', 'xs:string', 0, 0),
+        MemberSpec_('elposint', 'xs:positiveInteger', 0, 0),
+        MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0, 0),
+        MemberSpec_('elnegint', 'xs:negativeInteger', 0, 0),
+        MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0, 0),
+        MemberSpec_('eldate', 'xs:date', 0, 0),
+        MemberSpec_('eldatetime', 'xs:dateTime', 0, 0),
+        MemberSpec_('eltoken', 'xs:token', 0, 0),
+        MemberSpec_('elshort', 'xs:short', 0, 0),
+        MemberSpec_('ellong', 'xs:long', 0, 0),
+        MemberSpec_('elparam', 'param', 0, 0),
+        MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0, 0),
     ]
     subclass = None
     superclass = person
@@ -1929,12 +1932,12 @@ class param(GeneratedsSuper):
     """Finding flow attribute unneccesary in practice. A unnamed parameter
     is unbound/skipped."""
     member_data_items_ = [
-        MemberSpec_('id', 'xs:string', 0),
-        MemberSpec_('name', 'xs:NCName', 0),
-        MemberSpec_('sid', 'xs:NCName', 0),
-        MemberSpec_('flow', 'FlowType', 0),
-        MemberSpec_('semantic', 'xs:token', 0),
-        MemberSpec_('type', 'xs:NMTOKEN', 0),
+        MemberSpec_('id', 'xs:string', 0, 1),
+        MemberSpec_('name', 'xs:NCName', 0, 1),
+        MemberSpec_('sid', 'xs:NCName', 0, 1),
+        MemberSpec_('flow', 'FlowType', 0, 1),
+        MemberSpec_('semantic', 'xs:token', 0, 1),
+        MemberSpec_('type', 'xs:NMTOKEN', 0, 0),
         MemberSpec_('valueOf_', 'xs:string', 0),
     ]
     subclass = None
@@ -2141,8 +2144,8 @@ class param(GeneratedsSuper):
 
 class python_programmer(programmer):
     member_data_items_ = [
-        MemberSpec_('nick-name', 'xs:string', 0),
-        MemberSpec_('favorite_editor', 'xs:string', 0),
+        MemberSpec_('nick-name', 'xs:string', 0, 1),
+        MemberSpec_('favorite_editor', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = programmer
@@ -2293,9 +2296,9 @@ class python_programmer(programmer):
 
 class java_programmer(programmer):
     member_data_items_ = [
-        MemberSpec_('nick-name', 'xs:string', 0),
-        MemberSpec_('status', 'xs:string', 0),
-        MemberSpec_('favorite_editor', 'xs:string', 0),
+        MemberSpec_('nick-name', 'xs:string', 0, 1),
+        MemberSpec_('status', 'xs:string', 0, 1),
+        MemberSpec_('favorite_editor', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = programmer
@@ -2460,10 +2463,10 @@ class java_programmer(programmer):
 
 class agent(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('priority', 'xs:float', 0),
-        MemberSpec_('info', 'info', 0),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('priority', 'xs:float', 0, 0),
+        MemberSpec_('info', 'info', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -2644,10 +2647,10 @@ class agent(GeneratedsSuper):
 
 class special_agent(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('priority', 'xs:float', 0),
-        MemberSpec_('info', 'info', 0),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('priority', 'xs:float', 0, 0),
+        MemberSpec_('info', 'info', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -2828,13 +2831,13 @@ class special_agent(GeneratedsSuper):
 
 class booster(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('other_name', 'xs:float', 0),
-        MemberSpec_('class_', 'xs:float', 0),
-        MemberSpec_('other_value', 'xs:float', 1),
-        MemberSpec_('type_', 'xs:float', 1),
-        MemberSpec_('client_handler', 'client-handlerType', 1),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('other_name', 'xs:float', 0, 0),
+        MemberSpec_('class_', 'xs:float', 0, 0),
+        MemberSpec_('other_value', 'xs:float', 1, 0),
+        MemberSpec_('type_', 'xs:float', 1, 0),
+        MemberSpec_('client_handler', 'client-handlerType', 1, 0),
     ]
     subclass = None
     superclass = None
@@ -3105,9 +3108,9 @@ class booster(GeneratedsSuper):
 
 class info(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('name', 'xs:string', 0),
-        MemberSpec_('type', 'xs:integer', 0),
-        MemberSpec_('rating', 'xs:float', 0),
+        MemberSpec_('name', 'xs:string', 0, 1),
+        MemberSpec_('type', 'xs:integer', 0, 1),
+        MemberSpec_('rating', 'xs:float', 0, 1),
     ]
     subclass = None
     superclass = None
@@ -3269,8 +3272,8 @@ class info(GeneratedsSuper):
 
 class client_handlerType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('fullname', 'xs:string', 0),
-        MemberSpec_('refid', 'xs:integer', 0),
+        MemberSpec_('fullname', 'xs:string', 0, 0),
+        MemberSpec_('refid', 'xs:integer', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/people_procincl1_sup.py b/tests/people_procincl1_sup.py
index dac3ff1..6898534 100644
--- a/tests/people_procincl1_sup.py
+++ b/tests/people_procincl1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -663,12 +666,12 @@ def _cast(typ, value):
 class people(GeneratedsSuper):
     """A list of people."""
     member_data_items_ = [
-        MemberSpec_('comments', 'comments', 1),
-        MemberSpec_('person', 'person', 1),
-        MemberSpec_('specialperson', 'specialperson', 1),
-        MemberSpec_('programmer', 'programmer', 1),
-        MemberSpec_('python_programmer', 'python-programmer', 1),
-        MemberSpec_('java_programmer', 'java-programmer', 1),
+        MemberSpec_('comments', 'comments', 1, 0),
+        MemberSpec_('person', 'person', 1, 0),
+        MemberSpec_('specialperson', 'specialperson', 1, 0),
+        MemberSpec_('programmer', 'programmer', 1, 0),
+        MemberSpec_('python_programmer', 'python-programmer', 1, 0),
+        MemberSpec_('java_programmer', 'java-programmer', 1, 0),
     ]
     subclass = None
     superclass = None
@@ -835,8 +838,8 @@ class people(GeneratedsSuper):
 
 class comments(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('emp', 'xs:string', 1),
-        MemberSpec_('bold', 'xs:string', 1),
+        MemberSpec_('emp', 'xs:string', 1, 0),
+        MemberSpec_('bold', 'xs:string', 1, 0),
         MemberSpec_('valueOf_', [], 0),
     ]
     subclass = None
@@ -954,17 +957,17 @@ class person(GeneratedsSuper):
     of people. They are each an extension of this base type of
     person."""
     member_data_items_ = [
-        MemberSpec_('value', 'xs:string', 0),
-        MemberSpec_('id', 'xs:integer', 0),
-        MemberSpec_('ratio', 'xs:float', 0),
-        MemberSpec_('fruit', 'xs:string', 0),
-        MemberSpec_('vegetable', 'xs:string', 0),
-        MemberSpec_('name', 'xs:string', 0),
-        MemberSpec_('interest', 'xs:string', 1),
-        MemberSpec_('category', 'xs:integer', 0),
-        MemberSpec_('agent', 'agent', 1),
-        MemberSpec_('promoter', 'booster', 1),
-        MemberSpec_('description', 'xs:string', 0),
+        MemberSpec_('value', 'xs:string', 0, 1),
+        MemberSpec_('id', 'xs:integer', 0, 1),
+        MemberSpec_('ratio', 'xs:float', 0, 1),
+        MemberSpec_('fruit', 'xs:string', 0, 1),
+        MemberSpec_('vegetable', 'xs:string', 0, 1),
+        MemberSpec_('name', 'xs:string', 0, 0),
+        MemberSpec_('interest', 'xs:string', 1, 0),
+        MemberSpec_('category', 'xs:integer', 0, 0),
+        MemberSpec_('agent', 'agent', 1, 0),
+        MemberSpec_('promoter', 'booster', 1, 0),
+        MemberSpec_('description', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1245,12 +1248,12 @@ class param(GeneratedsSuper):
     """Finding flow attribute unneccesary in practice. A unnamed parameter
     is unbound/skipped."""
     member_data_items_ = [
-        MemberSpec_('id', 'xs:string', 0),
-        MemberSpec_('name', 'xs:NCName', 0),
-        MemberSpec_('sid', 'xs:NCName', 0),
-        MemberSpec_('flow', 'FlowType', 0),
-        MemberSpec_('semantic', 'xs:token', 0),
-        MemberSpec_('type', 'xs:NMTOKEN', 0),
+        MemberSpec_('id', 'xs:string', 0, 1),
+        MemberSpec_('name', 'xs:NCName', 0, 1),
+        MemberSpec_('sid', 'xs:NCName', 0, 1),
+        MemberSpec_('flow', 'FlowType', 0, 1),
+        MemberSpec_('semantic', 'xs:token', 0, 1),
+        MemberSpec_('type', 'xs:NMTOKEN', 0, 0),
         MemberSpec_('valueOf_', 'xs:string', 0),
     ]
     subclass = None
@@ -1376,11 +1379,11 @@ class param(GeneratedsSuper):
 
 class agent(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('priority', 'xs:float', 0),
-        MemberSpec_('info', 'info', 0),
-        MemberSpec_('vehicle', 'vehicle', 1),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('priority', 'xs:float', 0, 0),
+        MemberSpec_('info', 'info', 0, 0),
+        MemberSpec_('vehicle', 'vehicle', 1, 1),
     ]
     subclass = None
     superclass = None
@@ -1524,10 +1527,10 @@ class special_agent(GeneratedsSuper):
     """This is a good kind of agent for testing the generation of Python
     bindings for an XML schema."""
     member_data_items_ = [
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('priority', 'xs:float', 0),
-        MemberSpec_('info', 'info', 0),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('priority', 'xs:float', 0, 0),
+        MemberSpec_('info', 'info', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1638,14 +1641,14 @@ class special_agent(GeneratedsSuper):
 
 class booster(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('member-id', 'xs:string', 0),
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('other_name', 'xs:float', 0),
-        MemberSpec_('class_', 'xs:float', 0),
-        MemberSpec_('other_value', 'xs:float', 1),
-        MemberSpec_('type_', 'xs:float', 1),
-        MemberSpec_('client_handler', 'client-handlerType', 1),
+        MemberSpec_('member-id', 'xs:string', 0, 1),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('other_name', 'xs:float', 0, 0),
+        MemberSpec_('class_', 'xs:float', 0, 0),
+        MemberSpec_('other_value', 'xs:float', 1, 0),
+        MemberSpec_('type_', 'xs:float', 1, 0),
+        MemberSpec_('client_handler', 'client-handlerType', 1, 0),
     ]
     subclass = None
     superclass = None
@@ -1827,9 +1830,9 @@ class booster(GeneratedsSuper):
 
 class info(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('name', 'xs:string', 0),
-        MemberSpec_('type', 'xs:integer', 0),
-        MemberSpec_('rating', 'xs:float', 0),
+        MemberSpec_('name', 'xs:string', 0, 1),
+        MemberSpec_('type', 'xs:integer', 0, 1),
+        MemberSpec_('rating', 'xs:float', 0, 1),
     ]
     subclass = None
     superclass = None
@@ -1924,7 +1927,7 @@ class info(GeneratedsSuper):
 
 class vehicle(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('wheelcount', 'xs:integer', 0),
+        MemberSpec_('wheelcount', 'xs:integer', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -2012,7 +2015,7 @@ class vehicle(GeneratedsSuper):
 
 class automobile(vehicle):
     member_data_items_ = [
-        MemberSpec_('drivername', 'xs:string', 0),
+        MemberSpec_('drivername', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = vehicle
@@ -2090,7 +2093,7 @@ class automobile(vehicle):
 
 class airplane(vehicle):
     member_data_items_ = [
-        MemberSpec_('pilotname', 'xs:string', 0),
+        MemberSpec_('pilotname', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = vehicle
@@ -2170,23 +2173,23 @@ class programmer(person):
     """A programmer type of person. Programmers are very special but also a
     little shy."""
     member_data_items_ = [
-        MemberSpec_('language', 'xs:string', 0),
-        MemberSpec_('area', 'xs:string', 0),
-        MemberSpec_('attrposint', 'xs:positiveInteger', 0),
-        MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0),
-        MemberSpec_('attrnegint', 'xs:negativeInteger', 0),
-        MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0),
-        MemberSpec_('email', 'xs:string', 0),
-        MemberSpec_('elposint', 'xs:positiveInteger', 0),
-        MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0),
-        MemberSpec_('elnegint', 'xs:negativeInteger', 0),
-        MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0),
-        MemberSpec_('eldate', 'xs:date', 0),
-        MemberSpec_('eltoken', 'xs:token', 0),
-        MemberSpec_('elshort', 'xs:short', 0),
-        MemberSpec_('ellong', 'xs:long', 0),
-        MemberSpec_('elparam', 'param', 0),
-        MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0),
+        MemberSpec_('language', 'xs:string', 0, 1),
+        MemberSpec_('area', 'xs:string', 0, 1),
+        MemberSpec_('attrposint', 'xs:positiveInteger', 0, 1),
+        MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0, 1),
+        MemberSpec_('attrnegint', 'xs:negativeInteger', 0, 1),
+        MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0, 1),
+        MemberSpec_('email', 'xs:string', 0, 0),
+        MemberSpec_('elposint', 'xs:positiveInteger', 0, 0),
+        MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0, 0),
+        MemberSpec_('elnegint', 'xs:negativeInteger', 0, 0),
+        MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0, 0),
+        MemberSpec_('eldate', 'xs:date', 0, 0),
+        MemberSpec_('eltoken', 'xs:token', 0, 0),
+        MemberSpec_('elshort', 'xs:short', 0, 0),
+        MemberSpec_('ellong', 'xs:long', 0, 0),
+        MemberSpec_('elparam', 'param', 0, 0),
+        MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0, 0),
     ]
     subclass = None
     superclass = person
@@ -2520,8 +2523,8 @@ class programmer(person):
 
 class client_handlerType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('fullname', 'xs:string', 0),
-        MemberSpec_('refid', 'xs:integer', 0),
+        MemberSpec_('fullname', 'xs:string', 0, 0),
+        MemberSpec_('refid', 'xs:integer', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -2613,9 +2616,9 @@ class java_programmer(programmer):
     Java programmers are nice also, but not as especially wonderful
     as Python programmers, of course."""
     member_data_items_ = [
-        MemberSpec_('nick-name', 'xs:string', 0),
-        MemberSpec_('status', 'xs:string', 0),
-        MemberSpec_('favorite_editor', 'xs:string', 0),
+        MemberSpec_('nick-name', 'xs:string', 0, 1),
+        MemberSpec_('status', 'xs:string', 0, 1),
+        MemberSpec_('favorite_editor', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = programmer
@@ -2715,8 +2718,8 @@ class python_programmer(programmer):
     """A Python programmer type of person. Programmers are very special and
     Python programmers are especially wonderful kinds of people."""
     member_data_items_ = [
-        MemberSpec_('nick-name', 'xs:string', 0),
-        MemberSpec_('favorite_editor', 'xs:string', 0),
+        MemberSpec_('nick-name', 'xs:string', 0, 1),
+        MemberSpec_('favorite_editor', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = programmer
diff --git a/tests/prefix_classname1_sup.py b/tests/prefix_classname1_sup.py
index eddff87..e0fa52d 100644
--- a/tests/prefix_classname1_sup.py
+++ b/tests/prefix_classname1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,11 +665,11 @@ def _cast(typ, value):
 
 class tomato_people(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('comments', 'comments', 1),
-        MemberSpec_('person', 'person', 1),
-        MemberSpec_('programmer', 'programmer', 1),
-        MemberSpec_('python_programmer', 'python-programmer', 1),
-        MemberSpec_('java_programmer', 'java-programmer', 1),
+        MemberSpec_('comments', 'comments', 1, 0),
+        MemberSpec_('person', 'person', 1, 0),
+        MemberSpec_('programmer', 'programmer', 1, 0),
+        MemberSpec_('python_programmer', 'python-programmer', 1, 0),
+        MemberSpec_('java_programmer', 'java-programmer', 1, 0),
     ]
     subclass = None
     superclass = None
@@ -816,7 +819,7 @@ class tomato_people(GeneratedsSuper):
 
 class tomato_comments(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('emp', 'xs:string', 1),
+        MemberSpec_('emp', 'xs:string', 1, 0),
         MemberSpec_('valueOf_', [], 0),
     ]
     subclass = None
@@ -916,17 +919,17 @@ class tomato_comments(GeneratedsSuper):
 
 class tomato_person(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('value', 'xs:string', 0),
-        MemberSpec_('id', 'xs:integer', 0),
-        MemberSpec_('ratio', 'xs:float', 0),
-        MemberSpec_('fruit', 'xs:string', 0),
-        MemberSpec_('vegetable', 'xs:string', 0),
-        MemberSpec_('name', 'xs:string', 0),
-        MemberSpec_('interest', 'xs:string', 1),
-        MemberSpec_('category', 'xs:integer', 0),
-        MemberSpec_('agent', 'agent', 1),
-        MemberSpec_('promoter', 'booster', 1),
-        MemberSpec_('description', 'xs:string', 0),
+        MemberSpec_('value', 'xs:string', 0, 1),
+        MemberSpec_('id', 'xs:integer', 0, 1),
+        MemberSpec_('ratio', 'xs:float', 0, 1),
+        MemberSpec_('fruit', 'xs:string', 0, 1),
+        MemberSpec_('vegetable', 'xs:string', 0, 1),
+        MemberSpec_('name', 'xs:string', 0, 0),
+        MemberSpec_('interest', 'xs:string', 1, 0),
+        MemberSpec_('category', 'xs:integer', 0, 0),
+        MemberSpec_('agent', 'agent', 1, 0),
+        MemberSpec_('promoter', 'booster', 1, 0),
+        MemberSpec_('description', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1142,24 +1145,24 @@ class tomato_person(GeneratedsSuper):
 
 class tomato_programmer(tomato_person):
     member_data_items_ = [
-        MemberSpec_('language', 'xs:string', 0),
-        MemberSpec_('area', 'xs:string', 0),
-        MemberSpec_('attrposint', 'xs:positiveInteger', 0),
-        MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0),
-        MemberSpec_('attrnegint', 'xs:negativeInteger', 0),
-        MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0),
-        MemberSpec_('email', 'xs:string', 0),
-        MemberSpec_('elposint', 'xs:positiveInteger', 0),
-        MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0),
-        MemberSpec_('elnegint', 'xs:negativeInteger', 0),
-        MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0),
-        MemberSpec_('eldate', 'xs:date', 0),
-        MemberSpec_('eldatetime', 'xs:dateTime', 0),
-        MemberSpec_('eltoken', 'xs:token', 0),
-        MemberSpec_('elshort', 'xs:short', 0),
-        MemberSpec_('ellong', 'xs:long', 0),
-        MemberSpec_('elparam', 'param', 0),
-        MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0),
+        MemberSpec_('language', 'xs:string', 0, 1),
+        MemberSpec_('area', 'xs:string', 0, 1),
+        MemberSpec_('attrposint', 'xs:positiveInteger', 0, 1),
+        MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0, 1),
+        MemberSpec_('attrnegint', 'xs:negativeInteger', 0, 1),
+        MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0, 1),
+        MemberSpec_('email', 'xs:string', 0, 0),
+        MemberSpec_('elposint', 'xs:positiveInteger', 0, 0),
+        MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0, 0),
+        MemberSpec_('elnegint', 'xs:negativeInteger', 0, 0),
+        MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0, 0),
+        MemberSpec_('eldate', 'xs:date', 0, 0),
+        MemberSpec_('eldatetime', 'xs:dateTime', 0, 0),
+        MemberSpec_('eltoken', 'xs:token', 0, 0),
+        MemberSpec_('elshort', 'xs:short', 0, 0),
+        MemberSpec_('ellong', 'xs:long', 0, 0),
+        MemberSpec_('elparam', 'param', 0, 0),
+        MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0, 0),
     ]
     subclass = None
     superclass = tomato_person
@@ -1510,12 +1513,12 @@ class tomato_param(GeneratedsSuper):
     """Finding flow attribute unneccesary in practice. A unnamed parameter
     is unbound/skipped."""
     member_data_items_ = [
-        MemberSpec_('id', 'xs:string', 0),
-        MemberSpec_('name', 'xs:NCName', 0),
-        MemberSpec_('sid', 'xs:NCName', 0),
-        MemberSpec_('flow', 'FlowType', 0),
-        MemberSpec_('semantic', 'xs:token', 0),
-        MemberSpec_('type', 'xs:NMTOKEN', 0),
+        MemberSpec_('id', 'xs:string', 0, 1),
+        MemberSpec_('name', 'xs:NCName', 0, 1),
+        MemberSpec_('sid', 'xs:NCName', 0, 1),
+        MemberSpec_('flow', 'FlowType', 0, 1),
+        MemberSpec_('semantic', 'xs:token', 0, 1),
+        MemberSpec_('type', 'xs:NMTOKEN', 0, 0),
         MemberSpec_('valueOf_', 'xs:string', 0),
     ]
     subclass = None
@@ -1641,8 +1644,8 @@ class tomato_param(GeneratedsSuper):
 
 class tomato_python_programmer(tomato_programmer):
     member_data_items_ = [
-        MemberSpec_('nick-name', 'xs:string', 0),
-        MemberSpec_('favorite_editor', 'xs:string', 0),
+        MemberSpec_('nick-name', 'xs:string', 0, 1),
+        MemberSpec_('favorite_editor', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = tomato_programmer
@@ -1730,9 +1733,9 @@ class tomato_python_programmer(tomato_programmer):
 
 class tomato_java_programmer(tomato_programmer):
     member_data_items_ = [
-        MemberSpec_('nick-name', 'xs:string', 0),
-        MemberSpec_('status', 'xs:string', 0),
-        MemberSpec_('favorite_editor', 'xs:string', 0),
+        MemberSpec_('nick-name', 'xs:string', 0, 1),
+        MemberSpec_('status', 'xs:string', 0, 1),
+        MemberSpec_('favorite_editor', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = tomato_programmer
@@ -1830,10 +1833,10 @@ class tomato_java_programmer(tomato_programmer):
 
 class tomato_agent(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('priority', 'xs:float', 0),
-        MemberSpec_('info', 'info', 0),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('priority', 'xs:float', 0, 0),
+        MemberSpec_('info', 'info', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1944,10 +1947,10 @@ class tomato_agent(GeneratedsSuper):
 
 class tomato_special_agent(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('priority', 'xs:float', 0),
-        MemberSpec_('info', 'info', 0),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('priority', 'xs:float', 0, 0),
+        MemberSpec_('info', 'info', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -2058,13 +2061,13 @@ class tomato_special_agent(GeneratedsSuper):
 
 class tomato_booster(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('other_name', 'xs:float', 0),
-        MemberSpec_('class_', 'xs:float', 0),
-        MemberSpec_('other_value', 'xs:float', 1),
-        MemberSpec_('type_', 'xs:float', 1),
-        MemberSpec_('client_handler', 'client-handlerType', 1),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('other_name', 'xs:float', 0, 0),
+        MemberSpec_('class_', 'xs:float', 0, 0),
+        MemberSpec_('other_value', 'xs:float', 1, 0),
+        MemberSpec_('type_', 'xs:float', 1, 0),
+        MemberSpec_('client_handler', 'client-handlerType', 1, 0),
     ]
     subclass = None
     superclass = None
@@ -2238,9 +2241,9 @@ class tomato_booster(GeneratedsSuper):
 
 class tomato_info(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('name', 'xs:string', 0),
-        MemberSpec_('type', 'xs:integer', 0),
-        MemberSpec_('rating', 'xs:float', 0),
+        MemberSpec_('name', 'xs:string', 0, 1),
+        MemberSpec_('type', 'xs:integer', 0, 1),
+        MemberSpec_('rating', 'xs:float', 0, 1),
     ]
     subclass = None
     superclass = None
@@ -2335,8 +2338,8 @@ class tomato_info(GeneratedsSuper):
 
 class tomato_client_handlerType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('fullname', 'xs:string', 0),
-        MemberSpec_('refid', 'xs:integer', 0),
+        MemberSpec_('fullname', 'xs:string', 0, 0),
+        MemberSpec_('refid', 'xs:integer', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/recursive_simpletype1_sup.py b/tests/recursive_simpletype1_sup.py
index 571ffda..b4201cf 100644
--- a/tests/recursive_simpletype1_sup.py
+++ b/tests/recursive_simpletype1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,9 +665,9 @@ def _cast(typ, value):
 
 class PersonType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('personId', 'xs:integer', 0),
-        MemberSpec_('fname', 'xs:string', 0),
-        MemberSpec_('lname', 'xs:string', 0),
+        MemberSpec_('personId', 'xs:integer', 0, 0),
+        MemberSpec_('fname', 'xs:string', 0, 0),
+        MemberSpec_('lname', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/reference_simpletype1_sup.py b/tests/reference_simpletype1_sup.py
index 849823a..6b00823 100644
--- a/tests/reference_simpletype1_sup.py
+++ b/tests/reference_simpletype1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -663,10 +666,10 @@ def _cast(typ, value):
 class dummy(GeneratedsSuper):
     """Comment describing your root element"""
     member_data_items_ = [
-        MemberSpec_('test_ref_attr', 'xs:integer', 0),
-        MemberSpec_('test_normal_attr', 'xs:integer', 0),
-        MemberSpec_('test_ref_element', 'xs:integer', 0),
-        MemberSpec_('test_normal_element', 'xs:integer', 0),
+        MemberSpec_('test_ref_attr', 'xs:integer', 0, 1),
+        MemberSpec_('test_normal_attr', 'xs:integer', 0, 1),
+        MemberSpec_('test_ref_element', 'xs:integer', 0, 0),
+        MemberSpec_('test_normal_element', 'xs:integer', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/rem_dup_elems1_sup.py b/tests/rem_dup_elems1_sup.py
index ee67fd2..3740da7 100644
--- a/tests/rem_dup_elems1_sup.py
+++ b/tests/rem_dup_elems1_sup.py
@@ -631,10 +631,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -649,6 +650,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -663,8 +666,8 @@ def _cast(typ, value):
 
 class authorsType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('author', 'author', 1),
-        MemberSpec_('cooperation', 'xsd:string', 1),
+        MemberSpec_('author', 'author', 1, 1),
+        MemberSpec_('cooperation', 'xsd:string', 1, 1),
     ]
     subclass = None
     superclass = None
@@ -761,7 +764,7 @@ class authorsType(GeneratedsSuper):
 
 class author(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('description', 'xsd:string', 0),
+        MemberSpec_('description', 'xsd:string', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/simplecontent_restriction1_sup.py b/tests/simplecontent_restriction1_sup.py
index 155013f..1533d86 100644
--- a/tests/simplecontent_restriction1_sup.py
+++ b/tests/simplecontent_restriction1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,13 +665,13 @@ def _cast(typ, value):
 
 class IdentifierType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('schemeID', 'xsd:normalizedString', 0),
-        MemberSpec_('schemeName', 'xsd:string', 0),
-        MemberSpec_('schemeAgencyID', 'xsd:normalizedString', 0),
-        MemberSpec_('schemeAgencyName', 'xsd:string', 0),
-        MemberSpec_('schemeVersionID', 'xsd:normalizedString', 0),
-        MemberSpec_('schemeDataURI', 'xsd:anyURI', 0),
-        MemberSpec_('schemeURI', 'xsd:anyURI', 0),
+        MemberSpec_('schemeID', 'xsd:normalizedString', 0, 1),
+        MemberSpec_('schemeName', 'xsd:string', 0, 1),
+        MemberSpec_('schemeAgencyID', 'xsd:normalizedString', 0, 1),
+        MemberSpec_('schemeAgencyName', 'xsd:string', 0, 1),
+        MemberSpec_('schemeVersionID', 'xsd:normalizedString', 0, 1),
+        MemberSpec_('schemeDataURI', 'xsd:anyURI', 0, 1),
+        MemberSpec_('schemeURI', 'xsd:anyURI', 0, 1),
         MemberSpec_('valueOf_', 'xsd:normalizedString', 0),
     ]
     subclass = None
diff --git a/tests/simpletype_memberspecs1_sup.py b/tests/simpletype_memberspecs1_sup.py
index 7531654..1aa4264 100644
--- a/tests/simpletype_memberspecs1_sup.py
+++ b/tests/simpletype_memberspecs1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,7 +665,7 @@ def _cast(typ, value):
 
 class SpecialDate(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('SpecialProperty', 'xs:string', 0),
+        MemberSpec_('SpecialProperty', 'xs:string', 0, 1),
         MemberSpec_('valueOf_', 'xs:date', 0),
     ]
     subclass = None
@@ -737,7 +740,7 @@ class SpecialDate(GeneratedsSuper):
 
 class ExtremeDate(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('ExtremeProperty', 'xs:string', 0),
+        MemberSpec_('ExtremeProperty', 'xs:string', 0, 1),
         MemberSpec_('valueOf_', ['RelationType', 'RelationType2', 'RelationType3', 'xs:string'], 0),
     ]
     subclass = None
diff --git a/tests/simpletypes_other1_sup.py b/tests/simpletypes_other1_sup.py
index 7efca4b..0c55d98 100644
--- a/tests/simpletypes_other1_sup.py
+++ b/tests/simpletypes_other1_sup.py
@@ -630,10 +630,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -648,6 +649,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -662,7 +665,7 @@ def _cast(typ, value):
 
 class simpleTypeTestsType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('simpleTypeTest', 'simpleTypeTestDefs', 1),
+        MemberSpec_('simpleTypeTest', 'simpleTypeTestDefs', 1, 0),
     ]
     subclass = None
     superclass = None
@@ -742,27 +745,27 @@ class simpleTypeTestsType(GeneratedsSuper):
 
 class simpleTypeTestDefs(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('datetime1', 'xs:gYear', 0),
-        MemberSpec_('datetime2', 'xs:gYearMonth', 0),
-        MemberSpec_('datetime3', 'xs:gMonth', 0),
-        MemberSpec_('datetime4', 'xs:gMonthDay', 0),
-        MemberSpec_('datetime5', 'xs:gDay', 0),
-        MemberSpec_('integerVal1', 'xs:integer', 0),
-        MemberSpec_('integerVal2', 'xs:integer', 1),
-        MemberSpec_('stringVal1', 'xs:string', 0),
-        MemberSpec_('stringVal2', 'xs:string', 1),
-        MemberSpec_('booleanVal1', 'xs:boolean', 0),
-        MemberSpec_('booleanVal2', 'xs:boolean', 1),
-        MemberSpec_('decimalVal1', 'xs:decimal', 0),
-        MemberSpec_('decimalVal2', 'xs:decimal', 1),
-        MemberSpec_('doubleVal1', 'xs:double', 0),
-        MemberSpec_('doubleVal2', 'xs:double', 1),
-        MemberSpec_('floatVal1', 'xs:float', 0),
-        MemberSpec_('floatVal2', 'xs:float', 1),
-        MemberSpec_('dateVal1', 'xs:date', 0),
-        MemberSpec_('dateVal2', 'xs:date', 1),
-        MemberSpec_('dateTimeVal1', 'xs:dateTime', 0),
-        MemberSpec_('dateTimeVal2', 'xs:dateTime', 1),
+        MemberSpec_('datetime1', 'xs:gYear', 0, 0),
+        MemberSpec_('datetime2', 'xs:gYearMonth', 0, 0),
+        MemberSpec_('datetime3', 'xs:gMonth', 0, 0),
+        MemberSpec_('datetime4', 'xs:gMonthDay', 0, 0),
+        MemberSpec_('datetime5', 'xs:gDay', 0, 0),
+        MemberSpec_('integerVal1', 'xs:integer', 0, 0),
+        MemberSpec_('integerVal2', 'xs:integer', 1, 1),
+        MemberSpec_('stringVal1', 'xs:string', 0, 0),
+        MemberSpec_('stringVal2', 'xs:string', 1, 1),
+        MemberSpec_('booleanVal1', 'xs:boolean', 0, 0),
+        MemberSpec_('booleanVal2', 'xs:boolean', 1, 1),
+        MemberSpec_('decimalVal1', 'xs:decimal', 0, 0),
+        MemberSpec_('decimalVal2', 'xs:decimal', 1, 1),
+        MemberSpec_('doubleVal1', 'xs:double', 0, 0),
+        MemberSpec_('doubleVal2', 'xs:double', 1, 1),
+        MemberSpec_('floatVal1', 'xs:float', 0, 0),
+        MemberSpec_('floatVal2', 'xs:float', 1, 1),
+        MemberSpec_('dateVal1', 'xs:date', 0, 0),
+        MemberSpec_('dateVal2', 'xs:date', 1, 1),
+        MemberSpec_('dateTimeVal1', 'xs:dateTime', 0, 0),
+        MemberSpec_('dateTimeVal2', 'xs:dateTime', 1, 1),
     ]
     subclass = None
     superclass = None
diff --git a/tests/test.py b/tests/test.py
index d76e266..dea1aea 100755
--- a/tests/test.py
+++ b/tests/test.py
@@ -62,7 +62,7 @@ class GenTest(unittest.TestCase):
         self.compareFiles('out1_sup.py', 'out2_sup.py', ignore=())
         self.compareFiles('out1_sub.py', 'out2_sub.py')
         # cleanup generated files
-        #self.remove('out2_sup.py')
+        self.remove('out2_sup.py')
         self.remove('out2_sub.py')
 
     def test_003_element_groups(self):
@@ -276,7 +276,7 @@ class GenTest(unittest.TestCase):
         self.failUnlessEqual(content1, content2)
         # cleanup generated files
         self.remove('literal2.py')
-        #self.remove('out2_sup.py')
+        self.remove('out2_sup.py')
         self.remove('out2_sub.py')
 
     def test_010_simplecontent_restriction(self):
@@ -834,7 +834,8 @@ class GenTest(unittest.TestCase):
             self.fail("Files differed:\n{}".format(diffs))
 
     def remove(self, filename):
-        os.remove(filename)
+        if False:
+            os.remove(filename)
 
 
 # Make the test suite.
diff --git a/tests/to_etree1_sup.py b/tests/to_etree1_sup.py
index a91bf21..347dcdc 100644
--- a/tests/to_etree1_sup.py
+++ b/tests/to_etree1_sup.py
@@ -632,10 +632,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -650,6 +651,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -664,12 +667,12 @@ def _cast(typ, value):
 
 class peopleType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('comments', 'commentsType', 1),
-        MemberSpec_('person', 'personType', 1),
-        MemberSpec_('specialperson', 'specialperson', 1),
-        MemberSpec_('programmer', 'programmerType', 1),
-        MemberSpec_('python_programmer', 'python-programmerType', 1),
-        MemberSpec_('java_programmer', 'java-programmerType', 1),
+        MemberSpec_('comments', 'commentsType', 1, 0),
+        MemberSpec_('person', 'personType', 1, 0),
+        MemberSpec_('specialperson', 'specialperson', 1, 0),
+        MemberSpec_('programmer', 'programmerType', 1, 0),
+        MemberSpec_('python_programmer', 'python-programmerType', 1, 0),
+        MemberSpec_('java_programmer', 'java-programmerType', 1, 0),
     ]
     subclass = None
     superclass = None
@@ -819,8 +822,8 @@ class peopleType(GeneratedsSuper):
 
 class commentsType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('emp', 'xs:string', 1),
-        MemberSpec_('bold', 'xs:string', 1),
+        MemberSpec_('emp', 'xs:string', 1, 0),
+        MemberSpec_('bold', 'xs:string', 1, 0),
         MemberSpec_('valueOf_', [], 0),
     ]
     subclass = None
@@ -921,19 +924,19 @@ class commentsType(GeneratedsSuper):
 
 class personType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('value', 'xs:string', 0),
-        MemberSpec_('id', 'xs:integer', 0),
-        MemberSpec_('ratio', 'xs:float', 0),
-        MemberSpec_('fruit', 'xs:string', 0),
-        MemberSpec_('vegetable', 'xs:string', 0),
-        MemberSpec_('name', 'xs:string', 0),
-        MemberSpec_('interest', 'xs:string', 1),
-        MemberSpec_('category', 'xs:integer', 0),
-        MemberSpec_('hot_agent', 'hot.agent', 0),
-        MemberSpec_('agent', 'agentType', 1),
-        MemberSpec_('promoter', 'boosterType', 1),
-        MemberSpec_('description', 'xs:string', 0),
-        MemberSpec_('range_', ['RangeType', 'xs:integer'], 0),
+        MemberSpec_('value', 'xs:string', 0, 1),
+        MemberSpec_('id', 'xs:integer', 0, 1),
+        MemberSpec_('ratio', 'xs:float', 0, 1),
+        MemberSpec_('fruit', 'xs:string', 0, 1),
+        MemberSpec_('vegetable', 'xs:string', 0, 1),
+        MemberSpec_('name', 'xs:string', 0, 0),
+        MemberSpec_('interest', 'xs:string', 1, 0),
+        MemberSpec_('category', 'xs:integer', 0, 0),
+        MemberSpec_('hot_agent', 'hot.agent', 0, 0),
+        MemberSpec_('agent', 'agentType', 1, 0),
+        MemberSpec_('promoter', 'boosterType', 1, 0),
+        MemberSpec_('description', 'xs:string', 0, 0),
+        MemberSpec_('range_', ['RangeType', 'xs:integer'], 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1206,25 +1209,25 @@ class specialperson(personType):
 
 class programmerType(personType):
     member_data_items_ = [
-        MemberSpec_('language', 'xs:string', 0),
-        MemberSpec_('area', 'xs:string', 0),
-        MemberSpec_('attrposint', 'xs:positiveInteger', 0),
-        MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0),
-        MemberSpec_('attrnegint', 'xs:negativeInteger', 0),
-        MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0),
-        MemberSpec_('email', 'xs:string', 0),
-        MemberSpec_('elposint', 'xs:positiveInteger', 0),
-        MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0),
-        MemberSpec_('elnegint', 'xs:negativeInteger', 0),
-        MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0),
-        MemberSpec_('eldate', 'xs:date', 0),
-        MemberSpec_('eldatetime', 'xs:dateTime', 0),
-        MemberSpec_('eldatetime1', 'xs:dateTime', 0),
-        MemberSpec_('eltoken', 'xs:token', 0),
-        MemberSpec_('elshort', 'xs:short', 0),
-        MemberSpec_('ellong', 'xs:long', 0),
-        MemberSpec_('elparam', 'paramType', 0),
-        MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0),
+        MemberSpec_('language', 'xs:string', 0, 1),
+        MemberSpec_('area', 'xs:string', 0, 1),
+        MemberSpec_('attrposint', 'xs:positiveInteger', 0, 1),
+        MemberSpec_('attrnonposint', 'xs:nonPositiveInteger', 0, 1),
+        MemberSpec_('attrnegint', 'xs:negativeInteger', 0, 1),
+        MemberSpec_('attrnonnegint', 'xs:nonNegativeInteger', 0, 1),
+        MemberSpec_('email', 'xs:string', 0, 0),
+        MemberSpec_('elposint', 'xs:positiveInteger', 0, 0),
+        MemberSpec_('elnonposint', 'xs:nonPositiveInteger', 0, 0),
+        MemberSpec_('elnegint', 'xs:negativeInteger', 0, 0),
+        MemberSpec_('elnonnegint', 'xs:nonNegativeInteger', 0, 0),
+        MemberSpec_('eldate', 'xs:date', 0, 0),
+        MemberSpec_('eldatetime', 'xs:dateTime', 0, 0),
+        MemberSpec_('eldatetime1', 'xs:dateTime', 0, 0),
+        MemberSpec_('eltoken', 'xs:token', 0, 0),
+        MemberSpec_('elshort', 'xs:short', 0, 0),
+        MemberSpec_('ellong', 'xs:long', 0, 0),
+        MemberSpec_('elparam', 'paramType', 0, 0),
+        MemberSpec_('elarraytypes', ['ArrayTypes', 'xs:NMTOKEN'], 0, 0),
     ]
     subclass = None
     superclass = personType
@@ -1560,12 +1563,12 @@ class programmerType(personType):
 
 class paramType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('id', 'xs:string', 0),
-        MemberSpec_('name', 'xs:NCName', 0),
-        MemberSpec_('sid', 'xs:NCName', 0),
-        MemberSpec_('flow', 'FlowType', 0),
-        MemberSpec_('semantic', 'xs:token', 0),
-        MemberSpec_('type', 'xs:NMTOKEN', 0),
+        MemberSpec_('id', 'xs:string', 0, 1),
+        MemberSpec_('name', 'xs:NCName', 0, 1),
+        MemberSpec_('sid', 'xs:NCName', 0, 1),
+        MemberSpec_('flow', 'FlowType', 0, 1),
+        MemberSpec_('semantic', 'xs:token', 0, 1),
+        MemberSpec_('type', 'xs:NMTOKEN', 0, 0),
         MemberSpec_('valueOf_', 'xs:string', 0),
     ]
     subclass = None
@@ -1682,12 +1685,12 @@ class paramType(GeneratedsSuper):
 
 class python_programmerType(programmerType):
     member_data_items_ = [
-        MemberSpec_('nick-name', 'xs:string', 0),
-        MemberSpec_('drcs_attr', 'xs:string', 0),
-        MemberSpec_('gui_developer', 'xs:boolean', 0),
-        MemberSpec_('favorite_editor', 'xs:string', 0),
-        MemberSpec_('flowvalue', ['FlowType', 'xs:integer'], 0),
-        MemberSpec_('drcs', 'xs:string', 0),
+        MemberSpec_('nick-name', 'xs:string', 0, 1),
+        MemberSpec_('drcs_attr', 'xs:string', 0, 1),
+        MemberSpec_('gui_developer', 'xs:boolean', 0, 1),
+        MemberSpec_('favorite_editor', 'xs:string', 0, 0),
+        MemberSpec_('flowvalue', ['FlowType', 'xs:integer'], 0, 0),
+        MemberSpec_('drcs', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = programmerType
@@ -1809,14 +1812,14 @@ class python_programmerType(programmerType):
 
 class java_programmerType(programmerType):
     member_data_items_ = [
-        MemberSpec_('nick-name', 'xs:string', 0),
-        MemberSpec_('status', 'xs:string', 0),
-        MemberSpec_('favorite_editor', 'xs:string', 0),
-        MemberSpec_('datetime1', 'xs:gYear', 0),
-        MemberSpec_('datetime2', 'xs:gYearMonth', 0),
-        MemberSpec_('datetime3', 'xs:gMonth', 0),
-        MemberSpec_('datetime4', 'xs:gMonthDay', 0),
-        MemberSpec_('datetime5', 'xs:gDay', 0),
+        MemberSpec_('nick-name', 'xs:string', 0, 1),
+        MemberSpec_('status', 'xs:string', 0, 1),
+        MemberSpec_('favorite_editor', 'xs:string', 0, 0),
+        MemberSpec_('datetime1', 'xs:gYear', 0, 0),
+        MemberSpec_('datetime2', 'xs:gYearMonth', 0, 0),
+        MemberSpec_('datetime3', 'xs:gMonth', 0, 0),
+        MemberSpec_('datetime4', 'xs:gMonthDay', 0, 0),
+        MemberSpec_('datetime5', 'xs:gDay', 0, 0),
     ]
     subclass = None
     superclass = programmerType
@@ -1946,11 +1949,11 @@ class java_programmerType(programmerType):
 
 class agentType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('priority', 'xs:float', 0),
-        MemberSpec_('info', 'infoType', 0),
-        MemberSpec_('vehicle', 'vehicleType', 1),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('priority', 'xs:float', 0, 0),
+        MemberSpec_('info', 'infoType', 0, 0),
+        MemberSpec_('vehicle', 'vehicleType', 1, 1),
     ]
     subclass = None
     superclass = None
@@ -2073,10 +2076,10 @@ class special_agentType(agentType):
     """This is a good kind of agent for testing the generation of Python
     bindings for an XML schema."""
     member_data_items_ = [
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('priority', 'xs:float', 0),
-        MemberSpec_('info', 'infoType', 0),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('priority', 'xs:float', 0, 0),
+        MemberSpec_('info', 'infoType', 0, 0),
     ]
     subclass = None
     superclass = agentType
@@ -2173,10 +2176,10 @@ class weird_agentType(agentType):
     """This is a good kind of agent for testing the generation of Python
     bindings for an XML schema."""
     member_data_items_ = [
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('priority', 'xs:float', 0),
-        MemberSpec_('info', 'infoType', 0),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('priority', 'xs:float', 0, 0),
+        MemberSpec_('info', 'infoType', 0, 0),
     ]
     subclass = None
     superclass = agentType
@@ -2271,14 +2274,14 @@ class weird_agentType(agentType):
 
 class boosterType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('member-id', 'xs:string', 0),
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('other_name', 'xs:float', 0),
-        MemberSpec_('class_', 'xs:float', 0),
-        MemberSpec_('other_value', 'xs:float', 1),
-        MemberSpec_('type_', 'xs:float', 1),
-        MemberSpec_('client_handler', 'client-handlerType', 1),
+        MemberSpec_('member-id', 'xs:string', 0, 1),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('other_name', 'xs:float', 0, 0),
+        MemberSpec_('class_', 'xs:float', 0, 0),
+        MemberSpec_('other_value', 'xs:float', 1, 0),
+        MemberSpec_('type_', 'xs:float', 1, 0),
+        MemberSpec_('client_handler', 'client-handlerType', 1, 0),
     ]
     subclass = None
     superclass = None
@@ -2441,9 +2444,9 @@ class boosterType(GeneratedsSuper):
 
 class infoType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('name', 'xs:string', 0),
-        MemberSpec_('type', 'xs:integer', 0),
-        MemberSpec_('rating', 'xs:float', 0),
+        MemberSpec_('name', 'xs:string', 0, 1),
+        MemberSpec_('type', 'xs:integer', 0, 1),
+        MemberSpec_('rating', 'xs:float', 0, 1),
     ]
     subclass = None
     superclass = None
@@ -2523,7 +2526,7 @@ class infoType(GeneratedsSuper):
 
 class vehicleType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('wheelcount', 'xs:integer', 0),
+        MemberSpec_('wheelcount', 'xs:integer', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -2592,7 +2595,7 @@ class vehicleType(GeneratedsSuper):
 
 class automobile(vehicleType):
     member_data_items_ = [
-        MemberSpec_('drivername', 'xs:string', 0),
+        MemberSpec_('drivername', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = vehicleType
@@ -2649,7 +2652,7 @@ class automobile(vehicleType):
 
 class airplane(vehicleType):
     member_data_items_ = [
-        MemberSpec_('pilotname', 'xs:string', 0),
+        MemberSpec_('pilotname', 'xs:string', 0, 0),
     ]
     subclass = None
     superclass = vehicleType
@@ -2706,10 +2709,10 @@ class airplane(vehicleType):
 
 class hot_agent(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('firstname', 'xs:string', 0),
-        MemberSpec_('lastname', 'xs:string', 0),
-        MemberSpec_('priority', 'xs:float', 0),
-        MemberSpec_('startDate', 'xs:date', 0),
+        MemberSpec_('firstname', 'xs:string', 0, 0),
+        MemberSpec_('lastname', 'xs:string', 0, 0),
+        MemberSpec_('priority', 'xs:float', 0, 0),
+        MemberSpec_('startDate', 'xs:date', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -2813,8 +2816,8 @@ class hot_agent(GeneratedsSuper):
 
 class client_handlerType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('fullname', 'xs:string', 0),
-        MemberSpec_('refid', 'xs:integer', 0),
+        MemberSpec_('fullname', 'xs:string', 0, 0),
+        MemberSpec_('refid', 'xs:integer', 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/validate_simpletypes1_sup.py b/tests/validate_simpletypes1_sup.py
index 7e21557..bef973b 100644
--- a/tests/validate_simpletypes1_sup.py
+++ b/tests/validate_simpletypes1_sup.py
@@ -629,10 +629,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -647,6 +648,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -661,11 +664,11 @@ def _cast(typ, value):
 
 class containerType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('sample1', 'simpleOneType', 1),
-        MemberSpec_('sample2_bad', 'simpleOneType', 1),
-        MemberSpec_('sample3_bad', 'simpleOneType', 1),
-        MemberSpec_('sample4_bad', 'simpleOneType', 1),
-        MemberSpec_('sample2', 'simpleTwoType', 1),
+        MemberSpec_('sample1', 'simpleOneType', 1, 0),
+        MemberSpec_('sample2_bad', 'simpleOneType', 1, 0),
+        MemberSpec_('sample3_bad', 'simpleOneType', 1, 0),
+        MemberSpec_('sample4_bad', 'simpleOneType', 1, 0),
+        MemberSpec_('sample2', 'simpleTwoType', 1, 0),
     ]
     subclass = None
     superclass = None
@@ -813,30 +816,30 @@ class containerType(GeneratedsSuper):
 
 class simpleOneType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('integer_range_1_value', ['integer_range_1_st', 'integer_range_2_st', 'xs:integer'], 0),
-        MemberSpec_('pattern_value', ['pattern_st', 'pattern_1_st', 'min_length_st', 'xs:string'], 0),
-        MemberSpec_('token_enum_value', ['token_enum_st', 'xs:NMTOKEN'], 0),
-        MemberSpec_('integer_range_incl_value', ['integer_range_incl_st', 'xs:integer'], 0),
-        MemberSpec_('integer_range_excl_value', ['integer_range_excl_st', 'xs:integer'], 0),
-        MemberSpec_('min_max_length_value', ['min_max_length_st', 'xs:string'], 0),
-        MemberSpec_('length_value', ['length_st', 'xs:string'], 0),
-        MemberSpec_('totalDigits_value', ['totalDigits_st', 'xs:decimal'], 0),
-        MemberSpec_('date_minincl_value', ['date_minincl_st', 'xs:date'], 0),
-        MemberSpec_('date_maxincl_value', ['date_maxincl_st', 'xs:date'], 0),
-        MemberSpec_('date_minexcl_value', ['date_minexcl_st', 'xs:date'], 0),
-        MemberSpec_('date_maxexcl_value', ['date_maxexcl_st', 'xs:date'], 0),
-        MemberSpec_('time_minincl_value', ['time_minincl_st', 'xs:time'], 0),
-        MemberSpec_('time_maxincl_value', ['time_maxincl_st', 'xs:time'], 0),
-        MemberSpec_('time_minexcl_value', ['time_minexcl_st', 'xs:time'], 0),
-        MemberSpec_('time_maxexcl_value', ['time_maxexcl_st', 'xs:time'], 0),
-        MemberSpec_('datetime_minincl_value', ['datetime_minincl_st', 'xs:dateTime'], 0),
-        MemberSpec_('datetime_maxincl_value', ['datetime_maxincl_st', 'xs:dateTime'], 0),
-        MemberSpec_('datetime_minexcl_value', ['datetime_minexcl_st', 'xs:dateTime'], 0),
-        MemberSpec_('datetime_maxexcl_value', ['datetime_maxexcl_st', 'xs:dateTime'], 0),
-        MemberSpec_('vbar_pattern_value', ['vbar_pattern_st', 'xs:string'], 0),
-        MemberSpec_('anonymous_float_value', ['anonymous_float_valueType', 'xs:float'], 0),
-        MemberSpec_('primative_integer', 'xs:integer', 0),
-        MemberSpec_('primative_float', 'xs:float', 0),
+        MemberSpec_('integer_range_1_value', ['integer_range_1_st', 'integer_range_2_st', 'xs:integer'], 0, 0),
+        MemberSpec_('pattern_value', ['pattern_st', 'pattern_1_st', 'min_length_st', 'xs:string'], 0, 0),
+        MemberSpec_('token_enum_value', ['token_enum_st', 'xs:NMTOKEN'], 0, 0),
+        MemberSpec_('integer_range_incl_value', ['integer_range_incl_st', 'xs:integer'], 0, 0),
+        MemberSpec_('integer_range_excl_value', ['integer_range_excl_st', 'xs:integer'], 0, 0),
+        MemberSpec_('min_max_length_value', ['min_max_length_st', 'xs:string'], 0, 0),
+        MemberSpec_('length_value', ['length_st', 'xs:string'], 0, 0),
+        MemberSpec_('totalDigits_value', ['totalDigits_st', 'xs:decimal'], 0, 0),
+        MemberSpec_('date_minincl_value', ['date_minincl_st', 'xs:date'], 0, 0),
+        MemberSpec_('date_maxincl_value', ['date_maxincl_st', 'xs:date'], 0, 0),
+        MemberSpec_('date_minexcl_value', ['date_minexcl_st', 'xs:date'], 0, 0),
+        MemberSpec_('date_maxexcl_value', ['date_maxexcl_st', 'xs:date'], 0, 0),
+        MemberSpec_('time_minincl_value', ['time_minincl_st', 'xs:time'], 0, 0),
+        MemberSpec_('time_maxincl_value', ['time_maxincl_st', 'xs:time'], 0, 0),
+        MemberSpec_('time_minexcl_value', ['time_minexcl_st', 'xs:time'], 0, 0),
+        MemberSpec_('time_maxexcl_value', ['time_maxexcl_st', 'xs:time'], 0, 0),
+        MemberSpec_('datetime_minincl_value', ['datetime_minincl_st', 'xs:dateTime'], 0, 0),
+        MemberSpec_('datetime_maxincl_value', ['datetime_maxincl_st', 'xs:dateTime'], 0, 0),
+        MemberSpec_('datetime_minexcl_value', ['datetime_minexcl_st', 'xs:dateTime'], 0, 0),
+        MemberSpec_('datetime_maxexcl_value', ['datetime_maxexcl_st', 'xs:dateTime'], 0, 0),
+        MemberSpec_('vbar_pattern_value', ['vbar_pattern_st', 'xs:string'], 0, 0),
+        MemberSpec_('anonymous_float_value', ['anonymous_float_valueType', 'xs:float'], 0, 0),
+        MemberSpec_('primative_integer', 'xs:integer', 0, 0),
+        MemberSpec_('primative_float', 'xs:float', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1426,7 +1429,7 @@ class simpleOneType(GeneratedsSuper):
 
 class simpleTwoType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('simpleTwoElementOne', 'simpleTwoElementOneType', 0),
+        MemberSpec_('simpleTwoElementOne', 'simpleTwoElementOneType', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1500,7 +1503,7 @@ class simpleTwoType(GeneratedsSuper):
 
 class simpleTwoElementOneType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('simpleTwoElementTwo', ['simpleTwoElementTwoType', 'xs:string'], 0),
+        MemberSpec_('simpleTwoElementTwo', ['simpleTwoElementTwoType', 'xs:string'], 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tests/validate_simpletypes1_warnings.txt b/tests/validate_simpletypes1_warnings.txt
index 0c0f475..ff17979 100644
--- a/tests/validate_simpletypes1_warnings.txt
+++ b/tests/validate_simpletypes1_warnings.txt
@@ -1,60 +1,60 @@
-tests/validate_simpletypes2_sup.py:990: UserWarning: Value "2" does not match xsd minExclusive restriction on integer_range_1_st
+tests/validate_simpletypes2_sup.py:993: UserWarning: Value "2" does not match xsd minExclusive restriction on integer_range_1_st
   warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on integer_range_1_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1000: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
+tests/validate_simpletypes2_sup.py:1003: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
   warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_pattern_st_patterns_, ))
-tests/validate_simpletypes2_sup.py:1013: UserWarning: Value "floatxx" does not match xsd enumeration restriction on token_enum_st
+tests/validate_simpletypes2_sup.py:1016: UserWarning: Value "floatxx" does not match xsd enumeration restriction on token_enum_st
   warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on token_enum_st' % {"value" : value.encode("utf-8")} )
-tests/validate_simpletypes2_sup.py:1020: UserWarning: Value "22" does not match xsd maxInclusive restriction on integer_range_incl_st
+tests/validate_simpletypes2_sup.py:1023: UserWarning: Value "22" does not match xsd maxInclusive restriction on integer_range_incl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on integer_range_incl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1025: UserWarning: Value "-40" does not match xsd minExclusive restriction on integer_range_excl_st
+tests/validate_simpletypes2_sup.py:1028: UserWarning: Value "-40" does not match xsd minExclusive restriction on integer_range_excl_st
   warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on integer_range_excl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1034: UserWarning: Value "mno pqr" does not match xsd minLength restriction on min_max_length_st
+tests/validate_simpletypes2_sup.py:1037: UserWarning: Value "mno pqr" does not match xsd minLength restriction on min_max_length_st
   warnings_.warn('Value "%(value)s" does not match xsd minLength restriction on min_max_length_st' % {"value" : value.encode("utf-8")} )
-tests/validate_simpletypes2_sup.py:1039: UserWarning: Value "012345" does not match xsd length restriction on length_st
+tests/validate_simpletypes2_sup.py:1042: UserWarning: Value "012345" does not match xsd length restriction on length_st
   warnings_.warn('Value "%(value)s" does not match xsd length restriction on length_st' % {"value" : value.encode("utf-8")} )
-tests/validate_simpletypes2_sup.py:1116: UserWarning: Value "0.2" does not match xsd minInclusive restriction on anonymous_float_valueType
+tests/validate_simpletypes2_sup.py:1119: UserWarning: Value "0.2" does not match xsd minInclusive restriction on anonymous_float_valueType
   warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on anonymous_float_valueType' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1110: UserWarning: Value "efgh" does not match xsd pattern restrictions: [['^abcd$|^ef\\|gh$']]
+tests/validate_simpletypes2_sup.py:1113: UserWarning: Value "efgh" does not match xsd pattern restrictions: [['^abcd$|^ef\\|gh$']]
   warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_vbar_pattern_st_patterns_, ))
-tests/validate_simpletypes2_sup.py:992: UserWarning: Value "9" does not match xsd maxExclusive restriction on integer_range_1_st
+tests/validate_simpletypes2_sup.py:995: UserWarning: Value "9" does not match xsd maxExclusive restriction on integer_range_1_st
   warnings_.warn('Value "%(value)s" does not match xsd maxExclusive restriction on integer_range_1_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1000: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
+tests/validate_simpletypes2_sup.py:1003: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
   warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_pattern_st_patterns_, ))
-tests/validate_simpletypes2_sup.py:1018: UserWarning: Value "-50" does not match xsd minInclusive restriction on integer_range_incl_st
+tests/validate_simpletypes2_sup.py:1021: UserWarning: Value "-50" does not match xsd minInclusive restriction on integer_range_incl_st
   warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on integer_range_incl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1032: UserWarning: Value "asdf asdf asdf asdf asdf asdf" does not match xsd maxLength restriction on min_max_length_st
+tests/validate_simpletypes2_sup.py:1035: UserWarning: Value "asdf asdf asdf asdf asdf asdf" does not match xsd maxLength restriction on min_max_length_st
   warnings_.warn('Value "%(value)s" does not match xsd maxLength restriction on min_max_length_st' % {"value" : value.encode("utf-8")} )
-tests/validate_simpletypes2_sup.py:1039: UserWarning: Value "01234567890" does not match xsd length restriction on length_st
+tests/validate_simpletypes2_sup.py:1042: UserWarning: Value "01234567890" does not match xsd length restriction on length_st
   warnings_.warn('Value "%(value)s" does not match xsd length restriction on length_st' % {"value" : value.encode("utf-8")} )
-tests/validate_simpletypes2_sup.py:1049: UserWarning: Value "2015-05-01" does not match xsd minInclusive restriction on date_minincl_st
+tests/validate_simpletypes2_sup.py:1052: UserWarning: Value "2015-05-01" does not match xsd minInclusive restriction on date_minincl_st
   warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on date_minincl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1054: UserWarning: Value "2015-11-01" does not match xsd maxInclusive restriction on date_maxincl_st
+tests/validate_simpletypes2_sup.py:1057: UserWarning: Value "2015-11-01" does not match xsd maxInclusive restriction on date_maxincl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on date_maxincl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1059: UserWarning: Value "2015-05-01" does not match xsd minExclusive restriction on date_minexcl_st
+tests/validate_simpletypes2_sup.py:1062: UserWarning: Value "2015-05-01" does not match xsd minExclusive restriction on date_minexcl_st
   warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on date_minexcl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1064: UserWarning: Value "2015-11-01" does not match xsd maxExclusive restriction on date_maxexcl_st
+tests/validate_simpletypes2_sup.py:1067: UserWarning: Value "2015-11-01" does not match xsd maxExclusive restriction on date_maxexcl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxExclusive restriction on date_maxexcl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1069: UserWarning: Value "13:30:00" does not match xsd minInclusive restriction on time_minincl_st
+tests/validate_simpletypes2_sup.py:1072: UserWarning: Value "13:30:00" does not match xsd minInclusive restriction on time_minincl_st
   warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on time_minincl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1074: UserWarning: Value "17:00:00" does not match xsd maxInclusive restriction on time_maxincl_st
+tests/validate_simpletypes2_sup.py:1077: UserWarning: Value "17:00:00" does not match xsd maxInclusive restriction on time_maxincl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on time_maxincl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1079: UserWarning: Value "13:30:00" does not match xsd minExclusive restriction on time_minexcl_st
+tests/validate_simpletypes2_sup.py:1082: UserWarning: Value "13:30:00" does not match xsd minExclusive restriction on time_minexcl_st
   warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on time_minexcl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1084: UserWarning: Value "17:00:00" does not match xsd maxExclusive restriction on time_maxexcl_st
+tests/validate_simpletypes2_sup.py:1087: UserWarning: Value "17:00:00" does not match xsd maxExclusive restriction on time_maxexcl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxExclusive restriction on time_maxexcl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1089: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minInclusive restriction on datetime_minincl_st
+tests/validate_simpletypes2_sup.py:1092: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minInclusive restriction on datetime_minincl_st
   warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on datetime_minincl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1094: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxInclusive restriction on datetime_maxincl_st
+tests/validate_simpletypes2_sup.py:1097: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxInclusive restriction on datetime_maxincl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on datetime_maxincl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1099: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minExclusive restriction on datetime_minexcl_st
+tests/validate_simpletypes2_sup.py:1102: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minExclusive restriction on datetime_minexcl_st
   warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on datetime_minexcl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1104: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxExclusive restriction on datetime_maxexcl_st
+tests/validate_simpletypes2_sup.py:1107: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxExclusive restriction on datetime_maxexcl_st
   warnings_.warn('Value "%(value)s" does not match xsd maxExclusive restriction on datetime_maxexcl_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1118: UserWarning: Value "6.6" does not match xsd maxInclusive restriction on anonymous_float_valueType
+tests/validate_simpletypes2_sup.py:1121: UserWarning: Value "6.6" does not match xsd maxInclusive restriction on anonymous_float_valueType
   warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on anonymous_float_valueType' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:997: UserWarning: Value "aaa12zzz" does not match xsd minLength restriction on pattern_st
+tests/validate_simpletypes2_sup.py:1000: UserWarning: Value "aaa12zzz" does not match xsd minLength restriction on pattern_st
   warnings_.warn('Value "%(value)s" does not match xsd minLength restriction on pattern_st' % {"value" : value} )
-tests/validate_simpletypes2_sup.py:1000: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
+tests/validate_simpletypes2_sup.py:1003: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']]
   warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_pattern_st_patterns_, ))
-tests/validate_simpletypes2_sup.py:1530: UserWarning: Value "pqrst" does not match xsd minLength restriction on simpleTwoElementTwoType
+tests/validate_simpletypes2_sup.py:1533: UserWarning: Value "pqrst" does not match xsd minLength restriction on simpleTwoElementTwoType
   warnings_.warn('Value "%(value)s" does not match xsd minLength restriction on simpleTwoElementTwoType' % {"value" : value.encode("utf-8")} )
diff --git a/tests/validate_simpletypes2_sup.py b/tests/validate_simpletypes2_sup.py
index 7e21557..bef973b 100644
--- a/tests/validate_simpletypes2_sup.py
+++ b/tests/validate_simpletypes2_sup.py
@@ -629,10 +629,11 @@ class MixedContainer:
 
 
 class MemberSpec_(object):
-    def __init__(self, name='', data_type='', container=0):
+    def __init__(self, name='', data_type='', container=0, optional=0):
         self.name = name
         self.data_type = data_type
         self.container = container
+        self.optional = optional
     def set_name(self, name): self.name = name
     def get_name(self): return self.name
     def set_data_type(self, data_type): self.data_type = data_type
@@ -647,6 +648,8 @@ class MemberSpec_(object):
             return self.data_type
     def set_container(self, container): self.container = container
     def get_container(self): return self.container
+    def set_optional(self, optional): self.optional = optional
+    def get_optional(self): return self.optional
 
 
 def _cast(typ, value):
@@ -661,11 +664,11 @@ def _cast(typ, value):
 
 class containerType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('sample1', 'simpleOneType', 1),
-        MemberSpec_('sample2_bad', 'simpleOneType', 1),
-        MemberSpec_('sample3_bad', 'simpleOneType', 1),
-        MemberSpec_('sample4_bad', 'simpleOneType', 1),
-        MemberSpec_('sample2', 'simpleTwoType', 1),
+        MemberSpec_('sample1', 'simpleOneType', 1, 0),
+        MemberSpec_('sample2_bad', 'simpleOneType', 1, 0),
+        MemberSpec_('sample3_bad', 'simpleOneType', 1, 0),
+        MemberSpec_('sample4_bad', 'simpleOneType', 1, 0),
+        MemberSpec_('sample2', 'simpleTwoType', 1, 0),
     ]
     subclass = None
     superclass = None
@@ -813,30 +816,30 @@ class containerType(GeneratedsSuper):
 
 class simpleOneType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('integer_range_1_value', ['integer_range_1_st', 'integer_range_2_st', 'xs:integer'], 0),
-        MemberSpec_('pattern_value', ['pattern_st', 'pattern_1_st', 'min_length_st', 'xs:string'], 0),
-        MemberSpec_('token_enum_value', ['token_enum_st', 'xs:NMTOKEN'], 0),
-        MemberSpec_('integer_range_incl_value', ['integer_range_incl_st', 'xs:integer'], 0),
-        MemberSpec_('integer_range_excl_value', ['integer_range_excl_st', 'xs:integer'], 0),
-        MemberSpec_('min_max_length_value', ['min_max_length_st', 'xs:string'], 0),
-        MemberSpec_('length_value', ['length_st', 'xs:string'], 0),
-        MemberSpec_('totalDigits_value', ['totalDigits_st', 'xs:decimal'], 0),
-        MemberSpec_('date_minincl_value', ['date_minincl_st', 'xs:date'], 0),
-        MemberSpec_('date_maxincl_value', ['date_maxincl_st', 'xs:date'], 0),
-        MemberSpec_('date_minexcl_value', ['date_minexcl_st', 'xs:date'], 0),
-        MemberSpec_('date_maxexcl_value', ['date_maxexcl_st', 'xs:date'], 0),
-        MemberSpec_('time_minincl_value', ['time_minincl_st', 'xs:time'], 0),
-        MemberSpec_('time_maxincl_value', ['time_maxincl_st', 'xs:time'], 0),
-        MemberSpec_('time_minexcl_value', ['time_minexcl_st', 'xs:time'], 0),
-        MemberSpec_('time_maxexcl_value', ['time_maxexcl_st', 'xs:time'], 0),
-        MemberSpec_('datetime_minincl_value', ['datetime_minincl_st', 'xs:dateTime'], 0),
-        MemberSpec_('datetime_maxincl_value', ['datetime_maxincl_st', 'xs:dateTime'], 0),
-        MemberSpec_('datetime_minexcl_value', ['datetime_minexcl_st', 'xs:dateTime'], 0),
-        MemberSpec_('datetime_maxexcl_value', ['datetime_maxexcl_st', 'xs:dateTime'], 0),
-        MemberSpec_('vbar_pattern_value', ['vbar_pattern_st', 'xs:string'], 0),
-        MemberSpec_('anonymous_float_value', ['anonymous_float_valueType', 'xs:float'], 0),
-        MemberSpec_('primative_integer', 'xs:integer', 0),
-        MemberSpec_('primative_float', 'xs:float', 0),
+        MemberSpec_('integer_range_1_value', ['integer_range_1_st', 'integer_range_2_st', 'xs:integer'], 0, 0),
+        MemberSpec_('pattern_value', ['pattern_st', 'pattern_1_st', 'min_length_st', 'xs:string'], 0, 0),
+        MemberSpec_('token_enum_value', ['token_enum_st', 'xs:NMTOKEN'], 0, 0),
+        MemberSpec_('integer_range_incl_value', ['integer_range_incl_st', 'xs:integer'], 0, 0),
+        MemberSpec_('integer_range_excl_value', ['integer_range_excl_st', 'xs:integer'], 0, 0),
+        MemberSpec_('min_max_length_value', ['min_max_length_st', 'xs:string'], 0, 0),
+        MemberSpec_('length_value', ['length_st', 'xs:string'], 0, 0),
+        MemberSpec_('totalDigits_value', ['totalDigits_st', 'xs:decimal'], 0, 0),
+        MemberSpec_('date_minincl_value', ['date_minincl_st', 'xs:date'], 0, 0),
+        MemberSpec_('date_maxincl_value', ['date_maxincl_st', 'xs:date'], 0, 0),
+        MemberSpec_('date_minexcl_value', ['date_minexcl_st', 'xs:date'], 0, 0),
+        MemberSpec_('date_maxexcl_value', ['date_maxexcl_st', 'xs:date'], 0, 0),
+        MemberSpec_('time_minincl_value', ['time_minincl_st', 'xs:time'], 0, 0),
+        MemberSpec_('time_maxincl_value', ['time_maxincl_st', 'xs:time'], 0, 0),
+        MemberSpec_('time_minexcl_value', ['time_minexcl_st', 'xs:time'], 0, 0),
+        MemberSpec_('time_maxexcl_value', ['time_maxexcl_st', 'xs:time'], 0, 0),
+        MemberSpec_('datetime_minincl_value', ['datetime_minincl_st', 'xs:dateTime'], 0, 0),
+        MemberSpec_('datetime_maxincl_value', ['datetime_maxincl_st', 'xs:dateTime'], 0, 0),
+        MemberSpec_('datetime_minexcl_value', ['datetime_minexcl_st', 'xs:dateTime'], 0, 0),
+        MemberSpec_('datetime_maxexcl_value', ['datetime_maxexcl_st', 'xs:dateTime'], 0, 0),
+        MemberSpec_('vbar_pattern_value', ['vbar_pattern_st', 'xs:string'], 0, 0),
+        MemberSpec_('anonymous_float_value', ['anonymous_float_valueType', 'xs:float'], 0, 0),
+        MemberSpec_('primative_integer', 'xs:integer', 0, 0),
+        MemberSpec_('primative_float', 'xs:float', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1426,7 +1429,7 @@ class simpleOneType(GeneratedsSuper):
 
 class simpleTwoType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('simpleTwoElementOne', 'simpleTwoElementOneType', 0),
+        MemberSpec_('simpleTwoElementOne', 'simpleTwoElementOneType', 0, 0),
     ]
     subclass = None
     superclass = None
@@ -1500,7 +1503,7 @@ class simpleTwoType(GeneratedsSuper):
 
 class simpleTwoElementOneType(GeneratedsSuper):
     member_data_items_ = [
-        MemberSpec_('simpleTwoElementTwo', ['simpleTwoElementTwoType', 'xs:string'], 0),
+        MemberSpec_('simpleTwoElementTwo', ['simpleTwoElementTwoType', 'xs:string'], 0, 0),
     ]
     subclass = None
     superclass = None
diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html
index 546272d..fc814ab 100644
--- a/tutorial/generateds_tutorial.html
+++ b/tutorial/generateds_tutorial.html
@@ -219,7 +219,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.24c</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.25a</td>
 </tr>
 </tbody>
 </table>
@@ -228,7 +228,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">March 01, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">March 21, 2017</td>
 </tr>
 </tbody>
 </table>
@@ -1210,7 +1210,7 @@ named <tt class="docutils literal">garden_api.py</tt>, you can create an instanc
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateds_tutorial.txt">View document source</a>.
-Generated on: 2017-03-01 22:05 UTC.
+Generated on: 2017-03-21 19:50 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt
index d975b6a..579236f 100644
--- a/tutorial/generateds_tutorial.txt
+++ b/tutorial/generateds_tutorial.txt
@@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial
 
 .. version
 
-:revision: 2.24c
+:revision: 2.25a
 
 .. version
 
diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip
index e016af18c91626367e07b8bafd18518d7e037bfd..d8a4a2e108e95ab0d368063584e83ff7d400323a 100644
GIT binary patch
delta 13116
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
PQ*3%rV9eV8r{Mns@d(|#

delta 13069
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
b0Y;PBy<GxOm6MRU6_ZZBEe2t^00000ZW*U=

-- 
GitLab