diff --git a/README.rst b/README.rst
index c92f28f30fcbe3e2bb54bb68e8e57f6f4d9274e5..53a8984fcf13d20d73177f0df29d452c7b791bd7 100644
--- a/README.rst
+++ b/README.rst
@@ -141,6 +141,13 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 Change history
 --------------
 
+Version 2.28.2 (10/27/2017)
+
+- Changed name/version number scheme to all numeric with dots.
+  Required by setuptools or the Python Package Index.
+- Accepted and merged pull request by Eugene Petkevich that fixes
+  export of elements with mixed content.  Thank you Eugene.
+
 Version 2.28d (10/25/2017)
 
 - Fix for incorrect resolution of type for a child element type
diff --git a/generateDS.html b/generateDS.html
index e224ea9cc11df9192c9a06c641bdaab441c3c189..e5ce8f7c772d127b0d8c41006240384f91bdb614 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.28.1</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28.2</td>
 </tr>
 </tbody>
 </table>
@@ -3380,7 +3380,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-10-27 17:16 UTC.
+Generated on: 2017-10-27 19:55 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 26d59f81455a65676c8c81d891ce6a96cac51f2a..7e741ca0f6d33ccf6d09ffd355c1b6047687e7ec 100755
--- a/generateDS.py
+++ b/generateDS.py
@@ -227,7 +227,7 @@ logging.disable(logging.INFO)
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.28.1'
+VERSION = '2.28.2'
 ##VERSION##
 
 if sys.version_info.major == 2:
diff --git a/generateDS.txt b/generateDS.txt
index 92a2826e1829c674b4b9a15f5ffd2f3bbe8bc3d6..7f8c9ae86c608fa2c2cd85a569ee145a47bcbbe3 100644
--- a/generateDS.txt
+++ b/generateDS.txt
@@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema
 
 .. version
 
-:revision: 2.28.1
+:revision: 2.28.2
 
 .. version
 
diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html
index 4839d44e2835dce28eed6c91db9ba6dbbcdfcf09..1b1d634ad99f1aa93f2b4034090bdb7d3091cd82 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.28.1</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28.2</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-10-27 17:16 UTC.
+Generated on: 2017-10-27 19:55 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 c0189dc4b31b27db204fc908cb7c865c8e7119e0..a068ce28823ea392f04319c72dd563dbe738c73b 100644
--- a/generateds_gui_notes.txt
+++ b/generateds_gui_notes.txt
@@ -12,7 +12,7 @@ GenerateDS GUI Notes
 
 .. version
 
-:revision: 2.28.1
+:revision: 2.28.2
 
 .. version
 
diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index ac9f25a88ff65115a9065fcab88f889a1062792f..256b2dda8526a5a35a044a8042af01b68b10d91c 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.28.1'
+VERSION = '2.28.2'
 ##VERSION##
 
 
diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html
index 112a0ed43e4fe7de6d6e945814885b27140bd256..2ecc0d4357cc56f55cb623afe724162ac5802962 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.28.1</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28.2</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-10-27 17:16 UTC.
+Generated on: 2017-10-27 19:55 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 6b4b706d2009500e9c365565f4925b61066498b6..e8af426e5103bf8063f0c421156dc14b9d7de1f7 100644
--- a/librarytemplate_howto.txt
+++ b/librarytemplate_howto.txt
@@ -8,7 +8,7 @@ How to package a generateDS.py generated library
 
 .. version
 
-:revision: 2.28.1
+:revision: 2.28.2
 
 .. version
 
diff --git a/process_includes.py b/process_includes.py
index cebd1e87a8ca3661b0edda697da7b3469ed92535..29e375d0205585db537731b6810a07bdbb5c0c56 100644
--- 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.28.1'
+VERSION = '2.28.2'
 ##VERSION##
 
 CatalogDict = {}
diff --git a/setup.py b/setup.py
index 6055cef7596aed77e473544bc5f05031f6a1a7b8..c81aca431d7772f5d345e1f8325d48287e88b730 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.28.1",
+    version="2.28.2",
 ##VERSION##
     author="Dave Kuhlman",
     author_email="dkuhlman@davekuhlman.org",
diff --git a/tests/anysimpletype1_sup.py b/tests/anysimpletype1_sup.py
index 763bc8fb87dc3846e31d9b418f964dadd21a73ce..0ab45b721b92c6f8a55b74f3eb6172210b1a2a91 100644
--- a/tests/anysimpletype1_sup.py
+++ b/tests/anysimpletype1_sup.py
@@ -823,7 +823,7 @@ class cimAnySimpleType(GeneratedsSuper):
     def set_anyAttributes_(self, anyAttributes_): self.anyAttributes_ = anyAttributes_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
