diff --git a/README.rst b/README.rst
index c5b7fbad01a5cd1d7d0249af045d7a2701112854..011c8ca9e0448fee9923b03178baff086d283c2a 100644
--- a/README.rst
+++ b/README.rst
@@ -141,6 +141,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 Change history
 --------------
 
+Version 2.29.21 (08/02/2018)
+
+- Fix to use of simpleType name.  Needed to do cleanupName() on the
+  class name.  Thanks to Daniel Ramirez for reporting this and for
+  suggesting a fix.
+
 Version 2.29.20 (07/30/2018)
 
 - Fix to generation of regular expression used to validate a
diff --git a/generateDS.html b/generateDS.html
index 1505945cac8ce2fed68d368ea5feb0bd7cfd371a..10d897918830b89add9c8e99e0ea9b4f98f92505 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.29.20</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.21</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">July 30, 2018</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">August 02, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -3392,7 +3392,7 @@ following among others:</p>
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateDS.txt">View document source</a>.
-Generated on: 2018-07-30 20:37 UTC.
+Generated on: 2018-08-02 19:16 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 bbb2f857e942fc4e980217c8c42665060fe7590c..82e17ba2d060375809b20f3d0fd8f1b39522ebef 100755
--- a/generateDS.py
+++ b/generateDS.py
@@ -227,7 +227,7 @@ _log = logging.getLogger(__name__)
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.20'
+VERSION = '2.29.21'
 ##VERSION##
 
 BaseStrTypes = six.string_types
@@ -5678,8 +5678,8 @@ class GeneratedsSuper(object):
         for patterns1 in patterns:
             found2 = False
             for patterns2 in patterns1:
-                mo = re_.fullmatch(patterns2, target)
-                if mo is not None:
+                mo = re_.search(patterns2, target)
+                if mo is not None and len(mo.group(0)) == len(target):
                     found2 = True
                     break
             if not found2:
@@ -6712,16 +6712,17 @@ def generateSimpleTypes(wrt, prefix, simpleTypeDict):
 
     def writeEnumClass(simpleType):
         enumValues = simpleType.getEnumValues()
+        simpleTypeName = cleanupName(simpleType.getName())
         if enumValues:
             output = ""
             try:
-                validateIdentifier(simpleType.getName())
+                validateIdentifier(simpleTypeName)
             except ValueError:
                 err_msg(
                     '*** The Simple Type name "%s" is not a valid '
-                    'Python identifier\n' % simpleType.getName())
+                    'Python identifier\n' % simpleTypeName)
                 return
-            output += 'class %s(object):\n' % simpleType.getName()
+            output += 'class %s(object):\n' % simpleTypeName
             for enumValue in enumValues:
                 try:
                     validatedEnumValue = validateIdentifier(enumValue)
diff --git a/generateDS.txt b/generateDS.txt
index b9c038fc8606f27604010faf9e651fffeedee5c0..31b509b50de8ccc8608771ed520867a8478c7c4e 100644
--- a/generateDS.txt
+++ b/generateDS.txt
@@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema
 
 .. version
 
-:revision: 2.29.20
+:revision: 2.29.21
 
 .. version
 
diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html
index 6e42bda77b5c5bc2f5a7731ae7dcb366a9d025e7..ca7a70ac5a3b136cbcc3b3c9e948cc6367e977b5 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.29.20</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.21</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">July 30, 2018</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">August 02, 2018</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: 2018-07-30 20:37 UTC.
+Generated on: 2018-08-02 19:16 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 1a74e1919f4f40621f5c12e7dd98f336e21e1850..bc75f7810e3219ccacc89cc4910e7fcfd0b42e07 100644
--- a/generateds_gui_notes.txt
+++ b/generateds_gui_notes.txt
@@ -12,7 +12,7 @@ GenerateDS GUI Notes
 
 .. version
 
-:revision: 2.29.20
+:revision: 2.29.21
 
 .. version
 
diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index add27ec98ba6809be70efcb22fb50913327d3421..540354f026feba03a1553e03796922616a959404 100644
--- 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.29.20'
+VERSION = '2.29.21'
 ##VERSION##
 
 
diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html
index 3550810bca1fa6e07a538ef968454813797df969..ce9fca7fe43b6b47f51c144597594e8f65d1e36d 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.29.20</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.21</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">July 30, 2018</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">August 02, 2018</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: 2018-07-30 20:37 UTC.
+Generated on: 2018-08-02 19:16 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 9a2f647a91712cefe73f431a848ac18c75e41302..9dbd798a8399f497d60268e26757d79ec3a40d80 100644
--- a/librarytemplate_howto.txt
+++ b/librarytemplate_howto.txt
@@ -8,7 +8,7 @@ How to package a generateDS.py generated library
 
 .. version
 
-:revision: 2.29.20
+:revision: 2.29.21
 
 .. version
 
diff --git a/process_includes.py b/process_includes.py
index d0399f8dfa728dddfc3cd21890c2a7834c46bb16..69553f2d9235a112f8341ef3379bf975c8ea53b7 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.29.20'
+VERSION = '2.29.21'
 ##VERSION##
 
 CatalogDict = {}
diff --git a/setup.py b/setup.py
index 3a7f874d3ab5365292f7ec46decb3f0527363552..b21d86c58b54b72f8f2220b7c614bf3a4371563c 100644
--- a/setup.py
+++ b/setup.py
@@ -8,7 +8,7 @@ setup(
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-    version="2.29.20",
+    version="2.29.21",
 ##VERSION##
     author="Dave Kuhlman",
     author_email="dkuhlman@davekuhlman.org",
diff --git a/tests/OnePer/oneperType00_2One.py b/tests/OnePer/oneperType00_2One.py
index 4c010be8d156e179d41839cb963f5d82d25b3cad..4f2b00c78575fdae782f2f44f701d02c6b20b36e 100644
--- a/tests/OnePer/oneperType00_2One.py
+++ b/tests/OnePer/oneperType00_2One.py
@@ -342,8 +342,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/OnePer/oneperType01_2One.py b/tests/OnePer/oneperType01_2One.py
index 3301c1def0cdb22c1f153d0848a824a36405c581..88d1791d131c315276c5b32207fde5fb00d5947d 100644
--- a/tests/OnePer/oneperType01_2One.py
+++ b/tests/OnePer/oneperType01_2One.py
@@ -342,8 +342,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/OnePer/oneperType02_2One.py b/tests/OnePer/oneperType02_2One.py
index 60b276ebe09aead14eff0fde943f53b44738294a..7eb4aef16c91d3e6f1520760220890d9d610d8cc 100644
--- a/tests/OnePer/oneperType02_2One.py
+++ b/tests/OnePer/oneperType02_2One.py
@@ -342,8 +342,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/OnePer/oneperType03_2One.py b/tests/OnePer/oneperType03_2One.py
index 742b51941bac463c85be832caacd5e3b1f7485a3..dbf59e33dae68dbcd6bf70915a5ca7eac489fdd2 100644
--- a/tests/OnePer/oneperType03_2One.py
+++ b/tests/OnePer/oneperType03_2One.py
@@ -342,8 +342,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/abstract_type1_sup.py b/tests/abstract_type1_sup.py
index 8c96e3027b8567553d492e29a867206baec20bfe..b6b7b47af5727ba285de0146885f1468397b49f7 100644
--- a/tests/abstract_type1_sup.py
+++ b/tests/abstract_type1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/annotations1_sup.py b/tests/annotations1_sup.py
index bc42f0dfd854b22728a6fecf0edb088686386f9b..bd590ce7480b15cd614eb7e7b482f64bb66dcf9c 100644
--- a/tests/annotations1_sup.py
+++ b/tests/annotations1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/anonymous_type1_sup.py b/tests/anonymous_type1_sup.py
index d0b56a343c9d409e00a6ec4cfd00de6694422471..79335bf961c109b2bc6abf5dedb8cfbbb37f912c 100644
--- a/tests/anonymous_type1_sup.py
+++ b/tests/anonymous_type1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/anysimpletype1_sup.py b/tests/anysimpletype1_sup.py
index 6698b2fa66230e93b7e8a5480b1c49dcf46f45c5..2e1ec8e513a06581ed68d72fe9cf21c9ff27efcf 100644
--- a/tests/anysimpletype1_sup.py
+++ b/tests/anysimpletype1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/anywildcard1_sup.py b/tests/anywildcard1_sup.py
index 5ab725f17c3854fd1ff74b4200857ce7ac66e4e5..f8186dd65426318e445b0589a64213f6ed40c47a 100644
--- a/tests/anywildcard1_sup.py
+++ b/tests/anywildcard1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/attr_groups1_sup.py b/tests/attr_groups1_sup.py
index 11d019d91438e41d89755877e5316f4116863906..fe40940a8c00b2e8a7901befe03170c60c1cae61 100644
--- a/tests/attr_groups1_sup.py
+++ b/tests/attr_groups1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/catalogtest1_sup.py b/tests/catalogtest1_sup.py
index 59bdd56a80839424126565a949446fde4e319df8..34a7b0ba89411b4fe73e398dbae8d8e812c15266 100644
--- a/tests/catalogtest1_sup.py
+++ b/tests/catalogtest1_sup.py
@@ -342,8 +342,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/cdata1_sup.py b/tests/cdata1_sup.py
index 1caf58a8b8b7b3d43ab42398dfb18619cd23ea36..8df304611eea3286b55a94bb57ee5112beb4b7dc 100644
--- a/tests/cdata1_sup.py
+++ b/tests/cdata1_sup.py
@@ -342,8 +342,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/cleanupname1_sup.py b/tests/cleanupname1_sup.py
index 530e5a75046ba82430d0d56187efbdaed567dadb..16bac1b9e7b399881127a7aa592458e76f56126a 100644
--- a/tests/cleanupname1_sup.py
+++ b/tests/cleanupname1_sup.py
@@ -342,8 +342,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/defaults_cases1_sup.py b/tests/defaults_cases1_sup.py
index 47a6a4c7bf1ca393daa923989f2cda586072809f..320918040a3aa1e6b116785613932529e4140103 100644
--- a/tests/defaults_cases1_sup.py
+++ b/tests/defaults_cases1_sup.py
@@ -340,8 +340,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/defaults_cases_always1_sup.py b/tests/defaults_cases_always1_sup.py
index 003444df8958ad80f0c71350972315e6c9b11fe4..c4a28c0bd8f40e4f5e0962e7ad71e4c1caa2196b 100644
--- a/tests/defaults_cases_always1_sup.py
+++ b/tests/defaults_cases_always1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/defaults_cases_always2_sup.py b/tests/defaults_cases_always2_sup.py
index 003444df8958ad80f0c71350972315e6c9b11fe4..c4a28c0bd8f40e4f5e0962e7ad71e4c1caa2196b 100644
--- a/tests/defaults_cases_always2_sup.py
+++ b/tests/defaults_cases_always2_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/defaults_coverage1_sup.py b/tests/defaults_coverage1_sup.py
index fcb9a316c14674fa5f74b4d0a0b55aeb0f201ca2..052c02a4d04cdfb9bf6358adc63da8a941f1a2f9 100644
--- a/tests/defaults_coverage1_sup.py
+++ b/tests/defaults_coverage1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/disable_xml_super1_sup.py b/tests/disable_xml_super1_sup.py
index a24cf285e10cea96e3c8df5a7c2b5dcd1590e8f4..72e0e942fd8176b7763d0fdd87076207c299b624 100644
--- a/tests/disable_xml_super1_sup.py
+++ b/tests/disable_xml_super1_sup.py
@@ -341,8 +341,8 @@ class GeneratedsSuper(object):
         for patterns1 in patterns:
             found2 = False
             for patterns2 in patterns1:
-                mo = re_.fullmatch(patterns2, target)
-                if mo is not None:
+                mo = re_.search(patterns2, target)
+                if mo is not None and len(mo.group(0)) == len(target):
                     found2 = True
                     break
             if not found2:
diff --git a/tests/extensions1_sup.py b/tests/extensions1_sup.py
index be117d579e760948d7127e81e2c4e0e28db86086..46d4e74488ba5cec72dd5e548413217531b34f66 100644
--- a/tests/extensions1_sup.py
+++ b/tests/extensions1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/ipo1_sup.py b/tests/ipo1_sup.py
index 308abf8aee05998e732616ef9c1636cd7f442de1..82cd1f9f371525397a828abb544cc17679895881 100644
--- a/tests/ipo1_sup.py
+++ b/tests/ipo1_sup.py
@@ -340,8 +340,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/ipo2_sup.py b/tests/ipo2_sup.py
index 308abf8aee05998e732616ef9c1636cd7f442de1..82cd1f9f371525397a828abb544cc17679895881 100644
--- a/tests/ipo2_sup.py
+++ b/tests/ipo2_sup.py
@@ -340,8 +340,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/mapcleanname1_sup.py b/tests/mapcleanname1_sup.py
index 8f1e0a0cdfe730764d908710e00b2c07fc95247c..2c6b831321f2237fe20f55c1be2a33ed8c88a374 100644
--- a/tests/mapcleanname1_sup.py
+++ b/tests/mapcleanname1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/mixedcontent1_sup.py b/tests/mixedcontent1_sup.py
index deec386924854f4af19612b22c3f6b025b2458c3..4c311da4883d300921ca0a936cb80811f8921c82 100644
--- a/tests/mixedcontent1_sup.py
+++ b/tests/mixedcontent1_sup.py
@@ -340,8 +340,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/mixedcontent2_sup.py b/tests/mixedcontent2_sup.py
index deec386924854f4af19612b22c3f6b025b2458c3..4c311da4883d300921ca0a936cb80811f8921c82 100644
--- a/tests/mixedcontent2_sup.py
+++ b/tests/mixedcontent2_sup.py
@@ -340,8 +340,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/nested_def1_sup.py b/tests/nested_def1_sup.py
index f25ebd71eb2f040a45bd79b85bc80d95976e55ef..af0b3d95d4e3376f961eca8ad62c5fb4dddfb12d 100644
--- a/tests/nested_def1_sup.py
+++ b/tests/nested_def1_sup.py
@@ -340,8 +340,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/no_namespace_defs1_sup.py b/tests/no_namespace_defs1_sup.py
index 5a9b44d1beebae09d23ae7798f7c35cbb1830bd2..001afd8665150678921fe1d891dda504d3cb28ab 100644
--- a/tests/no_namespace_defs1_sup.py
+++ b/tests/no_namespace_defs1_sup.py
@@ -341,8 +341,8 @@ class GeneratedsSuper(object):
         for patterns1 in patterns:
             found2 = False
             for patterns2 in patterns1:
-                mo = re_.fullmatch(patterns2, target)
-                if mo is not None:
+                mo = re_.search(patterns2, target)
+                if mo is not None and len(mo.group(0)) == len(target):
                     found2 = True
                     break
             if not found2:
diff --git a/tests/out1_sup.py b/tests/out1_sup.py
index 36bc1ad694123974398494a7ea3991c2c7ac87ac..93c84986bb801622d6ffe063a508e4f0605ed83b 100644
--- a/tests/out1_sup.py
+++ b/tests/out1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/people_procincl1_sup.py b/tests/people_procincl1_sup.py
index d4682eba55ba15252bb80274d9abc612292a8365..11849ef0f7ae813c4c94f5023ee3e745d5e53d42 100644
--- a/tests/people_procincl1_sup.py
+++ b/tests/people_procincl1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/prefix_classname1_sup.py b/tests/prefix_classname1_sup.py
index 10ad9f5cc0d98cf7ead549aa8b6206431f6ed794..7d3c39ae43023dc5590de7c0bf0fd760413a136c 100644
--- a/tests/prefix_classname1_sup.py
+++ b/tests/prefix_classname1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/recursive_simpletype1_sup.py b/tests/recursive_simpletype1_sup.py
index d5fe18694b369f7752dea75a46620b2942d7b307..ad25d513e54ad98b608db4c301757d1e37bd3b2f 100644
--- a/tests/recursive_simpletype1_sup.py
+++ b/tests/recursive_simpletype1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/reference_simpletype1_sup.py b/tests/reference_simpletype1_sup.py
index 53f1fe3a8abd3e77d9ec70f8b6950b9e909df348..a65f20083559720b68962e98bcec13352233a059 100644
--- a/tests/reference_simpletype1_sup.py
+++ b/tests/reference_simpletype1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/rem_dup_elems1_sup.py b/tests/rem_dup_elems1_sup.py
index b8c779dcf4a86bcb529093167d78b25b69a02c8b..8945e594c7885a21b3190064cf94d89e944938c7 100644
--- a/tests/rem_dup_elems1_sup.py
+++ b/tests/rem_dup_elems1_sup.py
@@ -342,8 +342,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/simplecontent_restriction1_sup.py b/tests/simplecontent_restriction1_sup.py
index b5a0111d6b784a2fbd5173d712db046bd2439144..895aa6e8fad90bf6428e98d3688c0aeb715cdcc5 100644
--- a/tests/simplecontent_restriction1_sup.py
+++ b/tests/simplecontent_restriction1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/simpletype_memberspecs1_sup.py b/tests/simpletype_memberspecs1_sup.py
index 74a42d9802461ffc40a9d4012adede130519365f..b1d7ed3eace175d080f6927807fd00e394bfa33e 100644
--- a/tests/simpletype_memberspecs1_sup.py
+++ b/tests/simpletype_memberspecs1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/simpletypes_other1_sup.py b/tests/simpletypes_other1_sup.py
index ecbe57b2dfd884c10c421de7af148c446f123724..2e3d06224384774eda470924d8ae94d27cccd975 100644
--- a/tests/simpletypes_other1_sup.py
+++ b/tests/simpletypes_other1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/to_etree1_sup.py b/tests/to_etree1_sup.py
index a91dacb973785aa4f6c244ac4d859c61c52c307d..d3602083b39f339c48456d6a1bfc774e0df00ee0 100644
--- a/tests/to_etree1_sup.py
+++ b/tests/to_etree1_sup.py
@@ -343,8 +343,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/validate_simpletypes1_sup.py b/tests/validate_simpletypes1_sup.py
index b7d1d4fcad13b2e7e20511fbd9df6f230c748ba0..772c0fd50e8dc446fb7df5f03fadc3bba3d6c323 100644
--- a/tests/validate_simpletypes1_sup.py
+++ b/tests/validate_simpletypes1_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tests/validate_simpletypes1_warnings.txt b/tests/validate_simpletypes1_warnings.txt
index af03491ca6493656c80c8f8448ad0ec333c00c40..503ad4e75baf5e131b9344ee96383bc3bbacf820 100644
--- a/tests/validate_simpletypes1_warnings.txt
+++ b/tests/validate_simpletypes1_warnings.txt
@@ -1,62 +1,62 @@
-tests/validate_simpletypes2_sup.py:1077: UserWarning: Value "2" does not match xsd minExclusive restriction on integer_range_1_st
+tests/validate_simpletypes2_sup.py:1078: 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:1087: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']]
+tests/validate_simpletypes2_sup.py:1088: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*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:1100: UserWarning: Value "floatxx" does not match xsd enumeration restriction on token_enum_st
+tests/validate_simpletypes2_sup.py:1101: 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:1107: UserWarning: Value "22" does not match xsd maxInclusive restriction on integer_range_incl_st
+tests/validate_simpletypes2_sup.py:1108: 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:1112: UserWarning: Value "-40" does not match xsd minExclusive restriction on integer_range_excl_st
+tests/validate_simpletypes2_sup.py:1113: 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:1121: UserWarning: Value "mno pqr" does not match xsd minLength restriction on min_max_length_st
+tests/validate_simpletypes2_sup.py:1122: 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:1126: UserWarning: Value "012345" does not match xsd length restriction on length_st
+tests/validate_simpletypes2_sup.py:1127: 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:1210: UserWarning: Value "0.2" does not match xsd minInclusive restriction on anonymous_float_valueType
+tests/validate_simpletypes2_sup.py:1211: 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:1197: UserWarning: Value "efgh" does not match xsd pattern restrictions: [[u'^abcd|ef\\|gh$']]
+tests/validate_simpletypes2_sup.py:1198: UserWarning: Value "efgh" does not match xsd pattern restrictions: [[u'^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:1204: UserWarning: Value "efÄŸh" does not match xsd pattern restrictions: [[u'^ab\xe7d|ef\\|gh$']]
+tests/validate_simpletypes2_sup.py:1205: UserWarning: Value "efÄŸh" does not match xsd pattern restrictions: [[u'^ab\xe7d|ef\\|gh$']]
   warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_unicode_pattern_st_patterns_, ))
-tests/validate_simpletypes2_sup.py:1079: UserWarning: Value "9" does not match xsd maxExclusive restriction on integer_range_1_st
+tests/validate_simpletypes2_sup.py:1080: 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:1087: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']]
+tests/validate_simpletypes2_sup.py:1088: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*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:1105: UserWarning: Value "-50" does not match xsd minInclusive restriction on integer_range_incl_st
+tests/validate_simpletypes2_sup.py:1106: 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:1119: UserWarning: Value "asdf asdf asdf asdf asdf asdf" does not match xsd maxLength restriction on min_max_length_st
+tests/validate_simpletypes2_sup.py:1120: 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:1126: UserWarning: Value "01234567890" does not match xsd length restriction on length_st
+tests/validate_simpletypes2_sup.py:1127: 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:1136: UserWarning: Value "2015-05-01" does not match xsd minInclusive restriction on date_minincl_st
+tests/validate_simpletypes2_sup.py:1137: 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:1141: UserWarning: Value "2015-11-01" does not match xsd maxInclusive restriction on date_maxincl_st
+tests/validate_simpletypes2_sup.py:1142: 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:1146: UserWarning: Value "2015-05-01" does not match xsd minExclusive restriction on date_minexcl_st
+tests/validate_simpletypes2_sup.py:1147: 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:1151: UserWarning: Value "2015-11-01" does not match xsd maxExclusive restriction on date_maxexcl_st
+tests/validate_simpletypes2_sup.py:1152: 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:1156: UserWarning: Value "13:30:00" does not match xsd minInclusive restriction on time_minincl_st
+tests/validate_simpletypes2_sup.py:1157: 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:1161: UserWarning: Value "17:00:00" does not match xsd maxInclusive restriction on time_maxincl_st
+tests/validate_simpletypes2_sup.py:1162: 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:1166: UserWarning: Value "13:30:00" does not match xsd minExclusive restriction on time_minexcl_st
+tests/validate_simpletypes2_sup.py:1167: 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:1171: UserWarning: Value "17:00:00" does not match xsd maxExclusive restriction on time_maxexcl_st
+tests/validate_simpletypes2_sup.py:1172: 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:1176: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minInclusive restriction on datetime_minincl_st
+tests/validate_simpletypes2_sup.py:1177: 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:1181: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxInclusive restriction on datetime_maxincl_st
+tests/validate_simpletypes2_sup.py:1182: 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:1186: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minExclusive restriction on datetime_minexcl_st
+tests/validate_simpletypes2_sup.py:1187: 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:1191: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxExclusive restriction on datetime_maxexcl_st
+tests/validate_simpletypes2_sup.py:1192: 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:1212: UserWarning: Value "6.6" does not match xsd maxInclusive restriction on anonymous_float_valueType
+tests/validate_simpletypes2_sup.py:1213: 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:1084: UserWarning: Value "aaa12zzz" does not match xsd minLength restriction on pattern_st
+tests/validate_simpletypes2_sup.py:1085: 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:1087: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']]
+tests/validate_simpletypes2_sup.py:1088: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*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:1646: UserWarning: Value "pqrst" does not match xsd minLength restriction on simpleTwoElementTwoType
+tests/validate_simpletypes2_sup.py:1647: 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 b7d1d4fcad13b2e7e20511fbd9df6f230c748ba0..772c0fd50e8dc446fb7df5f03fadc3bba3d6c323 100644
--- a/tests/validate_simpletypes2_sup.py
+++ b/tests/validate_simpletypes2_sup.py
@@ -341,8 +341,8 @@ except ImportError as exp:
             for patterns1 in patterns:
                 found2 = False
                 for patterns2 in patterns1:
-                    mo = re_.fullmatch(patterns2, target)
-                    if mo is not None:
+                    mo = re_.search(patterns2, target)
+                    if mo is not None and len(mo.group(0)) == len(target):
                         found2 = True
                         break
                 if not found2:
diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html
index 2cd30e81b99be832ace7fec288cca2252d87241b..764131b34e16844e344c4857c468cf2aba4b4944 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.29.20</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.21</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">July 30, 2018</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">August 02, 2018</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: 2018-07-30 20:37 UTC.
+Generated on: 2018-08-02 19:16 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 a535966bedfb9c17f77285d18e4ff3ac649e6fc0..afcdc5850abe058628bb5a677c9479886b2acaa4 100644
--- a/tutorial/generateds_tutorial.txt
+++ b/tutorial/generateds_tutorial.txt
@@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial
 
 .. version
 
-:revision: 2.29.20
+:revision: 2.29.21
 
 .. version
 
diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip
index 5a697437cc0705a4362989649684a1c95e92f388..09e63c6174e36f71d071efe8e4c174fb9cc5c5e1 100644
Binary files a/tutorial/generateds_tutorial.zip and b/tutorial/generateds_tutorial.zip differ