diff --git a/tests/extensions1_sup.py b/tests/extensions1_sup.py
index 1d87f057895187c7840f00385b6cbb81e1812a15..c4f8c48f1127c76793411584e85768cac340ed54 100644
--- a/tests/extensions1_sup.py
+++ b/tests/extensions1_sup.py
@@ -738,7 +738,7 @@ class SpecialDate(GeneratedsSuper):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -816,7 +816,7 @@ class ExtremeDate(GeneratedsSuper):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -894,7 +894,7 @@ class singleExtremeDate(GeneratedsSuper):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -1218,7 +1218,7 @@ class mixedFactoidType(GeneratedsSuper):
     def hasContent_(self):
         if (
             self.relation is not None or
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -1250,6 +1250,13 @@ class mixedFactoidType(GeneratedsSuper):
         if not fromsubclass_:
             for item_ in self.content_:
                 item_.export(outfile, level, item_.name, namespace_, pretty_print=pretty_print)
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        if self.relation is not None:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%srelation>%s</%srelation>%s' % (namespace_, self.gds_encode(self.gds_format_string(quote_xml(self.relation), input_name='relation')), namespace_, eol_))
     def build(self, node):
         already_processed = set()
         self.buildAttributes(node, node.attrib, already_processed)
@@ -1312,7 +1319,7 @@ class BaseType(GeneratedsSuper):
     def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -1410,7 +1417,7 @@ class DerivedType(BaseType):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_ or
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_) or
             super(DerivedType, self).hasContent_()
         ):
             return True
@@ -1499,7 +1506,7 @@ class MyInteger(GeneratedsSuper):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -1577,7 +1584,7 @@ class MyBoolean(GeneratedsSuper):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -1655,7 +1662,7 @@ class MyFloat(GeneratedsSuper):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -1733,7 +1740,7 @@ class MyDouble(GeneratedsSuper):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
diff --git a/tests/out1_sup.py b/tests/out1_sup.py
index 80f58dc8ed7d6d6132b39c636a06bcd9a25c8071..e84ced4c061ae195c6519bac0c729cbd9dca70ff 100644
--- a/tests/out1_sup.py
+++ b/tests/out1_sup.py
@@ -1031,7 +1031,7 @@ class comments(GeneratedsSuper):
     def hasContent_(self):
         if (
             self.emp or
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -1063,6 +1063,13 @@ class comments(GeneratedsSuper):
         if not fromsubclass_:
             for item_ in self.content_:
                 item_.export(outfile, level, item_.name, namespace_, pretty_print=pretty_print)
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for emp_ in self.emp:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%semp>%s</%semp>%s' % (namespace_, self.gds_encode(self.gds_format_string(quote_xml(emp_), input_name='emp')), namespace_, eol_))
     def exportLiteral(self, outfile, level, name_='comments'):
         level += 1
         already_processed = set()
@@ -2037,7 +2044,7 @@ class param(GeneratedsSuper):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
diff --git a/tests/people_procincl1_sup.py b/tests/people_procincl1_sup.py
index 19e97f2fb4c456d51cb44d33cb1c992fa86e18bd..31e7b6992df3e59483c2490fee728b8427ababe1 100644
--- a/tests/people_procincl1_sup.py
+++ b/tests/people_procincl1_sup.py
@@ -941,7 +941,7 @@ class comments(GeneratedsSuper):
         if (
             self.emp or
             self.bold or
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -973,6 +973,16 @@ class comments(GeneratedsSuper):
         if not fromsubclass_:
             for item_ in self.content_:
                 item_.export(outfile, level, item_.name, namespace_, pretty_print=pretty_print)
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for emp_ in self.emp:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%semp>%s</%semp>%s' % (namespace_, self.gds_encode(self.gds_format_string(quote_xml(emp_), input_name='emp')), namespace_, eol_))
+        for bold_ in self.bold:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%sbold>%s</%sbold>%s' % (namespace_, self.gds_encode(self.gds_format_string(quote_xml(bold_), input_name='bold')), namespace_, eol_))
     def build(self, node):
         already_processed = set()
         self.buildAttributes(node, node.attrib, already_processed)
@@ -1353,7 +1363,7 @@ class param(GeneratedsSuper):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
diff --git a/tests/prefix_classname1_sup.py b/tests/prefix_classname1_sup.py
index 762f4241093c6ccbbcdad997bba9dd51a76445ed..241b0bb5d996afa97bc22a7adcd522843308ddad 100644
--- a/tests/prefix_classname1_sup.py
+++ b/tests/prefix_classname1_sup.py
@@ -911,7 +911,7 @@ class tomato_comments(GeneratedsSuper):
     def hasContent_(self):
         if (
             self.emp or
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -943,6 +943,13 @@ class tomato_comments(GeneratedsSuper):
         if not fromsubclass_:
             for item_ in self.content_:
                 item_.export(outfile, level, item_.name, namespace_, pretty_print=pretty_print)
+        if pretty_print:
+            eol_ = '\n'
+        else:
+            eol_ = ''
+        for emp_ in self.emp:
+            showIndent(outfile, level, pretty_print)
+            outfile.write('<%semp>%s</%semp>%s' % (namespace_, self.gds_encode(self.gds_format_string(quote_xml(emp_), input_name='emp')), namespace_, eol_))
     def build(self, node):
         already_processed = set()
         self.buildAttributes(node, node.attrib, already_processed)
@@ -1618,7 +1625,7 @@ class tomato_param(GeneratedsSuper):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
diff --git a/tests/simplecontent_restriction1_sup.py b/tests/simplecontent_restriction1_sup.py
index f314128dce5a954b3e6c6f697b5420952f829145..60f397857b9a8d31dc5013cb9d8c50fd1dd61a09 100644
--- a/tests/simplecontent_restriction1_sup.py
+++ b/tests/simplecontent_restriction1_sup.py
@@ -765,7 +765,7 @@ class IdentifierType(GeneratedsSuper):
     def set_extensiontype_(self, extensiontype_): self.extensiontype_ = extensiontype_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -890,7 +890,7 @@ class BillOfResourcesIDType(IdentifierType):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_ or
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_) or
             super(BillOfResourcesIDType, self).hasContent_()
         ):
             return True
@@ -962,7 +962,7 @@ class BillOfMaterialIDType(IdentifierType):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_ or
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_) or
             super(BillOfMaterialIDType, self).hasContent_()
         ):
             return True
diff --git a/tests/simpletype_memberspecs1_sup.py b/tests/simpletype_memberspecs1_sup.py
index aaeba3db984a6d2baf80328bffc7e10de7a8bae5..cf988926438b97361b8b1f4ccc8fcf8f6a624db2 100644
--- a/tests/simpletype_memberspecs1_sup.py
+++ b/tests/simpletype_memberspecs1_sup.py
@@ -738,7 +738,7 @@ class SpecialDate(GeneratedsSuper):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -816,7 +816,7 @@ class ExtremeDate(GeneratedsSuper):
     def set_valueOf_(self, valueOf_): self.valueOf_ = valueOf_
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
diff --git a/tests/to_etree1_sup.py b/tests/to_etree1_sup.py
index 5461be39b782d337022bff104df1fe2f769d5020..2237549360ce12aa5683244f2a98eaf61efacb29 100644
--- a/tests/to_etree1_sup.py
+++ b/tests/to_etree1_sup.py
@@ -922,7 +922,7 @@ class commentsType(GeneratedsSuper):
         if (
             self.emp or
             self.bold or
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
@@ -1660,7 +1660,7 @@ class paramType(GeneratedsSuper):
             pass
     def hasContent_(self):
         if (
-            1 if type(self.valueOf_) in [int,float] else self.valueOf_
+            (1 if type(self.valueOf_) in [int,float] else self.valueOf_)
         ):
             return True
         else:
diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html
index 45a4dc3fa70919ce52b169c3638239c7368b0e16..c75a80f67d20447dff476a103fcdecf331d35902 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.28.1</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28.2</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-10-27 17:16 UTC.
+Generated on: 2017-10-27 19:55 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 cbf7482ec87bcb50aee5b68fc2c0c60e29d12fd3..57c3ba7607f242d3c806dac9b29416390af14d3f 100644
--- a/tutorial/generateds_tutorial.txt
+++ b/tutorial/generateds_tutorial.txt
@@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial
 
 .. version
 
-:revision: 2.28.1
+:revision: 2.28.2
 
 .. version
 
diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip
index bf8669cdde81ea806b9cb0299539e1a3c0ecd8de..2ea97e7a994020bce297a78d2458315399e29c27 100644
Binary files a/tutorial/generateds_tutorial.zip and b/tutorial/generateds_tutorial.zip differ