diff --git a/build.xml b/build.xml
index f8dc126cb5c3721b41c10ac19dbd0da6d8c76891..87ee566be3be1b4d323bc688147d564813977379 100644
--- a/build.xml
+++ b/build.xml
@@ -70,8 +70,31 @@
     nbproject/build-impl.xml file. 
 
     -->
+    
+    <!--
+    JUnit 5 is not perfectly supported in Netbeans 11 at this time.  This technique
+    will all the "Test Project" choice in the "Run" menu to properly run junit 5
+    test.  Running in other ways, such as individually, doesn't seem to work.
+    https://blogs.apache.org/netbeans/entry/junit-5-apache-ant-and
+    -->
+    
+    <target name="test" depends="compile-test,-pre-test-run">
+        <java dir="${work.dir}" 
+              classpath="${run.test.classpath}"  
+              classname="org.junit.platform.console.ConsoleLauncher">
+            <arg value="--scan-classpath"/>
+            <arg line="--reports-dir build/test/results"/>
+        </java>
+        <junitreport todir="build/test/results">
+            <fileset dir="build/test/results">
+                <include name="TEST-*.xml"/>
+            </fileset>
+            <report format="frames" todir="build/test/results/html"/>
+        </junitreport>
+    </target>
+    
+    
     <target name="jar-javadoc" depends="javadoc">
-        <mkdir dir="${basedir}/dist/javadoc"/>
         <jar destfile="${basedir}/dist/open-dis7-javadoc.jar" basedir="${basedir}/dist/javadoc">            
             <manifest>
                 <attribute name="Built-By" value="open-dis-7-java"/>
@@ -83,7 +106,6 @@
                 <attribute name="Implementation-Vendor" value="Naval Postgraduate School"/>
             </manifest>
         </jar>
-        <delete dir="${basedir}/dist/javadoc"/>
     </target>
     
     <target name="jar-source">
diff --git a/dist/open-dis7-java.jar b/dist/open-dis7-java.jar
index 309c3e05ad8bc8d80f3507c5f4fcc2454e16d45c..4c8a6dbbb8bb3f4022d98a1ca27fd10637c82883 100644
Binary files a/dist/open-dis7-java.jar and b/dist/open-dis7-java.jar differ
diff --git a/dist/open-dis7-javadoc.jar b/dist/open-dis7-javadoc.jar
index 3d07ea8d481e5be6b333fa1f4e9403596a6ef803..69ebf09d0b1d1377b369ab1e6e22c1cfdcfc546b 100644
Binary files a/dist/open-dis7-javadoc.jar and b/dist/open-dis7-javadoc.jar differ
diff --git a/dist/open-dis7-source.jar b/dist/open-dis7-source.jar
index d506c26477c9f11f7b1ec99e65533566c45282f8..22c5fde380a80dc1414474b2d667a380aacff268 100644
Binary files a/dist/open-dis7-source.jar and b/dist/open-dis7-source.jar differ
diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml
index b10a0bd81c0992315837b5b4e3fb3f669ebc0557..ad77865ed2742a629bc2ab594114577f8960ba78 100644
--- a/nbproject/build-impl.xml
+++ b/nbproject/build-impl.xml
@@ -119,43 +119,7 @@ is divided into following sections:
         <property name="module.name" value=""/>
     </target>
     <target depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property,-init-modules-supported" name="-do-init">
-        <j2seproject1:property name="platform.home" value="platforms.${platform.active}.home"/>
-        <j2seproject1:property name="platform.bootcp" value="platforms.${platform.active}.bootclasspath"/>
-        <j2seproject1:property name="platform.compiler" value="platforms.${platform.active}.compile"/>
-        <j2seproject1:property name="platform.javac.tmp" value="platforms.${platform.active}.javac"/>
-        <condition property="platform.javac" value="${platform.home}/bin/javac">
-            <equals arg1="${platform.javac.tmp}" arg2="$${platforms.${platform.active}.javac}"/>
-        </condition>
-        <property name="platform.javac" value="${platform.javac.tmp}"/>
-        <j2seproject1:property name="platform.java.tmp" value="platforms.${platform.active}.java"/>
-        <condition property="platform.java" value="${platform.home}/bin/java">
-            <equals arg1="${platform.java.tmp}" arg2="$${platforms.${platform.active}.java}"/>
-        </condition>
-        <property name="platform.java" value="${platform.java.tmp}"/>
-        <j2seproject1:property name="platform.javadoc.tmp" value="platforms.${platform.active}.javadoc"/>
-        <condition property="platform.javadoc" value="${platform.home}/bin/javadoc">
-            <equals arg1="${platform.javadoc.tmp}" arg2="$${platforms.${platform.active}.javadoc}"/>
-        </condition>
-        <property name="platform.javadoc" value="${platform.javadoc.tmp}"/>
-        <condition property="platform.invalid" value="true">
-            <or>
-                <contains string="${platform.javac}" substring="$${platforms."/>
-                <contains string="${platform.java}" substring="$${platforms."/>
-                <contains string="${platform.javadoc}" substring="$${platforms."/>
-            </or>
-        </condition>
-        <fail unless="platform.home">Must set platform.home</fail>
-        <fail unless="platform.bootcp">Must set platform.bootcp</fail>
-        <fail unless="platform.java">Must set platform.java</fail>
-        <fail unless="platform.javac">Must set platform.javac</fail>
-        <fail if="platform.invalid">
- The J2SE Platform is not correctly set up.
- Your active platform is: ${platform.active}, but the corresponding property "platforms.${platform.active}.home" is not found in the project's properties files. 
- Either open the project in the IDE and setup the Platform with the same name or add it manually.
- For example like this:
-     ant -Duser.properties.file=&lt;path_to_property_file&gt; jar (where you put the property "platforms.${platform.active}.home" in a .properties file)
-  or ant -Dplatforms.${platform.active}.home=&lt;path_to_JDK_home&gt; jar (where no properties file is used) 
-  </fail>
+        <property name="platform.java" value="${java.home}/bin/java"/>
         <available file="${manifest.file}" property="manifest.available"/>
         <condition property="splashscreen.available">
             <and>
@@ -291,6 +255,20 @@ is divided into following sections:
         <condition else="" property="javac.profile.cmd.line.arg" value="-profile ${javac.profile}">
             <isset property="profile.available"/>
         </condition>
+        <condition else="false" property="jdkBug6558476">
+            <and>
+                <matches pattern="1\.[56]" string="${java.specification.version}"/>
+                <not>
+                    <os family="unix"/>
+                </not>
+            </and>
+        </condition>
+        <condition else="false" property="javac.fork">
+            <or>
+                <istrue value="${jdkBug6558476}"/>
+                <istrue value="${javac.external.vm}"/>
+            </or>
+        </condition>
         <property name="jar.index" value="false"/>
         <property name="jar.index.metainf" value="${jar.index}"/>
         <property name="copylibs.rebase" value="true"/>
@@ -379,7 +357,7 @@ is divided into following sections:
                         </path>
                     </resourcecount>
                 </condition>
-                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" executable="${platform.javac}" fork="yes" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
                     <src>
                         <dirset dir="@{gensrcdir}" erroronmissingdir="false">
                             <include name="*"/>
@@ -430,7 +408,7 @@ is divided into following sections:
                 <property location="${build.dir}/empty" name="empty.dir"/>
                 <mkdir dir="${empty.dir}"/>
                 <mkdir dir="@{apgeneratedsrcdir}"/>
-                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" executable="${platform.javac}" fork="yes" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
                     <src>
                         <dirset dir="@{gensrcdir}" erroronmissingdir="false">
                             <include name="*"/>
@@ -472,7 +450,7 @@ is divided into following sections:
             <sequential>
                 <property location="${build.dir}/empty" name="empty.dir"/>
                 <mkdir dir="${empty.dir}"/>
-                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" executable="${platform.javac}" fork="yes" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
+                <javac debug="@{debug}" deprecation="${javac.deprecation}" destdir="@{destdir}" encoding="${source.encoding}" excludes="@{excludes}" fork="${javac.fork}" includeantruntime="false" includes="@{includes}" source="${javac.source}" sourcepath="@{sourcepath}" srcdir="@{srcdir}" target="${javac.target}" tempdir="${java.io.tmpdir}">
                     <src>
                         <dirset dir="@{gensrcdir}" erroronmissingdir="false">
                             <include name="*"/>
@@ -551,7 +529,7 @@ is divided into following sections:
             <element name="customizePrototype" optional="true"/>
             <sequential>
                 <property name="junit.forkmode" value="perTest"/>
-                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" jvm="${platform.java}" showoutput="true" tempdir="${build.dir}">
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
                     <syspropertyset>
                         <propertyref prefix="test-sys-prop."/>
                         <mapper from="test-sys-prop.*" to="*" type="glob"/>
@@ -579,7 +557,7 @@ is divided into following sections:
             <element name="customizePrototype" optional="true"/>
             <sequential>
                 <property name="junit.forkmode" value="perTest"/>
-                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" jvm="${platform.java}" showoutput="true" tempdir="${build.dir}">
+                <junit dir="${work.dir}" errorproperty="tests.failed" failureproperty="tests.failed" fork="true" forkmode="${junit.forkmode}" showoutput="true" tempdir="${build.dir}">
                     <syspropertyset>
                         <propertyref prefix="test-sys-prop."/>
                         <mapper from="test-sys-prop.*" to="*" type="glob"/>
@@ -655,7 +633,7 @@ is divided into following sections:
                     </fileset>
                 </union>
                 <taskdef classname="org.testng.TestNGAntTask" classpath="${run.test.classpath}" name="testng"/>
-                <testng classfilesetref="test.set" failureProperty="tests.failed" jvm="${platform.java}" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="open-dis7-java" testname="TestNG tests" workingDir="${work.dir}">
+                <testng classfilesetref="test.set" failureProperty="tests.failed" listeners="org.testng.reporters.VerboseReporter" methods="${testng.methods.arg}" mode="${testng.mode}" outputdir="${build.test.results.dir}" suitename="open-dis7-java" testname="TestNG tests" workingDir="${work.dir}">
                     <xmlfileset dir="${build.test.classes.dir}" includes="@{testincludes}"/>
                     <propertyset>
                         <propertyref prefix="test-sys-prop."/>
@@ -886,9 +864,6 @@ is divided into following sections:
                     <classpath>
                         <path path="@{classpath}"/>
                     </classpath>
-                    <bootclasspath>
-                        <path path="${platform.bootcp}"/>
-                    </bootclasspath>
                 </nbjpdastart>
             </sequential>
         </macrodef>
@@ -938,7 +913,7 @@ is divided into following sections:
             <attribute default="jvm" name="jvm"/>
             <element name="customize" optional="true"/>
             <sequential>
-                <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true" jvm="${platform.java}" module="@{modulename}">
+                <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true" module="@{modulename}">
                     <classpath>
                         <path path="@{classpath}"/>
                     </classpath>
@@ -972,7 +947,7 @@ is divided into following sections:
             <attribute default="jvm" name="jvm"/>
             <element name="customize" optional="true"/>
             <sequential>
-                <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true" jvm="${platform.java}">
+                <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true">
                     <classpath>
                         <path path="@{classpath}"/>
                     </classpath>
@@ -1004,7 +979,7 @@ is divided into following sections:
             <attribute default="jvm" name="jvm"/>
             <element name="customize" optional="true"/>
             <sequential>
-                <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true" jvm="${platform.java}">
+                <java classname="@{classname}" dir="${work.dir}" failonerror="${java.failonerror}" fork="true">
                     <jvmarg line="${endorsed.classpath.cmd.line.arg}"/>
                     <jvmarg value="-Dfile.encoding=${runtime.encoding}"/>
                     <redirector errorencoding="${runtime.encoding}" inputencoding="${runtime.encoding}" outputencoding="${runtime.encoding}"/>
@@ -1225,7 +1200,7 @@ is divided into following sections:
         <j2seproject3:copylibs manifest="${tmp.manifest.file}"/>
         <echo level="info">To run this application from the command line without Ant, try:</echo>
         <property location="${dist.jar}" name="dist.jar.resolved"/>
-        <echo level="info">${platform.java} -jar "${dist.jar.resolved}"</echo>
+        <echo level="info">java -jar "${dist.jar.resolved}"</echo>
     </target>
     <target depends="init,compile,-pre-pre-jar,-pre-jar,-do-jar-create-manifest,-do-jar-copy-manifest,-do-jar-set-mainclass,-do-jar-set-profile,-do-jar-set-splashscreen" if="do.archive" name="-do-jar-jar" unless="do.mkdist">
         <j2seproject1:jar manifest="${tmp.manifest.file}"/>
@@ -1327,8 +1302,8 @@ is divided into following sections:
                 <isset property="main.class.available"/>
             </and>
         </condition>
-        <property name="platform.jlink" value="${platform.home}/bin/jlink"/>
-        <property name="jlink.systemmodules.internal" value="${platform.home}/jmods"/>
+        <property name="platform.jlink" value="${jdk.home}/bin/jlink"/>
+        <property name="jlink.systemmodules.internal" value="${jdk.home}/jmods"/>
         <exec executable="${platform.jlink}">
             <arg value="--module-path"/>
             <arg path="${jlink.systemmodules.internal}:${run.modulepath}:${dist.jar}"/>
@@ -1521,19 +1496,16 @@ is divided into following sections:
                 </not>
             </and>
         </condition>
-        <exec executable="${platform.java}" failonerror="false" outputproperty="platform.version.output">
-            <arg value="-version"/>
-        </exec>
         <condition else="" property="bug5101868workaround" value="*.java">
-            <matches multiline="true" pattern="1\.[56](\..*)?" string="${platform.version.output}"/>
+            <matches pattern="1\.[56](\..*)?" string="${java.version}"/>
         </condition>
         <condition else="" property="javadoc.html5.cmd.line.arg" value="-html5">
             <and>
                 <isset property="javadoc.html5"/>
-                <available file="${platform.home}${file.separator}lib${file.separator}jrt-fs.jar"/>
+                <available file="${jdk.home}${file.separator}lib${file.separator}jrt-fs.jar"/>
             </and>
         </condition>
-        <javadoc additionalparam="-J-Dfile.encoding=${file.encoding} ${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" executable="${platform.javadoc}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
+        <javadoc additionalparam="-J-Dfile.encoding=${file.encoding} ${javadoc.additionalparam}" author="${javadoc.author}" charset="UTF-8" destdir="${dist.javadoc.dir}" docencoding="UTF-8" encoding="${javadoc.encoding.used}" failonerror="true" noindex="${javadoc.noindex}" nonavbar="${javadoc.nonavbar}" notree="${javadoc.notree}" private="${javadoc.private}" source="${javac.source}" splitindex="${javadoc.splitindex}" use="${javadoc.use}" useexternalfile="true" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}">
             <classpath>
                 <path path="${javac.classpath}"/>
             </classpath>
diff --git a/nbproject/configs/PduListenerSaver_no_arg.properties b/nbproject/configs/PduListenerSaver_no_arg.properties
new file mode 100644
index 0000000000000000000000000000000000000000..4838d5ae2c7dbeaa531123d28efc576e4b667376
--- /dev/null
+++ b/nbproject/configs/PduListenerSaver_no_arg.properties
@@ -0,0 +1,2 @@
+$label=PduListenerSaver no arg
+main.class=edu.nps.moves.dis7.examples.PduListenerSaver
diff --git a/nbproject/project.properties b/nbproject/project.properties
index bcec30e35becfe52af765e37abf18eb252a87e6b..44d248b2040ee81b10ec6822a2e6f7725a12f35d 100644
--- a/nbproject/project.properties
+++ b/nbproject/project.properties
@@ -1,112 +1,125 @@
-annotation.processing.enabled=true
-annotation.processing.enabled.in.editor=false
-annotation.processing.processors.list=
-annotation.processing.run.all.processors=true
-annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
-application.title=open-dis7-java
-application.vendor=mike
-build.classes.dir=${build.dir}/classes
-build.classes.excludes=**/*.java,**/*.form
-# This directory is removed when the project is cleaned:
-build.dir=build
-build.generated.dir=${build.dir}/generated
-build.generated.sources.dir=${build.dir}/generated-sources
-# Only compile against the classpath explicitly listed here:
-build.sysclasspath=ignore
-build.test.classes.dir=${build.dir}/test/classes
-build.test.results.dir=${build.dir}/test/results
-# Uncomment to specify the preferred debugger connection transport:
-#debug.transport=dt_socket
-debug.classpath=\
-    ${run.classpath}
-debug.modulepath=\
-    ${run.modulepath}
-debug.test.classpath=\
-    ${run.test.classpath}
-debug.test.modulepath=\
-    ${run.test.modulepath}
-# Files in build.classes.dir which should be excluded from distribution jar
-dist.archive.excludes=
-# This directory is removed when the project is cleaned:
-dist.dir=dist
-dist.jar=${dist.dir}/open-dis7-java.jar
-dist.javadoc.dir=${dist.dir}/javadoc
-dist.jlink.dir=${dist.dir}/jlink
-dist.jlink.output=${dist.jlink.dir}/open-dis7-java
-endorsed.classpath=
-excludes=
-file.reference.commons-io-2.6.jar=optionallibs/commons-io-2.6.jar
-file.reference.guava-28.0-jre.jar=optionallibs/guava-28.0-jre.jar
-file.reference.open-dis7-entities-all.jar=entityjars/open-dis7-entities-all.jar
-file.reference.open-dis7-entities-usa-land.jar=entityjars/open-dis7-entities-usa-land.jar
-file.reference.open-dis7-entities-usa-surface.jar=entityjars/open-dis7-entities-usa-surface.jar
-includes=**
-jar.compress=false
-javac.classpath=\
-    ${file.reference.guava-28.0-jre.jar}:\
-    ${file.reference.commons-io-2.6.jar}:\
-    ${file.reference.open-dis7-entities-usa-surface.jar}:\
-    ${file.reference.open-dis7-entities-usa-land.jar}
-# Space-separated list of extra javac options
-javac.compilerargs=
-javac.deprecation=false
-javac.external.vm=true
-javac.modulepath=
-javac.processormodulepath=
-javac.processorpath=\
-    ${javac.classpath}
-javac.source=1.8
-javac.target=1.8
-javac.test.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}:\
-    ${libs.junit_5.classpath}:\
-    ${file.reference.open-dis7-entities-all.jar}
-javac.test.modulepath=\
-    ${javac.modulepath}
-javac.test.processorpath=\
-    ${javac.test.classpath}
-javadoc.additionalparam=
-javadoc.author=false
-javadoc.encoding=${source.encoding}
-javadoc.html5=false
-javadoc.noindex=false
-javadoc.nonavbar=false
-javadoc.notree=false
-javadoc.private=false
-javadoc.reference.open-dis7-entities-usa-surface.jar=entityjars/open-dis7-entities-javadoc.jar
-javadoc.splitindex=true
-javadoc.use=true
-javadoc.version=false
-javadoc.windowtitle=
-# The jlink additional root modules to resolve
-jlink.additionalmodules=
-# The jlink additional command line parameters
-jlink.additionalparam=
-jlink.launcher=true
-jlink.launcher.name=open-dis7-java
-main.class=edu.nps.moves.dis7.util.playerrecorder.Player
-meta.inf.dir=${src.dir}/META-INF
-mkdist.disabled=true
-platform.active=default_platform
-project.licensePath=license.txt
-run.classpath=\
-    ${javac.classpath}:\
-    ${build.classes.dir}
-# Space-separated list of JVM arguments used when running the project.
-# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
-# To set system properties for unit tests define test-sys-prop.name=value:
-run.jvmargs=
-run.modulepath=\
-    ${javac.modulepath}
-run.test.classpath=\
-    ${javac.test.classpath}:\
-    ${build.test.classes.dir}:\
-    ${file.reference.open-dis7-entities-all.jar}
-run.test.modulepath=\
-    ${javac.test.modulepath}
-source.encoding=UTF-8
-src.dir=src
-src.src-generated.dir=src-generated
-test.src.dir=test
-manifest.file=MANIFEST.MF
+annotation.processing.enabled=true
+annotation.processing.enabled.in.editor=false
+annotation.processing.processors.list=
+annotation.processing.run.all.processors=true
+annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
+application.title=open-dis7-java
+application.vendor=mike
+build.classes.dir=${build.dir}/classes
+build.classes.excludes=**/*.java,**/*.form
+# This directory is removed when the project is cleaned:
+build.dir=build
+build.generated.dir=${build.dir}/generated
+build.generated.sources.dir=${build.dir}/generated-sources
+# Only compile against the classpath explicitly listed here:
+build.sysclasspath=ignore
+build.test.classes.dir=${build.dir}/test/classes
+build.test.results.dir=${build.dir}/test/results
+# Uncomment to specify the preferred debugger connection transport:
+#debug.transport=dt_socket
+debug.classpath=\
+    ${run.classpath}
+debug.modulepath=\
+    ${run.modulepath}
+debug.test.classpath=\
+    ${run.test.classpath}
+debug.test.modulepath=\
+    ${run.test.modulepath}
+# Files in build.classes.dir which should be excluded from distribution jar
+dist.archive.excludes=
+# This directory is removed when the project is cleaned:
+dist.dir=dist
+dist.jar=${dist.dir}/open-dis7-java.jar
+dist.javadoc.dir=${dist.dir}/javadoc
+dist.jlink.dir=${dist.dir}/jlink
+dist.jlink.output=${dist.jlink.dir}/open-dis7-java
+endorsed.classpath=
+excludes=
+file.reference.apiguardian-api-1.1.0.jar=testlibs/apiguardian-api-1.1.0.jar
+file.reference.commons-io-2.6.jar=optionallibs/commons-io-2.6.jar
+file.reference.guava-28.0-jre.jar=optionallibs/guava-28.0-jre.jar
+file.reference.junit-platform-commons-1.5.1.jar=testlibs/junit-platform-commons-1.5.1.jar
+file.reference.junit-platform-console-1.5.1.jar=testlibs/junit-platform-console-1.5.1.jar
+file.reference.junit-platform-engine-1.5.1.jar=testlibs/junit-platform-engine-1.5.1.jar
+file.reference.junit-platform-launcher-1.5.1.jar=testlibs/junit-platform-launcher-1.5.1.jar
+file.reference.junit-platform-reporting-1.5.1.jar=testlibs/junit-platform-reporting-1.5.1.jar
+file.reference.open-dis7-entities-all.jar=entityjars/open-dis7-entities-all.jar
+file.reference.open-dis7-entities-usa-land.jar=entityjars/open-dis7-entities-usa-land.jar
+file.reference.open-dis7-entities-usa-surface.jar=entityjars/open-dis7-entities-usa-surface.jar
+file.reference.opentest4j-1.2.0.jar=testlibs/opentest4j-1.2.0.jar
+includes=**
+jar.compress=false
+javac.classpath=\
+    ${file.reference.guava-28.0-jre.jar}:\
+    ${file.reference.commons-io-2.6.jar}:\
+    ${file.reference.open-dis7-entities-usa-surface.jar}:\
+    ${file.reference.open-dis7-entities-usa-land.jar}
+# Space-separated list of extra javac options
+javac.compilerargs=
+javac.deprecation=false
+javac.external.vm=true
+javac.modulepath=
+javac.processormodulepath=
+javac.processorpath=\
+    ${javac.classpath}
+javac.source=1.8
+javac.target=1.8
+javac.test.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}:\
+    ${libs.junit_5.classpath}:\
+    ${file.reference.open-dis7-entities-all.jar}:\
+    ${file.reference.apiguardian-api-1.1.0.jar}:\
+    ${file.reference.junit-platform-commons-1.5.1.jar}:\
+    ${file.reference.junit-platform-console-1.5.1.jar}:\
+    ${file.reference.junit-platform-engine-1.5.1.jar}:\
+    ${file.reference.junit-platform-launcher-1.5.1.jar}:\
+    ${file.reference.junit-platform-reporting-1.5.1.jar}:\
+    ${file.reference.opentest4j-1.2.0.jar}
+javac.test.modulepath=\
+    ${javac.modulepath}
+javac.test.processorpath=\
+    ${javac.test.classpath}
+javadoc.additionalparam=
+javadoc.author=false
+javadoc.encoding=${source.encoding}
+javadoc.html5=false
+javadoc.noindex=false
+javadoc.nonavbar=false
+javadoc.notree=false
+javadoc.private=false
+javadoc.reference.open-dis7-entities-usa-surface.jar=entityjars/open-dis7-entities-javadoc.jar
+javadoc.splitindex=true
+javadoc.use=true
+javadoc.version=false
+javadoc.windowtitle=
+# The jlink additional root modules to resolve
+jlink.additionalmodules=
+# The jlink additional command line parameters
+jlink.additionalparam=
+jlink.launcher=true
+jlink.launcher.name=open-dis7-java
+main.class=edu.nps.moves.dis7.util.playerrecorder.Player
+meta.inf.dir=${src.dir}/META-INF
+mkdist.disabled=true
+platform.active=JDK_12
+run.classpath=\
+    ${javac.classpath}:\
+    ${build.classes.dir}
+# Space-separated list of JVM arguments used when running the project.
+# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
+# To set system properties for unit tests define test-sys-prop.name=value:
+run.jvmargs=
+run.modulepath=\
+    ${javac.modulepath}
+run.test.classpath=\
+    ${javac.test.classpath}:\
+    ${build.test.classes.dir}:\
+    ${file.reference.open-dis7-entities-all.jar}
+run.test.modulepath=\
+    ${javac.test.modulepath}
+source.encoding=UTF-8
+src.dir=src
+src.src-generated.dir=src-generated
+test.src.dir=test
+manifest.file=MANIFEST.MF
diff --git a/src-generated/edu/nps/moves/dis7/ActionRequestPdu.java b/src-generated/edu/nps/moves/dis7/ActionRequestPdu.java
index da72ea63b8f2de2472be9876f0a64fe12b1696e9..bb160d13b3103ebdeae52f7423a56df343b8f5d1 100644
--- a/src-generated/edu/nps/moves/dis7/ActionRequestPdu.java
+++ b/src-generated/edu/nps/moves/dis7/ActionRequestPdu.java
@@ -24,7 +24,7 @@ public class ActionRequestPdu extends SimulationManagementFamilyPdu implements S
    /** Number of fixed datum records */
    protected int  numberOfFixedDatumRecords;
 
-   /** Number of variable datum records */
+   /** Number of variable datum records, handled automatically by marshaller at run time (and not modifiable by end-user programmers) */
    protected int  numberOfVariableDatumRecords;
 
    /** variable length list of fixed datums */
diff --git a/src-generated/edu/nps/moves/dis7/ActionResponsePdu.java b/src-generated/edu/nps/moves/dis7/ActionResponsePdu.java
index 73174f7a1dbf028652eb5b6b3c6f1e63f5e7e74c..c20f312612d4db803ba4349567b470fd7956ca4d 100644
--- a/src-generated/edu/nps/moves/dis7/ActionResponsePdu.java
+++ b/src-generated/edu/nps/moves/dis7/ActionResponsePdu.java
@@ -24,7 +24,7 @@ public class ActionResponsePdu extends SimulationManagementFamilyPdu implements
    /** Number of fixed datum records */
    protected int  numberOfFixedDatumRecords;
 
-   /** Number of variable datum records */
+   /** Number of variable datum records, handled automatically by marshaller at run time (and not modifiable by end-user programmers) */
    protected int  numberOfVariableDatumRecords;
 
    /** fixed length list of fixed datums */
diff --git a/src-generated/edu/nps/moves/dis7/AggregateStatePdu.java b/src-generated/edu/nps/moves/dis7/AggregateStatePdu.java
index 62f6b9c474c282f2121037f79ee7cbb15730e2db..7e60675e328a48a071f94c56559e741bc113f9b4 100644
--- a/src-generated/edu/nps/moves/dis7/AggregateStatePdu.java
+++ b/src-generated/edu/nps/moves/dis7/AggregateStatePdu.java
@@ -54,7 +54,7 @@ public class AggregateStatePdu extends EntityManagementFamilyPdu implements Seri
    /** number of silent aggregate types */
    protected short  numberOfSilentAggregateTypes;
 
-   /** number of silent entity types */
+   /** Number of silent entity types, handled automatically by marshaller at run time (and not modifiable by end-user programmers) */
    protected short  numberOfSilentEntityTypes;
 
    /** aggregates  list */
@@ -71,7 +71,7 @@ public class AggregateStatePdu extends EntityManagementFamilyPdu implements Seri
    /** silent entity types */
    protected List< EntityType > silentEntitySystemList = new ArrayList< EntityType >();
  
-   /** number of variable datum records */
+   /** Number of variable datum records, handled automatically by marshaller at run time (and not modifiable by end-user programmers) */
    protected int  numberOfVariableDatumRecords;
 
    /** variableDatums */
diff --git a/src-generated/edu/nps/moves/dis7/CommentPdu.java b/src-generated/edu/nps/moves/dis7/CommentPdu.java
index 331ed2ea5dfe572d7eaea9015f15fc506a223525..a7776c041104c96d0e58a5649281f020fd6df51c 100644
--- a/src-generated/edu/nps/moves/dis7/CommentPdu.java
+++ b/src-generated/edu/nps/moves/dis7/CommentPdu.java
@@ -15,15 +15,12 @@ import edu.nps.moves.dis7.enumerations.*;
  */
 public class CommentPdu extends SimulationManagementFamilyPdu implements Serializable
 {
-   /** Number of fixed datum records */
+   /** Number of fixed datum records, not used in this Pdu */
    protected int  numberOfFixedDatumRecords;
 
-   /** Number of variable datum records */
+   /** Number of variable datum records, handled automatically by marshaller at run time (and not modifiable by end-user programmers) */
    protected int  numberOfVariableDatumRecords;
 
-   /** variable length list of fixed datums */
-   protected List< FixedDatum > fixedDatums = new ArrayList< FixedDatum >();
- 
    /** variable length list of variable length datums */
    protected List< VariableDatum > variableDatums = new ArrayList< VariableDatum >();
  
@@ -42,11 +39,6 @@ public int getMarshalledSize()
    marshalSize = super.getMarshalledSize();
    marshalSize += 4;  // numberOfFixedDatumRecords
    marshalSize += 4;  // numberOfVariableDatumRecords
-   for(int idx=0; idx < fixedDatums.size(); idx++)
-   {
-        FixedDatum listElement = fixedDatums.get(idx);
-        marshalSize += listElement.getMarshalledSize();
-   }
    for(int idx=0; idx < variableDatums.size(); idx++)
    {
         VariableDatum listElement = variableDatums.get(idx);
@@ -57,19 +49,6 @@ public int getMarshalledSize()
 }
 
 
-/** Setter for {@link CommentPdu#fixedDatums}*/
-public CommentPdu setFixedDatums(List<FixedDatum> pFixedDatums)
-{
-    fixedDatums = pFixedDatums;
-    return this;
-}
-
-/** Getter for {@link CommentPdu#fixedDatums}*/
-public List<FixedDatum> getFixedDatums()
-{
-    return fixedDatums; 
-}
-
 /** Setter for {@link CommentPdu#variableDatums}*/
 public CommentPdu setVariableDatums(List<VariableDatum> pVariableDatums)
 {
@@ -93,16 +72,9 @@ public void marshal(DataOutputStream dos) throws Exception
     super.marshal(dos);
     try 
     {
-       dos.writeInt( (int)fixedDatums.size());
+       dos.writeInt( (int)numberOfFixedDatumRecords);
        dos.writeInt( (int)variableDatums.size());
 
-       for(int idx = 0; idx < fixedDatums.size(); idx++)
-       {
-            FixedDatum aFixedDatum = fixedDatums.get(idx);
-            aFixedDatum.marshal(dos);
-       }
-
-
        for(int idx = 0; idx < variableDatums.size(); idx++)
        {
             VariableDatum aVariableDatum = variableDatums.get(idx);
@@ -133,13 +105,6 @@ public int unmarshal(DataInputStream dis) throws Exception
         uPosition += 4;
         numberOfVariableDatumRecords = dis.readInt();
         uPosition += 4;
-        for(int idx = 0; idx < numberOfFixedDatumRecords; idx++)
-        {
-            FixedDatum anX = new FixedDatum();
-            uPosition += anX.unmarshal(dis);
-            fixedDatums.add(anX);
-        }
-
         for(int idx = 0; idx < numberOfVariableDatumRecords; idx++)
         {
             VariableDatum anX = new VariableDatum();
@@ -166,16 +131,9 @@ public int unmarshal(DataInputStream dis) throws Exception
 public void marshal(java.nio.ByteBuffer buff) throws Exception
 {
    super.marshal(buff);
-   buff.putInt( (int)fixedDatums.size());
+   buff.putInt( (int)numberOfFixedDatumRecords);
    buff.putInt( (int)variableDatums.size());
 
-   for(int idx = 0; idx < fixedDatums.size(); idx++)
-   {
-        FixedDatum aFixedDatum = (FixedDatum)fixedDatums.get(idx);
-        aFixedDatum.marshal(buff);
-   }
-
-
    for(int idx = 0; idx < variableDatums.size(); idx++)
    {
         VariableDatum aVariableDatum = (VariableDatum)variableDatums.get(idx);
@@ -198,13 +156,6 @@ public int unmarshal(java.nio.ByteBuffer buff) throws Exception
 
     numberOfFixedDatumRecords = buff.getInt();
     numberOfVariableDatumRecords = buff.getInt();
-    for(int idx = 0; idx < numberOfFixedDatumRecords; idx++)
-    {
-    FixedDatum anX = new FixedDatum();
-    anX.unmarshal(buff);
-    fixedDatums.add(anX);
-    }
-
     for(int idx = 0; idx < numberOfVariableDatumRecords; idx++)
     {
     VariableDatum anX = new VariableDatum();
@@ -241,10 +192,6 @@ public int unmarshal(java.nio.ByteBuffer buff) throws Exception
      final CommentPdu rhs = (CommentPdu)obj;
 
 
-     for(int idx = 0; idx < fixedDatums.size(); idx++)
-        if( ! ( fixedDatums.get(idx).equals(rhs.fixedDatums.get(idx)))) ivarsEqual = false;
-
-
      for(int idx = 0; idx < variableDatums.size(); idx++)
         if( ! ( variableDatums.get(idx).equals(rhs.variableDatums.get(idx)))) ivarsEqual = false;
 
diff --git a/src-generated/edu/nps/moves/dis7/CommentRPdu.java b/src-generated/edu/nps/moves/dis7/CommentRPdu.java
index 6294f59501a4a52d9816368d1f48f94a79e0bad6..f2309c53a17b88cffc3aac0daf8eab6b28771c2e 100644
--- a/src-generated/edu/nps/moves/dis7/CommentRPdu.java
+++ b/src-generated/edu/nps/moves/dis7/CommentRPdu.java
@@ -15,15 +15,12 @@ import edu.nps.moves.dis7.enumerations.*;
  */
 public class CommentRPdu extends SimulationManagementWithReliabilityFamilyPdu implements Serializable
 {
-   /** Fixed datum record count */
+   /** Fixed datum record count, not used in this Pdu */
    protected int  numberOfFixedDatumRecords;
 
    /** variable datum record count */
    protected int  numberOfVariableDatumRecords;
 
-   /** Fixed datum records */
-   protected List< FixedDatum > fixedDatumRecords = new ArrayList< FixedDatum >();
- 
    /** Variable datum records */
    protected List< VariableDatum > variableDatumRecords = new ArrayList< VariableDatum >();
  
@@ -42,11 +39,6 @@ public int getMarshalledSize()
    marshalSize = super.getMarshalledSize();
    marshalSize += 4;  // numberOfFixedDatumRecords
    marshalSize += 4;  // numberOfVariableDatumRecords
-   for(int idx=0; idx < fixedDatumRecords.size(); idx++)
-   {
-        FixedDatum listElement = fixedDatumRecords.get(idx);
-        marshalSize += listElement.getMarshalledSize();
-   }
    for(int idx=0; idx < variableDatumRecords.size(); idx++)
    {
         VariableDatum listElement = variableDatumRecords.get(idx);
@@ -57,19 +49,6 @@ public int getMarshalledSize()
 }
 
 
-/** Setter for {@link CommentRPdu#fixedDatumRecords}*/
-public CommentRPdu setFixedDatumRecords(List<FixedDatum> pFixedDatumRecords)
-{
-    fixedDatumRecords = pFixedDatumRecords;
-    return this;
-}
-
-/** Getter for {@link CommentRPdu#fixedDatumRecords}*/
-public List<FixedDatum> getFixedDatumRecords()
-{
-    return fixedDatumRecords; 
-}
-
 /** Setter for {@link CommentRPdu#variableDatumRecords}*/
 public CommentRPdu setVariableDatumRecords(List<VariableDatum> pVariableDatumRecords)
 {
@@ -93,16 +72,9 @@ public void marshal(DataOutputStream dos) throws Exception
     super.marshal(dos);
     try 
     {
-       dos.writeInt( (int)fixedDatumRecords.size());
+       dos.writeInt( (int)numberOfFixedDatumRecords);
        dos.writeInt( (int)variableDatumRecords.size());
 
-       for(int idx = 0; idx < fixedDatumRecords.size(); idx++)
-       {
-            FixedDatum aFixedDatum = fixedDatumRecords.get(idx);
-            aFixedDatum.marshal(dos);
-       }
-
-
        for(int idx = 0; idx < variableDatumRecords.size(); idx++)
        {
             VariableDatum aVariableDatum = variableDatumRecords.get(idx);
@@ -133,13 +105,6 @@ public int unmarshal(DataInputStream dis) throws Exception
         uPosition += 4;
         numberOfVariableDatumRecords = dis.readInt();
         uPosition += 4;
-        for(int idx = 0; idx < numberOfFixedDatumRecords; idx++)
-        {
-            FixedDatum anX = new FixedDatum();
-            uPosition += anX.unmarshal(dis);
-            fixedDatumRecords.add(anX);
-        }
-
         for(int idx = 0; idx < numberOfVariableDatumRecords; idx++)
         {
             VariableDatum anX = new VariableDatum();
@@ -166,16 +131,9 @@ public int unmarshal(DataInputStream dis) throws Exception
 public void marshal(java.nio.ByteBuffer buff) throws Exception
 {
    super.marshal(buff);
-   buff.putInt( (int)fixedDatumRecords.size());
+   buff.putInt( (int)numberOfFixedDatumRecords);
    buff.putInt( (int)variableDatumRecords.size());
 
-   for(int idx = 0; idx < fixedDatumRecords.size(); idx++)
-   {
-        FixedDatum aFixedDatum = (FixedDatum)fixedDatumRecords.get(idx);
-        aFixedDatum.marshal(buff);
-   }
-
-
    for(int idx = 0; idx < variableDatumRecords.size(); idx++)
    {
         VariableDatum aVariableDatum = (VariableDatum)variableDatumRecords.get(idx);
@@ -198,13 +156,6 @@ public int unmarshal(java.nio.ByteBuffer buff) throws Exception
 
     numberOfFixedDatumRecords = buff.getInt();
     numberOfVariableDatumRecords = buff.getInt();
-    for(int idx = 0; idx < numberOfFixedDatumRecords; idx++)
-    {
-    FixedDatum anX = new FixedDatum();
-    anX.unmarshal(buff);
-    fixedDatumRecords.add(anX);
-    }
-
     for(int idx = 0; idx < numberOfVariableDatumRecords; idx++)
     {
     VariableDatum anX = new VariableDatum();
@@ -241,10 +192,6 @@ public int unmarshal(java.nio.ByteBuffer buff) throws Exception
      final CommentRPdu rhs = (CommentRPdu)obj;
 
 
-     for(int idx = 0; idx < fixedDatumRecords.size(); idx++)
-        if( ! ( fixedDatumRecords.get(idx).equals(rhs.fixedDatumRecords.get(idx)))) ivarsEqual = false;
-
-
      for(int idx = 0; idx < variableDatumRecords.size(); idx++)
         if( ! ( variableDatumRecords.get(idx).equals(rhs.variableDatumRecords.get(idx)))) ivarsEqual = false;
 
diff --git a/src-generated/edu/nps/moves/dis7/DataPdu.java b/src-generated/edu/nps/moves/dis7/DataPdu.java
index 4ce1362cb073e534fb85a52e4f8b28dafe8a6e60..e73d66f853a7554dc64242956a6ead978fa6a497 100644
--- a/src-generated/edu/nps/moves/dis7/DataPdu.java
+++ b/src-generated/edu/nps/moves/dis7/DataPdu.java
@@ -24,7 +24,7 @@ public class DataPdu extends SimulationManagementFamilyPdu implements Serializab
    /** Number of fixed datum records */
    protected int  numberOfFixedDatumRecords;
 
-   /** Number of variable datum records */
+   /** Number of variable datum records, handled automatically by marshaller at run time (and not modifiable by end-user programmers) */
    protected int  numberOfVariableDatumRecords;
 
    /** variable length list of fixed datums */
diff --git a/src-generated/edu/nps/moves/dis7/DataQueryPdu.java b/src-generated/edu/nps/moves/dis7/DataQueryPdu.java
index 6f49128071bf87c5dc1b5b1dddfc1abe7d758e26..079a37edf3ec5c73f19beaeb827ea95ac61de367 100644
--- a/src-generated/edu/nps/moves/dis7/DataQueryPdu.java
+++ b/src-generated/edu/nps/moves/dis7/DataQueryPdu.java
@@ -24,7 +24,7 @@ public class DataQueryPdu extends SimulationManagementFamilyPdu implements Seria
    /** Number of fixed datum records */
    protected int  numberOfFixedDatumRecords;
 
-   /** Number of variable datum records */
+   /** Number of variable datum records, handled automatically by marshaller at run time (and not modifiable by end-user programmers) */
    protected int  numberOfVariableDatumRecords;
 
    /** variable length list of fixed datums */
diff --git a/src-generated/edu/nps/moves/dis7/EventReportPdu.java b/src-generated/edu/nps/moves/dis7/EventReportPdu.java
index 848fd2a9929e804a35d47791d42722973fa86d17..225f64a9f3ae28b8bf51cd71161549a3d8133375 100644
--- a/src-generated/edu/nps/moves/dis7/EventReportPdu.java
+++ b/src-generated/edu/nps/moves/dis7/EventReportPdu.java
@@ -24,7 +24,7 @@ public class EventReportPdu extends SimulationManagementFamilyPdu implements Ser
    /** Number of fixed datum records */
    protected int  numberOfFixedDatumRecords;
 
-   /** Number of variable datum records */
+   /** Number of variable datum records, handled automatically by marshaller at run time (and not modifiable by end-user programmers) */
    protected int  numberOfVariableDatumRecords;
 
    /** variable length list of fixed datums */
diff --git a/src-generated/edu/nps/moves/dis7/SetDataPdu.java b/src-generated/edu/nps/moves/dis7/SetDataPdu.java
index a3d28f6d7f9db866e8a452cb8a84b7b8ac3afa89..6817d1aac1758c1bb069ac077c9a6bb6f7d2cb21 100644
--- a/src-generated/edu/nps/moves/dis7/SetDataPdu.java
+++ b/src-generated/edu/nps/moves/dis7/SetDataPdu.java
@@ -24,7 +24,7 @@ public class SetDataPdu extends SimulationManagementFamilyPdu implements Seriali
    /** Number of fixed datum records */
    protected int  numberOfFixedDatumRecords;
 
-   /** Number of variable datum records */
+   /** Number of variable datum records, handled automatically by marshaller at run time (and not modifiable by end-user programmers) */
    protected int  numberOfVariableDatumRecords;
 
    /** variable length list of fixed datums */
diff --git a/src-generated/edu/nps/moves/dis7/UAEmitter.java b/src-generated/edu/nps/moves/dis7/UAEmitter.java
index 1c2b49efb276f73b151cacc12f26a6939c175fdb..d835976fff55ff340c5929de3d2bf25b07068fab 100644
--- a/src-generated/edu/nps/moves/dis7/UAEmitter.java
+++ b/src-generated/edu/nps/moves/dis7/UAEmitter.java
@@ -22,6 +22,7 @@ public class UAEmitter extends Object implements Serializable
 
    protected short  padding;
 
+   /** TODO */
    protected AcousticEmitter  acousticEmitter = new AcousticEmitter(); 
 
    /** the location of the antenna beam source with respect to the emitting entity's coordinate system. This location shall be the origin of the emitter coordinate system that shall have the same orientation as the entity coordinate system. This field shall be represented by an Entity Coordinate Vector record see 6.2.95  */
diff --git a/src-generated/edu/nps/moves/dis7/VariableDatum.java b/src-generated/edu/nps/moves/dis7/VariableDatum.java
index ace9248744f43241b402fd4ed438862c2262d033..bcd0952b81a7e561691d7c5fe5107c4be5d78f71 100644
--- a/src-generated/edu/nps/moves/dis7/VariableDatum.java
+++ b/src-generated/edu/nps/moves/dis7/VariableDatum.java
@@ -260,7 +260,7 @@ public class VariableDatum extends Object implements Serializable
 
     if (!(variableDatumID == rhs.variableDatumID))
       ivarsEqual = false;
-    if (!(variableDatumLength == rhs.variableDatumLength))
+    if (!(variableDatumLength.equals(rhs.variableDatumLength)))
       ivarsEqual = false;
     for (int idx = 0; idx < 0; idx++) {
       if (!(variableDatumValue[idx] == rhs.variableDatumValue[idx]))
diff --git a/src/edu/nps/moves/dis7/util/PduFactory.java b/src/edu/nps/moves/dis7/util/PduFactory.java
index 0ba3bf196b03d3943b7b18d073bacbe226c4578b..dcc18adb66e9159248bad775eda693fb494ebd56 100644
--- a/src/edu/nps/moves/dis7/util/PduFactory.java
+++ b/src/edu/nps/moves/dis7/util/PduFactory.java
@@ -13,6 +13,7 @@ import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Stream;
 
 /**
  * PduFactory.java created on Jun 14, 2019
@@ -39,12 +40,25 @@ public class PduFactory
   private Method getTime;
   private boolean useFastPdu = false;
 
+  /**
+   * Create a PduFactory using defaults for country (USA), exerciseId (2), application (3) and absolute timestamps.
+   */
   public PduFactory()
   {
     this.disTime = new DisTime();
     getTimeStampMethod();
   }
-
+  
+  /**
+   * Create a PduFactory which creates pdus using the specified default values.
+   * @param country used in EntityType and RadioType objects
+   * @param exerciseId used in standard Pdu header
+   * @param siteId used in standard Pdu header
+   * @param applicationId used instandard Pdu header
+   * @param useAbsoluteTimestamp boolean to specify absolute time stamps (IEEE Std 1278.1-2012, 4.6)
+   * @see   edu.nps.moves.dis7.EntityType
+   * @see   edu.nps.moves.dis7.RadioType
+   */
   public PduFactory(Country country, byte exerciseId, short siteId, short applicationId, boolean useAbsoluteTimestamp)
   {
     this.disTime = new DisTime();
@@ -70,6 +84,10 @@ public class PduFactory
     }
   }
 
+  /**
+   * Use the default or fast method to create EntityState pdus from input byte streams.
+   * @param tf true if fast method
+   */
   public void useFastEspdu(boolean tf)
   {
     useFastPdu = tf;
@@ -193,7 +211,13 @@ public class PduFactory
   }
 
   /* ********************************** */
- /* Pdu construction methods */
+  /* Pdu construction methods */
+  
+  /**
+   * Create an Entity State PDU<br>
+   * IEEE Std 1278.1-2012, 5.3.2
+   * @return the pdu
+   */
   public EntityStatePdu makeEntityStatePdu()
   {
     EntityStatePdu pdu = new EntityStatePdu()
@@ -212,6 +236,11 @@ public class PduFactory
     return (EntityStatePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Fire PDU<br>
+   * IEEE Std 1278.1-2012, 5.4.3
+   * @return the pdu
+   */  
   public FirePdu makeFirePdu()
   {
     FirePdu pdu = new FirePdu()
@@ -226,6 +255,11 @@ public class PduFactory
     return (FirePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Detonation PDU<br>
+   * IEEE Std 1278.1-2012, 5.4.4
+   * @return the pdu
+   */  
   public DetonationPdu makeDetonationPdu()
   {
     DetonationPdu pdu = new DetonationPdu()
@@ -237,6 +271,11 @@ public class PduFactory
     return (DetonationPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Collision PDU<br>
+   * IEEE Std 1278.1-2012, 5.3.3
+   * @return the pdu
+   */  
   public CollisionPdu makeCollisionPdu()
   {
     CollisionPdu pdu = new CollisionPdu()
@@ -251,6 +290,11 @@ public class PduFactory
     return (CollisionPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Service Request PDU<br>
+   * IEEE Std 1278.1-2012, 5.5.5
+   * @return the pdu
+   */  
   public ServiceRequestPdu makeServiceRequestPdu()
   {
     ServiceRequestPdu pdu = new ServiceRequestPdu()
@@ -263,6 +307,11 @@ public class PduFactory
     return (ServiceRequestPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Resupply Offer PDU<br>
+   * IEEE Std 1278.1-2012, 5.5.6
+   * @return the pdu
+   */  
   public ResupplyOfferPdu makeResupplyOfferPdu()
   {
     ResupplyOfferPdu pdu = new ResupplyOfferPdu()
@@ -272,6 +321,11 @@ public class PduFactory
     return (ResupplyOfferPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Resupply Received PDU<br>
+   * IEEE Std 1278.1-2012, 5.5.7
+   * @return the pdu
+   */  
   public ResupplyReceivedPdu makeResupplyReceivedPdu()
   {
     ResupplyReceivedPdu pdu = new ResupplyReceivedPdu()
@@ -281,6 +335,11 @@ public class PduFactory
     return (ResupplyReceivedPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Resupply Cancel PDU<br>
+   * IEEE Std 1278.1-2012, 5.5.8
+   * @return the pdu
+   */  
   public ResupplyCancelPdu makeResupplyCancelPdu()
   {
     ResupplyCancelPdu pdu = new ResupplyCancelPdu()
@@ -290,6 +349,11 @@ public class PduFactory
     return (ResupplyCancelPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Repair Complete PDU<br>
+   * IEEE Std 1278.1-2012, 5.5.10
+   * @return the pdu
+   */  
   public RepairCompletePdu makeRepairCompletePdu()
   {
     RepairCompletePdu pdu = new RepairCompletePdu()
@@ -302,7 +366,12 @@ public class PduFactory
     return (RepairCompletePdu) addBoilerPlate(pdu);
   }
 
-  public RepairResponsePdu makeRepairResponsePdu()
+   /**
+   * Create a Repair Response PDU<br>
+   * IEEE Std 1278.1-2012, 5.5.11
+   * @return the pdu
+   */  
+ public RepairResponsePdu makeRepairResponsePdu()
   {
     RepairResponsePdu pdu = new RepairResponsePdu()
       .setReceivingEntityID(newEntityID())
@@ -314,6 +383,11 @@ public class PduFactory
     return (RepairResponsePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Create Entity PDU<br>
+   * IEEE Std 1278.1-2012, 5.6.5.2
+   * @return the pdu
+   */  
   public CreateEntityPdu makeCreateEntityPdu()
   {
     CreateEntityPdu pdu = new CreateEntityPdu();
@@ -321,7 +395,12 @@ public class PduFactory
     return (CreateEntityPdu) addBoilerPlate(pdu);
   }
 
-  public RemoveEntityPdu makeRemoveEntityPdu()
+   /**
+   * Create a Remove Entity PDU<br>
+   * IEEE Std 1278.1-2012, 5.6.5.3
+   * @return the pdu
+   */  
+ public RemoveEntityPdu makeRemoveEntityPdu()
   {
     RemoveEntityPdu pdu = new RemoveEntityPdu();
     pdu.setOriginatingID(newSimulationIdentifier());
@@ -330,6 +409,11 @@ public class PduFactory
     return (RemoveEntityPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Start Resume PDU<br>
+   * IEEE Std 1278.1-2012, 5.6.5.4
+   * @return the pdu
+   */  
   public StartResumePdu makeStartResumePdu()
   {
     StartResumePdu pdu = new StartResumePdu();
@@ -337,6 +421,11 @@ public class PduFactory
     return (StartResumePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Stop Freeze PDU<br>
+   * IEEE Std 1278.1-2012, 5.6.5.5
+   * @return the pdu
+   */  
   public StopFreezePdu makeStopFreezePdu()
   {
     StopFreezePdu pdu = new StopFreezePdu();
@@ -348,6 +437,11 @@ public class PduFactory
     return (StopFreezePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Acknowledge PDU<br>
+   * IEEE Std 1278.1-2012, 5.6.5.6
+   * @return the pdu
+   */  
   public AcknowledgePdu makeAcknowledgePdu()
   {
     AcknowledgePdu pdu = new AcknowledgePdu();
@@ -360,6 +454,11 @@ public class PduFactory
     return (AcknowledgePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Action Request PDU<br>
+   * IEEE Std 1278.1-2012, 5.6.5.7
+   * @return the pdu
+   */  
   public ActionRequestPdu makeActionRequestPdu()
   {
     ActionRequestPdu pdu = new ActionRequestPdu();
@@ -369,6 +468,11 @@ public class PduFactory
     return (ActionRequestPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Action Response PDU<br>
+   * IEEE Std 1278.1-2012, 5.6.5.8
+   * @return the pdu
+   */  
   public ActionResponsePdu makeActionResponsePdu()
   {
     ActionResponsePdu pdu = new ActionResponsePdu();
@@ -378,6 +482,11 @@ public class PduFactory
     return (ActionResponsePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Data Query PDU<br>
+   * IEEE Std 1278.1-2012, 5.6.5.9
+   * @return the pdu
+   */  
   public DataQueryPdu makeDataQueryPdu()
   {
     DataQueryPdu pdu = new DataQueryPdu();
@@ -385,6 +494,11 @@ public class PduFactory
     return (DataQueryPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Set DataPDU<br>
+   * IEEE Std 1278.1-2012, 5.6.5.10
+   * @return the pdu
+   */  
   public SetDataPdu makeSetDataPdu()
   {
     SetDataPdu pdu = new SetDataPdu();
@@ -392,6 +506,11 @@ public class PduFactory
     return (SetDataPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Data PDU<br>
+   * IEEE Std 1278.1-2012, 5.6.5.11
+   * @return the pdu
+   */  
   public DataPdu makeDataPdu()
   {
     DataPdu pdu = new DataPdu();
@@ -399,6 +518,11 @@ public class PduFactory
     return (DataPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Event Report PDU<br>
+   * IEEE Std 1278.1-2012, 5.6.5.12
+   * @return the pdu
+   */  
   public EventReportPdu makeEventReportPdu()
   {
     EventReportPdu pdu = new EventReportPdu();
@@ -408,13 +532,53 @@ public class PduFactory
     return (EventReportPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Comment PDU<br>
+   * IEEE Std 1278.1-2012, 5.6.5.13
+   * @return the pdu
+   */  
   public CommentPdu makeCommentPdu()
   {
     CommentPdu pdu = new CommentPdu();
 
     return (CommentPdu) addBoilerPlate(pdu);
   }
+  
+  /**
+   * Create a Comment PDU containing the given String(s), variable record type = "OTHER"
+   * @param comments 
+   * @return the pdu
+   */
+  public CommentPdu makeCommentPdu(String ... comments)
+  {
+    return makeCommentPdu(VariableRecordType.OTHER, comments);
+  }
+  
+  /**
+   * Create a Comment PDU containing the given String(s) and variable record type
+   * @param typ VariableRecordType
+   * @param comments 
+   * @return the pdu
+   */
+  public CommentPdu makeCommentPdu(VariableRecordType typ, String... comments)
+  {
+    CommentPdu pdu = makeCommentPdu();
+    List<VariableDatum> list = pdu.getVariableDatums();
+    Stream.of(comments).forEach(s -> {
+      VariableDatum vardat = new VariableDatum();
+      vardat.setVariableDatumID(typ);
+      vardat.setVariableDatumValue(s.getBytes());
+      list.add(vardat);
+    });
 
+    return pdu;
+  }
+  
+  /**
+   * Create a Electromagnetic Emission (EE) PDU<br>
+   * IEEE Std 1278.1-2012, 5.7.3
+   * @return the pdu
+   */  
   public ElectromagneticEmissionPdu makeElectronicEmissionsPdu()
   {
     ElectromagneticEmissionPdu pdu = new ElectromagneticEmissionPdu()
@@ -426,6 +590,11 @@ public class PduFactory
     return (ElectromagneticEmissionPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Designator PDU<br>
+   * IEEE Std 1278.1-2012, 5.7.4
+   * @return the pdu
+   */
   public DesignatorPdu makeDesignatorPdu()
   {
     DesignatorPdu pdu = new DesignatorPdu()
@@ -442,6 +611,11 @@ public class PduFactory
     return (DesignatorPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Transmitter PDU<br>
+   * IEEE Std 1278.1-2012, 5.8.3
+   * @return the pdu
+   */
   public TransmitterPdu makeTransmitterPdu()
   {
     TransmitterPdu pdu = new TransmitterPdu()
@@ -459,6 +633,11 @@ public class PduFactory
     return (TransmitterPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Signal PDU<br>
+   * IEEE Std 1278.1-2012, 5.7.4
+   * @return the pdu
+   */
   public SignalPdu makeSignalPdu()
   {
     SignalPdu pdu = new SignalPdu()
@@ -469,6 +648,11 @@ public class PduFactory
     return (SignalPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Receiver PDU<br>
+   * IEEE Std 1278.1-2012, 5.8.5
+   * @return the pdu
+   */
   public ReceiverPdu makeReceiverPdu()
   {
     ReceiverPdu pdu = new ReceiverPdu()
@@ -480,6 +664,11 @@ public class PduFactory
     return (ReceiverPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a an Identification Friend or Foe (IFF) PDU<br>
+   * IEEE Std 1278.1-2012, 5.7.6
+   * @return the pdu
+   */
   public IFFPdu makeIffPdu()
   {
     IFFPdu pdu = new IFFPdu()
@@ -494,6 +683,11 @@ public class PduFactory
     return (IFFPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Designator PDU<br>
+   * IEEE Std 1278.1-2012, 5.7.4
+   * @return the pdu
+   */
   public UnderwaterAcousticPdu makeUnderwaterAcousticPdu()
   {
     UnderwaterAcousticPdu pdu = new UnderwaterAcousticPdu()
@@ -506,6 +700,11 @@ public class PduFactory
     return (UnderwaterAcousticPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Supplemental Emission/Entity State (SEES) PDU<br>
+   * IEEE Std 1278.1-2012, 5.7.7
+   * @return the pdu
+   */
   public SEESPdu makeSeesPdu()
   {
     SEESPdu pdu = new SEESPdu();
@@ -513,6 +712,11 @@ public class PduFactory
     return (SEESPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Intercom Signal PDU<br>
+   * IEEE Std 1278.1-2012, 5.8.6
+   * @return the pdu
+   */
   public IntercomSignalPdu makeIntercomSignalPdu()
   {
     IntercomSignalPdu pdu = new IntercomSignalPdu();
@@ -520,6 +724,11 @@ public class PduFactory
     return (IntercomSignalPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Intercom Control PDU<br>
+   * IEEE Std 1278.1-2012, 5.8.7
+   * @return the pdu
+   */
   public IntercomControlPdu makeIntercomControlPdu()
   {
     IntercomControlPdu pdu = new IntercomControlPdu()
@@ -532,6 +741,11 @@ public class PduFactory
     return (IntercomControlPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Designator PDU<br>
+   * IEEE Std 1278.1-2012, 5.7.4
+   * @return the pdu
+   */
   public AggregateStatePdu makeAggregateStatePdu()
   {
     AggregateStatePdu pdu = new AggregateStatePdu();
@@ -545,6 +759,11 @@ public class PduFactory
     return (AggregateStatePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an IsGroupOf PDU<br>
+   * IEEE Std 1278.1-2012, 5.9.3
+   * @return the pdu
+   */
   public IsGroupOfPdu makeIsGroupOfPdu()
   {
     IsGroupOfPdu pdu = new IsGroupOfPdu()
@@ -555,6 +774,11 @@ public class PduFactory
     return (IsGroupOfPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Transfer Ownership PDU<br>
+   * IEEE Std 1278.1-2012, 5.9.4
+   * @return the pdu
+   */
   public TransferOwnershipPdu makeTransferOwnershipPdu()
   {
     TransferOwnershipPdu pdu = new TransferOwnershipPdu()
@@ -569,6 +793,11 @@ public class PduFactory
     return (TransferOwnershipPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an IsPartOf PDU<br>
+   * IEEE Std 1278.1-2012, 5.9.5
+   * @return the pdu
+   */
   public IsPartOfPdu makeIsPartOfPdu()
   {
     IsPartOfPdu pdu = new IsPartOfPdu()
@@ -583,6 +812,11 @@ public class PduFactory
     return (IsPartOfPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Minefield State PDU<br>
+   * IEEE Std 1278.1-2012, 5.10.2
+   * @return the pdu
+   */
   public MinefieldStatePdu makeMinefieldStatePdu()
   {
     MinefieldStatePdu pdu = new MinefieldStatePdu();
@@ -598,6 +832,11 @@ public class PduFactory
     return (MinefieldStatePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Minefield Query PDU<br>
+   * IEEE Std 1278.1-2012, 5.10.3
+   * @return the pdu
+   */
   public MinefieldQueryPdu makeMinefieldQueryPdu()
   {
     MinefieldQueryPdu pdu = new MinefieldQueryPdu()
@@ -610,6 +849,11 @@ public class PduFactory
     return (MinefieldQueryPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Minefield Data PDU<br>
+   * IEEE Std 1278.1-2012, 5.10.4
+   * @return the pdu
+   */
   public MinefieldDataPdu makeMinefieldDataPdu()
   {
     MinefieldDataPdu pdu = new MinefieldDataPdu()
@@ -625,6 +869,11 @@ public class PduFactory
     return (MinefieldDataPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Minefield Response Negative Acknowledgment (NACK) PDU<br>
+   * IEEE Std 1278.1-2012, 5.10.5
+   * @return the pdu
+   */
   public MinefieldResponseNACKPdu makeMinefieldResponseNackPdu()
   {
     MinefieldResponseNACKPdu pdu = new MinefieldResponseNACKPdu();
@@ -632,6 +881,11 @@ public class PduFactory
     return (MinefieldResponseNACKPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Environmental Process PDU<br>
+   * IEEE Std 1278.1-2012, 5.11.2.2
+   * @return the pdu
+   */
   public EnvironmentalProcessPdu makeEnvironmentalProcessPdu()
   {
     EnvironmentalProcessPdu pdu = new EnvironmentalProcessPdu()
@@ -644,6 +898,11 @@ public class PduFactory
     return (EnvironmentalProcessPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Gridded Data PDU<br>
+   * IEEE Std 1278.1-2012, 5.11.2.3
+   * @return the pdu
+   */
   public GriddedDataPdu makeGriddedDataPdu()
   {
     GriddedDataPdu pdu = new GriddedDataPdu()
@@ -658,6 +917,11 @@ public class PduFactory
     return (GriddedDataPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Point Object State PDU<br>
+   * IEEE Std 1278.1-2012, 5.11.3.2
+   * @return the pdu
+   */
   public PointObjectStatePdu makePointObjectStatePdu()
   {
     PointObjectStatePdu pdu = new PointObjectStatePdu()
@@ -674,6 +938,11 @@ public class PduFactory
     return (PointObjectStatePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Linear Object State PDU<br>
+   * IEEE Std 1278.1-2012, 5.11.3.3
+   * @return the pdu
+   */
   public LinearObjectStatePdu makeLinearObjectStatePdu()
   {
     LinearObjectStatePdu pdu = new LinearObjectStatePdu()
@@ -688,6 +957,11 @@ public class PduFactory
     return (LinearObjectStatePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Areal Object State PDU<br>
+   * IEEE Std 1278.1-2012, 5.11.3.4
+   * @return the pdu
+   */
   public ArealObjectStatePdu makeArealObjectStatePdu()
   {
     ArealObjectStatePdu pdu = new ArealObjectStatePdu()
@@ -700,6 +974,11 @@ public class PduFactory
     return (ArealObjectStatePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Time Space Position Information (TSPI) PDU<br>
+   * IEEE Std 1278.1-2012, 9.4.2
+   * @return the pdu
+   */
   public TSPIPdu makeTspiPdu()
   {
     TSPIPdu pdu = new TSPIPdu()
@@ -715,6 +994,11 @@ public class PduFactory
     return (TSPIPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Appearance PDU<br>
+   * IEEE Std 1278.1-2012, 9.4.3
+   * @return the pdu
+   */
   public AppearancePdu makeAppearancePdu()
   {
     AppearancePdu pdu = new AppearancePdu()
@@ -730,6 +1014,11 @@ public class PduFactory
     return (AppearancePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Articulated Parts PDU<br>
+   * IEEE Std 1278.1-2012, 9.4.4
+   * @return the pdu
+   */
   public ArticulatedPartsPdu makeArticulatedPartsPdu()
   {
     ArticulatedPartsPdu pdu = new ArticulatedPartsPdu()
@@ -738,6 +1027,11 @@ public class PduFactory
     return (ArticulatedPartsPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Live Entity (LE) Fire PDU<br>
+   * IEEE Std 1278.1-2012, 9.4.5
+   * @return the pdu
+   */
   public LEFirePdu makeLEFirePdu()
   {
     LEFirePdu pdu = new LEFirePdu()
@@ -754,6 +1048,11 @@ public class PduFactory
     return (LEFirePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Live Entity (LE) Detonation PDU<br>
+   * IEEE Std 1278.1-2012, 9.4.6
+   * @return the pdu
+   */
   public LEDetonationPdu makeLEDetonationPdu()
   {
     LEDetonationPdu pdu = new LEDetonationPdu()
@@ -772,6 +1071,11 @@ public class PduFactory
     return (LEDetonationPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Create Entity-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.2
+   * @return the pdu
+   */
   public CreateEntityReliablePdu makeCreateEntityReliablePdu()
   {
     CreateEntityReliablePdu pdu = new CreateEntityReliablePdu();
@@ -783,6 +1087,11 @@ public class PduFactory
     return (CreateEntityReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Remove Entity-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.3
+   * @return the pdu
+   */
   public RemoveEntityReliablePdu makeRemoveEntityReliablePdu()
   {
     RemoveEntityReliablePdu pdu = new RemoveEntityReliablePdu();
@@ -792,6 +1101,11 @@ public class PduFactory
     return (RemoveEntityReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Start/Resume-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.4
+   * @return the pdu
+   */
   public StartResumeReliablePdu makeStartResumeReliablePdu()
   {
     StartResumeReliablePdu pdu = new StartResumeReliablePdu();
@@ -803,6 +1117,11 @@ public class PduFactory
     return (StartResumeReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Stop/Freeze-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.5
+   * @return the pdu
+   */
   public StopFreezeReliablePdu makeStopFreezeReliablePdu()
   {
     StopFreezeReliablePdu pdu = new StopFreezeReliablePdu();
@@ -815,6 +1134,11 @@ public class PduFactory
     return (StopFreezeReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Acknowledge-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.6
+   * @return the pdu
+   */
   public AcknowledgeReliablePdu makeAcknowledgeReliablePdu()
   {
     AcknowledgeReliablePdu pdu = new AcknowledgeReliablePdu();
@@ -827,6 +1151,11 @@ public class PduFactory
     return (AcknowledgeReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Action Request-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.7
+   * @return the pdu
+   */
   public ActionRequestReliablePdu makeActionRequestReliablePdu()
   {
     ActionRequestReliablePdu pdu = new ActionRequestReliablePdu();
@@ -837,6 +1166,11 @@ public class PduFactory
     return (ActionRequestReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Action Response-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.8
+   * @return the pdu
+   */
   public ActionResponseReliablePdu makeActionResponseReliablePdu()
   {
     ActionResponseReliablePdu pdu = new ActionResponseReliablePdu();
@@ -846,6 +1180,11 @@ public class PduFactory
     return (ActionResponseReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Data Query-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.9
+   * @return the pdu
+   */
   public DataQueryReliablePdu makeDataQueryReliablePdu()
   {
     DataQueryReliablePdu pdu = new DataQueryReliablePdu();
@@ -857,6 +1196,11 @@ public class PduFactory
     return (DataQueryReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Set Data-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.10
+   * @return the pdu
+   */
   public SetDataReliablePdu makeSetDataReliablePdu()
   {
     SetDataReliablePdu pdu = new SetDataReliablePdu();
@@ -868,6 +1212,11 @@ public class PduFactory
     return (SetDataReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Data-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.11
+   * @return the pdu
+   */
   public DataReliablePdu makeDataReliablePdu()
   {
     DataReliablePdu pdu = new DataReliablePdu();
@@ -879,6 +1228,11 @@ public class PduFactory
     return (DataReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Event Report-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.12
+   * @return the pdu
+   */
   public EventReportReliablePdu makeEventReportReliablePdu()
   {
     EventReportReliablePdu pdu = new EventReportReliablePdu();
@@ -888,6 +1242,11 @@ public class PduFactory
     return (EventReportReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Comment-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.13
+   * @return the pdu
+   */
   public CommentReliablePdu makeCommentReliablePdu()
   {
     CommentReliablePdu pdu = new CommentReliablePdu();
@@ -895,6 +1254,41 @@ public class PduFactory
     return (CommentReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Comment-R PDU containing the given String(s), variable record type = "OTHER"
+   * @param comments 
+   * @return the pdu
+   */
+  public CommentReliablePdu makeCommentReliablePdu(String ... comments)
+  {
+    return makeCommentReliablePdu(VariableRecordType.OTHER, comments);
+  }
+  
+  /**
+   * Create a CommentR PDU containing the given String(s) and variable record type
+   * @param typ VariableRecordType
+   * @param comments 
+   * @return the pdu
+   */
+  public CommentReliablePdu makeCommentReliablePdu(VariableRecordType typ, String... comments)
+  {
+    CommentReliablePdu pdu = makeCommentReliablePdu();
+    List<VariableDatum> list = pdu.getVariableDatumRecords();
+    Stream.of(comments).forEach(s -> {
+      VariableDatum vardat = new VariableDatum();
+      vardat.setVariableDatumID(typ);
+      vardat.setVariableDatumValue(s.getBytes());
+      list.add(vardat);
+    });
+
+    return pdu;
+  }
+  
+  /**
+   * Create a Record-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.16
+   * @return the pdu
+   */
   public RecordReliablePdu makeRecordReliablePdu()
   {
     RecordReliablePdu pdu = new RecordReliablePdu();
@@ -905,6 +1299,11 @@ public class PduFactory
     return (RecordReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Set Record-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.15
+   * @return the pdu
+   */
   public SetRecordReliablePdu makeSetRecordReliablePdu()
   {
     SetRecordReliablePdu pdu = new SetRecordReliablePdu();
@@ -914,6 +1313,11 @@ public class PduFactory
     return (SetRecordReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Record Query-R (Reliable) PDU<br>
+   * IEEE Std 1278.1-2012, 5.12.4.14
+   * @return the pdu
+   */
   public RecordQueryReliablePdu makeRecordQueryReliablePdu()
   {
     RecordQueryReliablePdu pdu = new RecordQueryReliablePdu();
@@ -924,12 +1328,22 @@ public class PduFactory
     return (RecordQueryReliablePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Collision-Elastic PDU<br>
+   * IEEE Std 1278.1-2012, 5.3.4
+   * @return the pdu
+   */
   public CollisionElasticPdu makeCollisionElasticPdu()
   {
     CollisionElasticPdu pdu = new CollisionElasticPdu();
     return (CollisionElasticPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Entity State Update PDU<br>
+   * IEEE Std 1278.1-2012, 5.3.5
+   * @return the pdu
+   */
   public EntityStateUpdatePdu makeEntityStateUpdatePdu()
   {
     EntityStateUpdatePdu pdu = new EntityStateUpdatePdu()
@@ -942,6 +1356,11 @@ public class PduFactory
     return (EntityStateUpdatePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Directed Energy (DE) Fire PDU<br>
+   * IEEE Std 1278.1-2012, 5.4.5
+   * @return the pdu
+   */
   public DirectedEnergyFirePdu makeDirectedEnergyFirePdu()
   {
     DirectedEnergyFirePdu pdu = new DirectedEnergyFirePdu()
@@ -956,12 +1375,22 @@ public class PduFactory
     return (DirectedEnergyFirePdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create a Collision-Elastic PDU<br>
+   * IEEE Std 1278.1-2012, 5.3.3
+   * @return the pdu
+   */
   public EntityDamageStatusPdu makeEntityDamageStatusPdu()
   {
     EntityDamageStatusPdu pdu = new EntityDamageStatusPdu();
     return (EntityDamageStatusPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Information Operations (IO) Action PDU<br>
+   * IEEE Std 1278.1-2012, 5.13.3
+   * @return the pdu
+   */
   public InformationOperationsActionPdu makeInformationOperationsActionPdu()
   {
     InformationOperationsActionPdu pdu = new InformationOperationsActionPdu()
@@ -977,6 +1406,11 @@ public class PduFactory
     return (InformationOperationsActionPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Information Operations (IO) Report PDU<br>
+   * IEEE Std 1278.1-2012, 5.13.4
+   * @return the pdu
+   */
   public InformationOperationsReportPdu makeInformationOperationsReportPdu()
   {
     InformationOperationsReportPdu pdu = new InformationOperationsReportPdu()
@@ -991,6 +1425,11 @@ public class PduFactory
     return (InformationOperationsReportPdu) addBoilerPlate(pdu);
   }
 
+  /**
+   * Create an Attribute PDU<br>
+   * IEEE Std 1278.1-2012, 5.3.6
+   * @return the pdu
+   */
   public AttributePdu makeAttributePdu()
   {
     AttributePdu pdu = new AttributePdu()
@@ -1006,11 +1445,11 @@ public class PduFactory
   }
 
   /**
-   * PDU factory. Pass in an array of bytes, get the correct type of pdu back,
+   * PDU builder. Pass in an array of bytes, get the correct type of pdu back,
    * based on the PDU type field contained in the byte array.
    *
    * @param data
-   * @return A PDU of the appropriate concrete subclass of PDU
+   * @return A PDU of the appropriate concrete subclass of PDU or null if there was an error
    */
   public Pdu createPdu(byte data[])
   {
@@ -1018,11 +1457,11 @@ public class PduFactory
   }
 
   /**
-   * PDU factory. Pass in an array of bytes, get the correct type of pdu back,
+   * PDU builder. Pass in an array of bytes, get the correct type of pdu back,
    * based on the PDU type field contained in the byte buffer.
    *
    * @param buff
-   * @return null if there was an error creating the Pdu
+   * @return the pdu or null if there was an error creating the Pdu
    */
   public Pdu createPdu(java.nio.ByteBuffer buff)
   {
@@ -1039,11 +1478,21 @@ public class PduFactory
     return createPdu(pduType, buff);
   }
 
+  /**
+   * Create an empty PDU of the given type
+   * @param pduType
+   * @return the pdu
+   */
   public Pdu createPdu(DISPDUType pduType)
   {
     return createPdu(pduType, null);
   }
 
+  /**
+   * Return the enumerated pdu type from a byte array, typically received from the network
+   * @param ba byte array
+   * @return the type
+   */
   public DISPDUType getTypeFromByteArray(byte[] ba)
   {
     return DISPDUType.getEnumForValue(Byte.toUnsignedInt(ba[2])); // 3rd byte
diff --git a/test/edu/nps/moves/dis7/CommentPdusTest.java b/test/edu/nps/moves/dis7/CommentPdusTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..061aed5542c93e693ccb0a813343bf2ab86ce032
--- /dev/null
+++ b/test/edu/nps/moves/dis7/CommentPdusTest.java
@@ -0,0 +1,108 @@
+/**
+ * Copyright (c) 2008-2019, MOVES Institute, Naval Postgraduate School. All rights reserved.
+ * This work is licensed under the BSD open source license, available at https://www.movesinstitute.org/licenses/bsd.html
+ */
+package edu.nps.moves.dis7;
+
+import edu.nps.moves.dis7.enumerations.VariableRecordType;
+import edu.nps.moves.dis7.util.DisNetworking;
+import edu.nps.moves.dis7.util.PduFactory;
+import java.io.IOException;
+import org.junit.jupiter.api.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+@DisplayName("Comment Pdus Test")
+public class CommentPdusTest
+{
+  @BeforeAll
+  public static void setUpClass()
+  {
+    System.out.println("CommentPdusTest");
+  }
+
+  @AfterAll
+  public static void tearDownClass()
+  {
+  }
+
+  @BeforeEach
+  public void setUp()
+  {
+  }
+
+  @AfterEach
+  public void tearDown()
+  {
+  }
+
+  private Pdu receivedPdu;
+
+  @Test
+  public void testRoundTrip()
+  {
+    PduFactory factory = new PduFactory();
+    setUpReceiver();
+    
+    testOne(factory.makeCommentPdu());
+    testOne(factory.makeCommentPdu("123_test_string"));
+    testOne(factory.makeCommentPdu(VariableRecordType.MODEL_TYPE, "456_test with type = modeltype"));
+    testOne(factory.makeCommentPdu("xyz first message","mno second message", "jkl third message"));
+    
+    testOne(factory.makeCommentReliablePdu());
+    testOne(factory.makeCommentReliablePdu("789_test_string"));
+    testOne(factory.makeCommentReliablePdu(VariableRecordType.ACLS_AIRCRAFT_REPORT, "abc_test with type = acls_aircraft_report"));
+    testOne(factory.makeCommentReliablePdu("xyz R first message","mno R second message", "jkl R third message"));   
+  }
+  
+  private void testOne(Pdu pdu)
+  {
+     sendPdu(pdu); // will wait a while
+     assertTrue(receivedPdu != null, "No response from network receive");
+     assertTrue(compare(pdu,receivedPdu),"Comparison failed");
+     receivedPdu = null;
+  }
+  
+  private void sendPdu(Pdu pdu)
+  {
+    try {
+      Thread.sleep(250l); // make sure receiver is listening
+      DisNetworking disnet = new DisNetworking();
+      disnet.sendPdu(pdu);
+
+      Thread.sleep(1000l);
+    }
+    catch (Exception ex) {
+      System.err.println("Error sending Multicast: " + ex.getLocalizedMessage());
+      System.exit(1);
+    }
+  }
+ 
+  private boolean compare(Pdu pdu1, Pdu pdu2)
+  {
+    return pdu1.equals(pdu2);
+  }
+  
+  private void setUpReceiver()
+  {
+    Thread rcvThread = new Thread(() -> {
+      try {
+        while(true) {
+          receivedPdu = new DisNetworking().receivePdu();  // blocks
+        }
+      }
+      catch (IOException ex) {
+        System.err.println("Error receiving Multicast: " + ex.getLocalizedMessage());
+        System.exit(1);
+      }
+    });
+
+    rcvThread.setPriority(Thread.NORM_PRIORITY);
+    rcvThread.setDaemon(true);
+    rcvThread.start();
+  }
+
+  public static void main(String[] args)
+  {
+    new CommentPdusTest().testRoundTrip();
+  }
+}
diff --git a/test/edu/nps/moves/dis7/CreateAllObjectTypesTest.java b/test/edu/nps/moves/dis7/CreateAllObjectTypesTest.java
index 84fd82203d4f27d3491699277e64ed3d1e36b794..1d573e0828d358fa46f06134c881048c490920f4 100644
--- a/test/edu/nps/moves/dis7/CreateAllObjectTypesTest.java
+++ b/test/edu/nps/moves/dis7/CreateAllObjectTypesTest.java
@@ -1,3 +1,7 @@
+/**
+ * Copyright (c) 2008-2019, MOVES Institute, Naval Postgraduate School. All rights reserved.
+ * This work is licensed under the BSD open source license, available at https://www.movesinstitute.org/licenses/bsd.html
+ */
 package edu.nps.moves.dis7;
 
 /**
@@ -16,6 +20,7 @@ public class CreateAllObjectTypesTest
   @BeforeAll
   public static void beforeAllTests()
   {
+    System.out.println("CreateAllObjectTypesTest");
   }
 
   @AfterAll
@@ -251,7 +256,7 @@ public class CreateAllObjectTypesTest
       ex = t;
     }
 
-    //temp assertNull(ex, "Exception should be null if successful creation of all objects");
+    assertNull(ex, "Exception should be null if successful creation of all objects");
   }
 
   String formatStr = "Name: %s\tDomain: %s\tKind: %s\tCategory: %s\tSubcategory: %s";
@@ -266,7 +271,7 @@ public class CreateAllObjectTypesTest
     String dom = ot.getDomain().toString();
     String kind = ot.getObjectKind().toString();;
     String nm = ot.getClass().getName();
-    System.out.println(String.format(formatStr, nm, dom, kind, ot.getCategory(), ot.getSubCategory()));
+    //System.out.println(String.format(formatStr, nm, dom, kind, ot.getCategory(), ot.getSubCategory()));
   }
 
   public static void main(String[] args)
diff --git a/test/edu/nps/moves/dis7/CreateAllPduTypesTest.java b/test/edu/nps/moves/dis7/CreateAllPduTypesTest.java
index cd59f150bf75f53d0f137fe61a07c1e109eeff00..9ef31e4c11e21dea9956acd239a17639fbf8adf3 100644
--- a/test/edu/nps/moves/dis7/CreateAllPduTypesTest.java
+++ b/test/edu/nps/moves/dis7/CreateAllPduTypesTest.java
@@ -1,7 +1,10 @@
+/**
+ * Copyright (c) 2008-2019, MOVES Institute, Naval Postgraduate School. All rights reserved.
+ * This work is licensed under the BSD open source license, available at https://www.movesinstitute.org/licenses/bsd.html
+ */
 package edu.nps.moves.dis7;
 
 import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.nio.ByteBuffer;
 import java.util.HashSet;
@@ -12,140 +15,145 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- * @author mike
- */
 public class CreateAllPduTypesTest
 {
+  public CreateAllPduTypesTest()
+  {
+  }
 
-    public CreateAllPduTypesTest()
-    {
-    }
+  @BeforeAll
+  public static void setUpClass()
+  {
+    System.out.println("CreateAllPduTypesTest");
+  }
 
-    @BeforeAll
-    public static void setUpClass()
-    {
-    }
+  @AfterAll
+  public static void tearDownClass()
+  {
+  }
 
-    @AfterAll
-    public static void tearDownClass()
-    {
-    }
+  @BeforeEach
+  public void setUp()
+  {
+  }
 
-    @BeforeEach
-    public void setUp()
-    {
-    }
+  @AfterEach
+  public void tearDown()
+  {
+  }
 
-    @AfterEach
-    public void tearDown()
-    {
-    }
+  HashSet<Object> pdus = new HashSet<>();
+  ByteBuffer buff = ByteBuffer.allocate(20000);
+  DataOutputStream dos = new DataOutputStream(new ByteArrayOutputStream());
+
+  private Throwable throwable;
 
-    HashSet<Object> pdus = new HashSet<>();
-    ByteBuffer buff = ByteBuffer.allocate(20000);
-    DataOutputStream dos = new DataOutputStream(new ByteArrayOutputStream());
-    @Test
-    public void testCreateAll()
-    {
-        Object o;
-        //0 == "other"
-        pdus.add(new EntityStatePdu()); //1
-        pdus.add(new FirePdu()); //2
-        pdus.add(new DetonationPdu()); //3
-        pdus.add(new CollisionPdu()); //4
-        pdus.add(new ServiceRequestPdu()); //5
-        pdus.add(new ResupplyOfferPdu()); //6
-        pdus.add(new ResupplyReceivedPdu()); //7
-        pdus.add(new ResupplyCancelPdu()); //8
-        pdus.add(new RepairCompletePdu()); //9
-        
-        pdus.add(new RepairResponsePdu()); //10       
-        pdus.add(new CreateEntityPdu()); //11     
-        pdus.add(new RemoveEntityPdu()); //12
-        pdus.add(new StartResumePdu()); //13
-        pdus.add(new StopFreezePdu()); //14
-        pdus.add(new AcknowledgePdu()); //15
-        pdus.add(new ActionRequestPdu()); //16
-        pdus.add(new ActionResponsePdu()); //17
-        pdus.add(new DataQueryPdu()); //18
-        pdus.add(new SetDataPdu()); //19
-        
-        pdus.add(new DataPdu()); //20
-        pdus.add(new EventReportPdu()); //21
-        pdus.add(new CommentPdu()); //22
-        pdus.add(new ElectromagneticEmissionPdu()); //23
-        pdus.add(new DesignatorPdu()); //24   
-        pdus.add(new TransmitterPdu()); //25 
-        pdus.add(new SignalPdu()); //26
-        pdus.add(new ReceiverPdu()); //27
-        pdus.add(new IFFPdu()); //28
-        pdus.add(new UnderwaterAcousticPdu()); //29
-        
-        pdus.add(new SEESPdu()); //30
-        pdus.add(new IntercomSignalPdu()); //31
-        pdus.add(new IntercomControlPdu()); //32
-        pdus.add(new AggregateStatePdu()); //33
-        pdus.add(new IsGroupOfPdu()); //34
-        pdus.add(new TransferOwnershipPdu()); //35
-        pdus.add(new IsPartOfPdu()); //36
-        pdus.add(new MinefieldStatePdu()); //37
-        pdus.add(new MinefieldQueryPdu()); //38      
-        pdus.add(new MinefieldDataPdu()); //39 
-        
-        pdus.add(new MinefieldResponseNACKPdu()); //40
-        pdus.add(new EnvironmentalProcessPdu()); //41
-        pdus.add(new GriddedDataPdu()); //42
-        pdus.add(new PointObjectStatePdu()); //43
-        pdus.add(new LinearObjectStatePdu()); //44     
-        pdus.add(new ArealObjectStatePdu()); //45       
-        pdus.add(new TSPIPdu()); //46      
-        pdus.add(new AppearancePdu()); //47      
-        pdus.add(new ArticulatedPartsPdu()); //48
-        pdus.add(new LEFirePdu()); //49
-        
-        pdus.add(new LEDetonationPdu()); //50
-        pdus.add(new CreateEntityReliablePdu()); //51   
-        pdus.add(new RemoveEntityReliablePdu()); //52   
-        pdus.add(new StartResumeReliablePdu()); //53
-        pdus.add(new StopFreezeReliablePdu()); //54
-        pdus.add(new AcknowledgeReliablePdu()); //55      
-        pdus.add(new ActionRequestReliablePdu()); //56       
-        pdus.add(new ActionResponseReliablePdu()); //57       
-        pdus.add(new DataQueryReliablePdu()); //58       
-        pdus.add(new SetDataReliablePdu()); //59
-        
-        pdus.add(new DataReliablePdu()); //60
-        pdus.add(new EventReportReliablePdu()); //61
-        pdus.add(new CommentReliablePdu()); //62
-        pdus.add(new RecordReliablePdu()); //63
-        pdus.add(new SetRecordReliablePdu()); //64
-        pdus.add(new RecordQueryReliablePdu()); //65
-        pdus.add(new CollisionElasticPdu()); //66
-        pdus.add(new EntityStateUpdatePdu()); //67
-        pdus.add(new DirectedEnergyFirePdu()); //68
-        pdus.add(new EntityDamageStatusPdu()); //69
-        
-        pdus.add(new InformationOperationsActionPdu()); //70   
-        pdus.add(new InformationOperationsReportPdu()); //71
-        pdus.add(new AttributePdu()); //72
-
-        /* marshal all */
-        System.out.println("marshalling");
-        pdus.stream().forEach(ob->{
-          try{
-            ((Marshaller)ob).marshal(dos);
-             System.out.println("marshalled "+ob.getClass().getSimpleName());
-          }
-          catch(Exception ex) {
-             System.out.println("Error marshalling "+ob.getClass().getSimpleName() + ex.getClass().getSimpleName()+": "+ex.getLocalizedMessage());
-          }
-        });
+  @Test
+  public void testCreateAll()
+  {
+    try {
+      Object o;
+      //0 == "other"
+      pdus.add(new EntityStatePdu()); //1
+      pdus.add(new FirePdu()); //2
+      pdus.add(new DetonationPdu()); //3
+      pdus.add(new CollisionPdu()); //4
+      pdus.add(new ServiceRequestPdu()); //5
+      pdus.add(new ResupplyOfferPdu()); //6
+      pdus.add(new ResupplyReceivedPdu()); //7
+      pdus.add(new ResupplyCancelPdu()); //8
+      pdus.add(new RepairCompletePdu()); //9
+
+      pdus.add(new RepairResponsePdu()); //10       
+      pdus.add(new CreateEntityPdu()); //11     
+      pdus.add(new RemoveEntityPdu()); //12
+      pdus.add(new StartResumePdu()); //13
+      pdus.add(new StopFreezePdu()); //14
+      pdus.add(new AcknowledgePdu()); //15
+      pdus.add(new ActionRequestPdu()); //16
+      pdus.add(new ActionResponsePdu()); //17
+      pdus.add(new DataQueryPdu()); //18
+      pdus.add(new SetDataPdu()); //19
+
+      pdus.add(new DataPdu()); //20
+      pdus.add(new EventReportPdu()); //21
+      pdus.add(new CommentPdu()); //22
+      pdus.add(new ElectromagneticEmissionPdu()); //23
+      pdus.add(new DesignatorPdu()); //24   
+      pdus.add(new TransmitterPdu()); //25 
+      pdus.add(new SignalPdu()); //26
+      pdus.add(new ReceiverPdu()); //27
+      pdus.add(new IFFPdu()); //28
+      pdus.add(new UnderwaterAcousticPdu()); //29
+
+      pdus.add(new SEESPdu()); //30
+      pdus.add(new IntercomSignalPdu()); //31
+      pdus.add(new IntercomControlPdu()); //32
+      pdus.add(new AggregateStatePdu()); //33
+      pdus.add(new IsGroupOfPdu()); //34
+      pdus.add(new TransferOwnershipPdu()); //35
+      pdus.add(new IsPartOfPdu()); //36
+      pdus.add(new MinefieldStatePdu()); //37
+      pdus.add(new MinefieldQueryPdu()); //38      
+      pdus.add(new MinefieldDataPdu()); //39 
+
+      pdus.add(new MinefieldResponseNACKPdu()); //40
+      pdus.add(new EnvironmentalProcessPdu()); //41
+      pdus.add(new GriddedDataPdu()); //42
+      pdus.add(new PointObjectStatePdu()); //43
+      pdus.add(new LinearObjectStatePdu()); //44     
+      pdus.add(new ArealObjectStatePdu()); //45       
+      pdus.add(new TSPIPdu()); //46      
+      pdus.add(new AppearancePdu()); //47      
+      pdus.add(new ArticulatedPartsPdu()); //48
+      pdus.add(new LEFirePdu()); //49
+
+      pdus.add(new LEDetonationPdu()); //50
+      pdus.add(new CreateEntityReliablePdu()); //51   
+      pdus.add(new RemoveEntityReliablePdu()); //52   
+      pdus.add(new StartResumeReliablePdu()); //53
+      pdus.add(new StopFreezeReliablePdu()); //54
+      pdus.add(new AcknowledgeReliablePdu()); //55      
+      pdus.add(new ActionRequestReliablePdu()); //56       
+      pdus.add(new ActionResponseReliablePdu()); //57       
+      pdus.add(new DataQueryReliablePdu()); //58       
+      pdus.add(new SetDataReliablePdu()); //59
+
+      pdus.add(new DataReliablePdu()); //60
+      pdus.add(new EventReportReliablePdu()); //61
+      pdus.add(new CommentReliablePdu()); //62
+      pdus.add(new RecordReliablePdu()); //63
+      pdus.add(new SetRecordReliablePdu()); //64
+      pdus.add(new RecordQueryReliablePdu()); //65
+      pdus.add(new CollisionElasticPdu()); //66
+      pdus.add(new EntityStateUpdatePdu()); //67
+      pdus.add(new DirectedEnergyFirePdu()); //68
+      pdus.add(new EntityDamageStatusPdu()); //69
+
+      pdus.add(new InformationOperationsActionPdu()); //70   
+      pdus.add(new InformationOperationsReportPdu()); //71
+      pdus.add(new AttributePdu()); //72
+
+      /* marshal all */
+      pdus.stream().forEach(ob -> {
+        try {
+          ((Marshaller) ob).marshal(dos);
+          //System.out.println("marshalled " + ob.getClass().getSimpleName());
+        }
+        catch (Throwable t) {
+          throw new RuntimeException(t);
+        }
+      });
     }
-      
-   public static void main(String[] args)
-   {
-     new CreateAllPduTypesTest().testCreateAll();
-   }
+    catch (Throwable t) {
+      throwable = t;
+      t.printStackTrace();
+    }
+    assertNull(throwable, "Exception should be null if successful marshal");
+  }
+
+  public static void main(String[] args)
+  {
+    new CreateAllPduTypesTest().testCreateAll();
+  }
 }
diff --git a/test/edu/nps/moves/dis7/DataQueryPduRoundTrip.java b/test/edu/nps/moves/dis7/DataQueryPduRoundTrip.java
deleted file mode 100644
index f7f26f8c82fb97572abc0c9a87266344a5c61d80..0000000000000000000000000000000000000000
--- a/test/edu/nps/moves/dis7/DataQueryPduRoundTrip.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
-package edu.nps.moves.dis7;
-
-import edu.nps.moves.dis7.enumerations.ActionResponseRequestStatus;
-import edu.nps.moves.dis7.enumerations.VariableRecordType;
-import edu.nps.moves.dis7.util.DisNetworking;
-import edu.nps.moves.dis7.util.PduFactory;
-import java.io.IOException;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-
-/**
- *
- * @author mike
- */
-public class DataQueryPduRoundTrip
-{
-  
-  public DataQueryPduRoundTrip()
-  {
-  }
-  
-  @BeforeAll
-  public static void setUpClass()
-  {
-  }
-  
-  @AfterAll
-  public static void tearDownClass()
-  {
-  }
-  
-  @BeforeEach
-  public void setUp()
-  {
-  }
-  
-  @AfterEach
-  public void tearDown()
-  {
-  }
-
-  private static int REQUEST_ID = 0x00112233;
-  private static int TIME_INTERVAL = 0x15151515;
-
-  private static FixedDatum fixedDatum1 = new FixedDatum();  
-  private static int fixedDatum1Value = 0x111111FF;
-  private static VariableRecordType fixedDatum1VarRecordType = VariableRecordType.$120_MM_HEAT_QUANTITY;
-  private static FixedDatum fixedDatum2 = new FixedDatum();
-  private static int fixedDatum2Value = 0x222222FF;
-  private static VariableRecordType fixedDatum2VarRecordType = VariableRecordType.ACCELERATION;
-  private static FixedDatum fixedDatum3 = new FixedDatum();
-  private static int fixedDatum3Value = 0x333333FF;
-  private static VariableRecordType fixedDatum3VarRecordType = VariableRecordType.NUMBER_OF_INTERCEPTORS_FIRED;
-  
-  private static VariableDatum variableDatum1 = new VariableDatum();
-  private static VariableRecordType variableDatum1Type = VariableRecordType.ADA_SHOOTING_STATUS;
-  private static byte[] variableDatum1Value = new String("varDatum1Value111").getBytes();
-  
-  private static VariableDatum variableDatum2 = new VariableDatum();
-  private static VariableRecordType variableDatum2Type = VariableRecordType.ORDER_STATUS;
-  private static byte[] variableDatum2Value = new String("222varDatum1Value222").getBytes();
-
-  static {
-    fixedDatum1.setFixedDatumValue(fixedDatum1Value);
-    fixedDatum1.setFixedDatumID(fixedDatum1VarRecordType);
-    
-    fixedDatum2.setFixedDatumValue(fixedDatum2Value);
-    fixedDatum2.setFixedDatumID(fixedDatum2VarRecordType);
-    
-    fixedDatum3.setFixedDatumValue(fixedDatum3Value);
-    fixedDatum3.setFixedDatumID(fixedDatum3VarRecordType);
-    
-    variableDatum1.setVariableDatumID(variableDatum1Type);
-    variableDatum1.setVariableDatumValue(variableDatum1Value);
-   // variableDatum1.setVariableDatumLength(variableDatum1Value.length);  // should be done automatically
-    
-    variableDatum2.setVariableDatumID(variableDatum2Type);
-    variableDatum2.setVariableDatumValue(variableDatum2Value);
-  //  variableDatum2.setVariableDatumLength(variableDatum2Value.length);  // should be done automatically
- }
-  
-  private Pdu receivedPdu;
-  private Object waiter = new Object();
-  
-   @Test
-   public void TestRoundTrip()
-   {
-     PduFactory factory = new PduFactory();
-     
-     DataQueryPdu sendingPdu = factory.makeDataQueryPdu();
-     sendingPdu.setRequestID(REQUEST_ID);
-     sendingPdu.setTimeInterval(TIME_INTERVAL);
-     
-     sendingPdu.getFixedDatums().add(fixedDatum1);
-     sendingPdu.getFixedDatums().add(fixedDatum2);
-     sendingPdu.getFixedDatums().add(fixedDatum3);
-     
-     sendingPdu.getVariableDatums().add(variableDatum1);
-     sendingPdu.getVariableDatums().add(variableDatum2);
-     
-     setUpReceiver();
-     
-     try {
-       Thread.sleep(250l); // make sure receiver is listening
-       new DisNetworking().sendPdu(sendingPdu);
-       Thread.sleep(1000l); //(180*1000l));//waiter.wait();
-     }
-     catch(Exception ex) {
-         System.err.println("Error sending Multicast: "+ex.getLocalizedMessage());
-         System.exit(1);
-     }
-    
-    // Compare
-    // If we made it this far, we've sent and received.  Now compare.
-    if(receivedPdu.equalsImpl(sendingPdu))
-      System.out.println("passed test");
-    else
-      System.err.println("failed test");
-   }
-   
-   private void setUpReceiver()
-   {
-     Thread rcvThread = new Thread( ()->{
-       try {
-         receivedPdu = new DisNetworking().receivePdu();  // blocks
-       }
-       catch(IOException ex) {
-         System.err.println("Error receiving Multicast: "+ex.getLocalizedMessage());
-         System.exit(1);
-       }
-    //   waiter.notify();
-     });
-     
-     rcvThread.setPriority(Thread.NORM_PRIORITY);
-     rcvThread.setDaemon(true);
-     rcvThread.start();
-   }
-   
-   public static void main(String[] args)
-   {
-     new DataQueryPduRoundTrip().TestRoundTrip();
-   }
-}
diff --git a/test/edu/nps/moves/dis7/DataQueryPduRoundTripTest.java b/test/edu/nps/moves/dis7/DataQueryPduRoundTripTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..a48f476e35c78d7ccfe1310015e3a4b2d690a4e3
--- /dev/null
+++ b/test/edu/nps/moves/dis7/DataQueryPduRoundTripTest.java
@@ -0,0 +1,141 @@
+/**
+ * Copyright (c) 2008-2019, MOVES Institute, Naval Postgraduate School. All rights reserved.
+ * This work is licensed under the BSD open source license, available at https://www.movesinstitute.org/licenses/bsd.html
+ */
+package edu.nps.moves.dis7;
+
+import edu.nps.moves.dis7.enumerations.VariableRecordType;
+import edu.nps.moves.dis7.util.DisNetworking;
+import edu.nps.moves.dis7.util.PduFactory;
+import java.io.IOException;
+import org.junit.jupiter.api.*;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+@DisplayName("Data Query Pdu Round Test")
+public class DataQueryPduRoundTripTest
+{
+
+  public DataQueryPduRoundTripTest()
+  {
+  }
+
+  @BeforeAll
+  public static void setUpClass()
+  {
+    System.out.println("DataQueryPduRoundTripTest");
+  }
+
+  @AfterAll
+  public static void tearDownClass()
+  {
+  }
+
+  @BeforeEach
+  public void setUp()
+  {
+  }
+
+  @AfterEach
+  public void tearDown()
+  {
+  }
+
+  private static int REQUEST_ID = 0x00112233;
+  private static int TIME_INTERVAL = 0x15151515;
+
+  private static FixedDatum fixedDatum1 = new FixedDatum();
+  private static int fixedDatum1Value = 0x111111FF;
+  private static VariableRecordType fixedDatum1VarRecordType = VariableRecordType.$120_MM_HEAT_QUANTITY;
+  private static FixedDatum fixedDatum2 = new FixedDatum();
+  private static int fixedDatum2Value = 0x222222FF;
+  private static VariableRecordType fixedDatum2VarRecordType = VariableRecordType.ACCELERATION;
+  private static FixedDatum fixedDatum3 = new FixedDatum();
+  private static int fixedDatum3Value = 0x333333FF;
+  private static VariableRecordType fixedDatum3VarRecordType = VariableRecordType.NUMBER_OF_INTERCEPTORS_FIRED;
+
+  private static VariableDatum variableDatum1 = new VariableDatum();
+  private static VariableRecordType variableDatum1Type = VariableRecordType.ADA_SHOOTING_STATUS;
+  private static byte[] variableDatum1Value = new String("varDatum1Value111").getBytes();
+
+  private static VariableDatum variableDatum2 = new VariableDatum();
+  private static VariableRecordType variableDatum2Type = VariableRecordType.ORDER_STATUS;
+  private static byte[] variableDatum2Value = new String("222varDatum1Value222").getBytes();
+
+  static {
+    fixedDatum1.setFixedDatumValue(fixedDatum1Value);
+    fixedDatum1.setFixedDatumID(fixedDatum1VarRecordType);
+
+    fixedDatum2.setFixedDatumValue(fixedDatum2Value);
+    fixedDatum2.setFixedDatumID(fixedDatum2VarRecordType);
+
+    fixedDatum3.setFixedDatumValue(fixedDatum3Value);
+    fixedDatum3.setFixedDatumID(fixedDatum3VarRecordType);
+
+    variableDatum1.setVariableDatumID(variableDatum1Type);
+    variableDatum1.setVariableDatumValue(variableDatum1Value);
+    // variableDatum1.setVariableDatumLength(variableDatum1Value.length);  // should be done automatically
+
+    variableDatum2.setVariableDatumID(variableDatum2Type);
+    variableDatum2.setVariableDatumValue(variableDatum2Value);
+    //  variableDatum2.setVariableDatumLength(variableDatum2Value.length);  // should be done automatically
+  }
+
+  private Pdu receivedPdu;
+  private Object waiter = new Object();
+
+  @Test
+  public void testRoundTrip()
+  {
+    PduFactory factory = new PduFactory();
+
+    DataQueryPdu sendingPdu = factory.makeDataQueryPdu();
+    sendingPdu.setRequestID(REQUEST_ID);
+    sendingPdu.setTimeInterval(TIME_INTERVAL);
+
+    sendingPdu.getFixedDatums().add(fixedDatum1);
+    sendingPdu.getFixedDatums().add(fixedDatum2);
+    sendingPdu.getFixedDatums().add(fixedDatum3);
+
+    sendingPdu.getVariableDatums().add(variableDatum1);
+    sendingPdu.getVariableDatums().add(variableDatum2);
+
+    setUpReceiver();
+
+    try {
+      Thread.sleep(250l); // make sure receiver is listening
+      new DisNetworking().sendPdu(sendingPdu);
+      Thread.sleep(1000l); 
+    }
+    catch (Exception ex) {
+      System.err.println("Error sending Multicast: " + ex.getLocalizedMessage());
+      System.exit(1);
+    }
+
+    // Compare
+    // If we made it this far, we've sent and received.  Now compare.
+    assertTrue(receivedPdu.equals(sendingPdu), "Sent and received pdu not the same");
+  }
+
+  private void setUpReceiver()
+  {
+    Thread rcvThread = new Thread(() -> {
+      try {
+        receivedPdu = new DisNetworking().receivePdu();  // blocks
+      }
+      catch (IOException ex) {
+        System.err.println("Error receiving Multicast: " + ex.getLocalizedMessage());
+        System.exit(1);
+      }
+      //   waiter.notify();
+    });
+
+    rcvThread.setPriority(Thread.NORM_PRIORITY);
+    rcvThread.setDaemon(true);
+    rcvThread.start();
+  }
+
+  public static void main(String[] args)
+  {
+    new DataQueryPduRoundTripTest().testRoundTrip();
+  }
+}
diff --git a/test/edu/nps/moves/dis7/EntityStatePduTest.java b/test/edu/nps/moves/dis7/EntityStatePduTest.java
index 0581c703e6766beb626a45390fac23a3c8ab292b..8b24ad39229d0377e81e7fe276ec415415ac17fb 100644
--- a/test/edu/nps/moves/dis7/EntityStatePduTest.java
+++ b/test/edu/nps/moves/dis7/EntityStatePduTest.java
@@ -1,49 +1,48 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
+/**
+ * Copyright (c) 2008-2019, MOVES Institute, Naval Postgraduate School. All rights reserved.
+ * This work is licensed under the BSD open source license, available at https://www.movesinstitute.org/licenses/bsd.html
  */
 package edu.nps.moves.dis7;
 
 import edu.nps.moves.dis7.enumerations.LandPlatformCapabilities;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.*;
 import static org.junit.jupiter.api.Assertions.*;
 
-/**
- *
- * @author mike
- */
+@DisplayName("Entity State Pdu Test")
 public class EntityStatePduTest
 {
-    @BeforeAll
-    public static void setUpClass()
-    {
-    }
-    
-    @AfterAll
-    public static void tearDownClass()
-    {
-    }
-    
-    @BeforeEach
-    public void setUp()
-    {
-    }
-    
-    @AfterEach
-    public void tearDown()
-    {
-    }
+  @BeforeAll
+  public static void setUpClass()
+  {
+    System.out.println("EntityStatePduTest");
+  }
+
+  @AfterAll
+  public static void tearDownClass()
+  {
+  }
 
+  @BeforeEach
+  public void setUp()
+  {
+  }
 
-    @Test
-    public void testEntityCapabilities()
-    {
+  @AfterEach
+  public void tearDown()
+  {
+  }
+
+  @Test
+  public void testEntityCapabilities()
+  {
+    Throwable thr = null;
+    try {
       EntityStatePdu espdu = new EntityStatePdu();
       espdu.setCapabilities(new LandPlatformCapabilities());
     }
+    catch (Throwable t) {
+      thr = t;
+    }
+    assertNull(thr, "Exception indicates error creating EntityStatePdu");
+  }
 }
diff --git a/test/edu/nps/moves/dis7/FixedAndVariableDatumRoundTrip.java b/test/edu/nps/moves/dis7/FixedAndVariableDatumRoundTripTest.java
similarity index 56%
rename from test/edu/nps/moves/dis7/FixedAndVariableDatumRoundTrip.java
rename to test/edu/nps/moves/dis7/FixedAndVariableDatumRoundTripTest.java
index a2137bd828b650b892bb314cd763d03df8a3c60e..d7088a93b129a6aa4fd6b9d989d31d3af4a4ade8 100644
--- a/test/edu/nps/moves/dis7/FixedAndVariableDatumRoundTrip.java
+++ b/test/edu/nps/moves/dis7/FixedAndVariableDatumRoundTripTest.java
@@ -1,7 +1,6 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
+/**
+ * Copyright (c) 2008-2019, MOVES Institute, Naval Postgraduate School. All rights reserved.
+ * This work is licensed under the BSD open source license, available at https://www.movesinstitute.org/licenses/bsd.html
  */
 package edu.nps.moves.dis7;
 
@@ -10,38 +9,32 @@ import edu.nps.moves.dis7.enumerations.VariableRecordType;
 import edu.nps.moves.dis7.util.DisNetworking;
 import edu.nps.moves.dis7.util.PduFactory;
 import java.io.IOException;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.*;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
-/**
- *
- * @author mike
- */
-public class FixedAndVariableDatumRoundTrip
+@DisplayName("Fixed and Variable Datum Round Trip Test")
+public class FixedAndVariableDatumRoundTripTest
 {
-  
-  public FixedAndVariableDatumRoundTrip()
+  public FixedAndVariableDatumRoundTripTest()
   {
   }
-  
+
   @BeforeAll
   public static void setUpClass()
   {
+    System.out.println("FixedAndVariableDatumRoundTripTest");
   }
-  
+
   @AfterAll
   public static void tearDownClass()
   {
   }
-  
+
   @BeforeEach
   public void setUp()
   {
   }
-  
+
   @AfterEach
   public void tearDown()
   {
@@ -49,8 +42,8 @@ public class FixedAndVariableDatumRoundTrip
 
   private static int REQUEST_ID = 0x00112233;
   private static ActionResponseRequestStatus REQUEST_STATUS = ActionResponseRequestStatus.RETRANSMIT_REQUEST_LATER;
-  
-  private static FixedDatum fixedDatum1 = new FixedDatum();  
+
+  private static FixedDatum fixedDatum1 = new FixedDatum();
   private static int fixedDatum1Value = 0x111111FF;
   private static VariableRecordType fixedDatum1VarRecordType = VariableRecordType.ACTIVATE_OWNSHIP;
   private static FixedDatum fixedDatum2 = new FixedDatum();
@@ -59,13 +52,13 @@ public class FixedAndVariableDatumRoundTrip
   private static FixedDatum fixedDatum3 = new FixedDatum();
   private static int fixedDatum3Value = 0x333333FF;
   private static VariableRecordType fixedDatum3VarRecordType = VariableRecordType.SKE_FREQUENCY;
-  
+
   private static VariableDatum variableDatum1 = new VariableDatum();
   private static VariableRecordType variableDatum1Type = VariableRecordType.ACLS_AIRCRAFT_REPORT;
   private static String variableDatum1String = "varDatum1Value111";
   private static byte[] variableDatum1Value = variableDatum1String.getBytes();
-  private static int variableDatum1LengthInBits = variableDatum1String.length()*8 -1; // test
-  
+  private static int variableDatum1LengthInBits = variableDatum1String.length() * 8 - 1; // test
+
   private static VariableDatum variableDatum2 = new VariableDatum();
   private static VariableRecordType variableDatum2Type = VariableRecordType.Z_ACCELERATION;
   private static byte[] variableDatum2Value = new String("222varDatum1Value222").getBytes();
@@ -73,78 +66,76 @@ public class FixedAndVariableDatumRoundTrip
   static {
     fixedDatum1.setFixedDatumValue(fixedDatum1Value);
     fixedDatum1.setFixedDatumID(fixedDatum1VarRecordType);
-    
+
     fixedDatum2.setFixedDatumValue(fixedDatum2Value);
     fixedDatum2.setFixedDatumID(fixedDatum2VarRecordType);
-    
+
     fixedDatum3.setFixedDatumValue(fixedDatum3Value);
     fixedDatum3.setFixedDatumID(fixedDatum3VarRecordType);
-    
+
     variableDatum1.setVariableDatumID(variableDatum1Type);
     variableDatum1.setVariableDatumValue(variableDatum1Value);
     variableDatum1.setVariableDatumLength(variableDatum1LengthInBits);
-    
+
     variableDatum2.setVariableDatumID(variableDatum2Type);
     variableDatum2.setVariableDatumValue(variableDatum2Value);
     variableDatum2.setVariableDatumLength(variableDatum2Value.length * 8); //in bits
- }
-  
+  }
+
   private Pdu receivedPdu;
   private Object waiter = new Object();
-  
-   @Test
-   public void TestRoundTrip()
-   {
-     PduFactory factory = new PduFactory();
-     ActionResponsePdu sentPdu = factory.makeActionResponsePdu();
-     
-     sentPdu.getFixedDatums().add(fixedDatum1);
-     sentPdu.getFixedDatums().add(fixedDatum2);
-     sentPdu.getFixedDatums().add(fixedDatum3);
-     
-     sentPdu.getVariableDatums().add(variableDatum1);
-     sentPdu.getVariableDatums().add(variableDatum2);
-     
-     setUpReceiver();
-     
-     try {
-       Thread.sleep(250l); // make sure receiver is listening
-       new DisNetworking().sendPdu(sentPdu);
-       Thread.sleep(1000l); //(180*1000l));//waiter.wait();
-     }
-     catch(Exception ex) {
-         System.err.println("Error sending Multicast: "+ex.getLocalizedMessage());
-         System.exit(1);
-     }
-    
+
+  @Test
+  public void TestRoundTrip()
+  {
+    PduFactory factory = new PduFactory();
+    ActionResponsePdu sentPdu = factory.makeActionResponsePdu();
+
+    sentPdu.getFixedDatums().add(fixedDatum1);
+    sentPdu.getFixedDatums().add(fixedDatum2);
+    sentPdu.getFixedDatums().add(fixedDatum3);
+
+    sentPdu.getVariableDatums().add(variableDatum1);
+    sentPdu.getVariableDatums().add(variableDatum2);
+
+    setUpReceiver();
+
+    try {
+      Thread.sleep(250l); // make sure receiver is listening
+      new DisNetworking().sendPdu(sentPdu);
+      Thread.sleep(1000l);
+    }
+    catch (Exception ex) {
+      System.err.println("Error sending Multicast: " + ex.getLocalizedMessage());
+      System.exit(1);
+    }
+
     // Compare
     // If we made it this far, we've sent and received.  Now compare.
-    if(receivedPdu.equals(sentPdu))
-      System.out.println("passed test");
-    else
-      System.err.println("failed test");
-   }
-   
-   private void setUpReceiver()
-   {
-     Thread rcvThread = new Thread( ()->{
-       try {
-         receivedPdu = new DisNetworking().receivePdu();  // blocks
-       }
-       catch(IOException ex) {
-         System.err.println("Error receiving Multicast: "+ex.getLocalizedMessage());
-         System.exit(1);
-       }
-    //   waiter.notify();
-     });
-     
-     rcvThread.setPriority(Thread.NORM_PRIORITY);
-     rcvThread.setDaemon(true);
-     rcvThread.start();
-   }
-   
-   public static void main(String[] args)
-   {
-     new FixedAndVariableDatumRoundTrip().TestRoundTrip();
-   }
+    assertTrue(receivedPdu != null, "No response from network");
+    assertTrue(receivedPdu.equals(sentPdu),"Sent and received pdus not identical");
+  }
+
+  private void setUpReceiver()
+  {
+    Thread rcvThread = new Thread(() -> {
+      try {
+        receivedPdu = new DisNetworking().receivePdu();  // blocks
+      }
+      catch (IOException ex) {
+        System.err.println("Error receiving Multicast: " + ex.getLocalizedMessage());
+        System.exit(1);
+      }
+      //   waiter.notify();
+    });
+
+    rcvThread.setPriority(Thread.NORM_PRIORITY);
+    rcvThread.setDaemon(true);
+    rcvThread.start();
+  }
+
+  public static void main(String[] args)
+  {
+    new FixedAndVariableDatumRoundTripTest().TestRoundTrip();
+  }
 }
diff --git a/test/edu/nps/moves/dis7/MarshalEnumsTest.java b/test/edu/nps/moves/dis7/MarshalEnumsTest.java
index 3e4e861ce4a845bcf625dc53387b8a5f673971b7..40dc819e0d1521fb324f35b1ab89ba8eca22aa7e 100644
--- a/test/edu/nps/moves/dis7/MarshalEnumsTest.java
+++ b/test/edu/nps/moves/dis7/MarshalEnumsTest.java
@@ -1,7 +1,6 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
+/**
+ * Copyright (c) 2008-2019, MOVES Institute, Naval Postgraduate School. All rights reserved.
+ * This work is licensed under the BSD open source license, available at https://www.movesinstitute.org/licenses/bsd.html
  */
 package edu.nps.moves.dis7;
 
@@ -15,93 +14,94 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 @DisplayName("Marshal Enums Test")
 public class MarshalEnumsTest
 {
-    @BeforeAll
-    public static void setUpClass()
-    {
-    }
-
-    @AfterAll
-    public static void tearDownClass()
-    {
-    }
-
-    @BeforeEach
-    public void setUp()
-    {
-    }
-
-    @AfterEach
-    public void tearDown()
-    {
-    }
-
-    @Test
-    public void testGoodMarshall()
-    {
-        Throwable thr = null;
-        try {
-            marshalOne(APAParameterIndexAPAStatus.values()[0]);
-            marshalOne(AcknowledgeAcknowledgeFlag.values()[0]);
-            marshalOne(AcknowledgeResponseFlag.values()[0]);
-            // this is a simple enum, never marshalled marshalOne(Acronyms.values()[0]);
-            marshalOne(ActionRequestActionID.values()[0]);
-            marshalOne(ActionResponseRequestStatus.values()[0]);
+  @BeforeAll
+  public static void setUpClass()
+  {
+    System.out.println("MarshalEnumsTest");
+  }
+
+  @AfterAll
+  public static void tearDownClass()
+  {
+  }
+
+  @BeforeEach
+  public void setUp()
+  {
+  }
+
+  @AfterEach
+  public void tearDown()
+  {
+  }
+
+  @Test
+  public void testGoodMarshall()
+  {
+    Throwable thr = null;
+    try {
+      marshalOne(APAParameterIndexAPAStatus.values()[0]);
+      marshalOne(AcknowledgeAcknowledgeFlag.values()[0]);
+      marshalOne(AcknowledgeResponseFlag.values()[0]);
+      // this is a simple enum, never marshalled marshalOne(Acronyms.values()[0]);
+      marshalOne(ActionRequestActionID.values()[0]);
+      marshalOne(ActionResponseRequestStatus.values()[0]);
 //            marshalOne(AddSpecificDimensionEnumerationsforSubsurfaceAreaSize.values()[0]);
 //            marshalOne(AddVariantsforAirCategory201Insect.values()[0]);
 //            marshalOne(AddVariantsforLandCategory200Mammal.values()[0]);
 //            marshalOne(AddVariantsforSubsurfaceCategoriesFishMolluskCrustaceanandInsect.values()[0]);
-            marshalOne(AggregateStateAggregateKind.values()[0]);
-            marshalOne(AggregateStateAggregateState.values()[0]);
-            marshalOne(AggregateStateFormation.values()[0]);
-            marshalOne(AggregateStateSpecific.values()[0]);
-            marshalOne(AggregateStateSubcategory.values()[0]);
-
-            marshalOne(AircraftAddressSource.values()[0]);
-            marshalOne(AircraftIdentificationType.values()[0]);
-            marshalOne(AircraftPresentDomain.values()[0]);
-            marshalOne(AircraftTypeWake.values()[0]);
+      marshalOne(AggregateStateAggregateKind.values()[0]);
+      marshalOne(AggregateStateAggregateState.values()[0]);
+      marshalOne(AggregateStateFormation.values()[0]);
+      marshalOne(AggregateStateSpecific.values()[0]);
+      marshalOne(AggregateStateSubcategory.values()[0]);
+
+      marshalOne(AircraftAddressSource.values()[0]);
+      marshalOne(AircraftIdentificationType.values()[0]);
+      marshalOne(AircraftPresentDomain.values()[0]);
+      marshalOne(AircraftTypeWake.values()[0]);
 //            marshalOne(AnimalLifeformGroupSizeRangeEnumerationforallDomains.values()[0]);
-            marshalOne(AntennaSelection.values()[0]);
-            marshalOne(AntennaStatus.values()[0]);
-            marshalOne(AppearanceAntiCollisionDayNight.values()[0]);
-            marshalOne(AppearanceCamouflageType.values()[0]);
-            marshalOne(AppearanceCanopy.values()[0]);
-            marshalOne(AppearanceConcealedMovement.values()[0]);
-            marshalOne(AppearanceConcealedPosition.values()[0]);
-            marshalOne(AppearanceDamage.values()[0]);
-            marshalOne(AppearanceEntityorObjectState.values()[0]);
-            marshalOne(AppearanceEnvironmentalDensity.values()[0]);
-            marshalOne(AppearanceHatch.values()[0]);
-            marshalOne(AppearanceLauncherOperational.values()[0]);
-            marshalOne(AppearanceLifeFormComplianceStatus.values()[0]);
-            marshalOne(AppearanceLifeFormPosture.values()[0]);
-            marshalOne(AppearanceLifeFormWeaponImplement.values()[0]);
-            marshalOne(AppearanceLifeformHealth.values()[0]);
+      marshalOne(AntennaSelection.values()[0]);
+      marshalOne(AntennaStatus.values()[0]);
+      marshalOne(AppearanceAntiCollisionDayNight.values()[0]);
+      marshalOne(AppearanceCamouflageType.values()[0]);
+      marshalOne(AppearanceCanopy.values()[0]);
+      marshalOne(AppearanceConcealedMovement.values()[0]);
+      marshalOne(AppearanceConcealedPosition.values()[0]);
+      marshalOne(AppearanceDamage.values()[0]);
+      marshalOne(AppearanceEntityorObjectState.values()[0]);
+      marshalOne(AppearanceEnvironmentalDensity.values()[0]);
+      marshalOne(AppearanceHatch.values()[0]);
+      marshalOne(AppearanceLauncherOperational.values()[0]);
+      marshalOne(AppearanceLifeFormComplianceStatus.values()[0]);
+      marshalOne(AppearanceLifeFormPosture.values()[0]);
+      marshalOne(AppearanceLifeFormWeaponImplement.values()[0]);
+      marshalOne(AppearanceLifeformHealth.values()[0]);
 //            marshalOne(AppearanceLinearObjectLaneMarkerVisible.values()[0]);
 //            marshalOne(AppearanceLinearObjectTankDitchBreach.values()[0]);
-            marshalOne(AppearanceNVGMode.values()[0]);
-            marshalOne(AppearanceNavigationPositionBrightness.values()[0]);
-            marshalOne(AppearanceObjectGeneralDamage.values()[0]);
-            marshalOne(AppearanceObjectGeneralIEDPresent.values()[0]);
-            marshalOne(AppearanceObjectGeneralPredistributed.values()[0]);
+      marshalOne(AppearanceNVGMode.values()[0]);
+      marshalOne(AppearanceNavigationPositionBrightness.values()[0]);
+      marshalOne(AppearanceObjectGeneralDamage.values()[0]);
+      marshalOne(AppearanceObjectGeneralIEDPresent.values()[0]);
+      marshalOne(AppearanceObjectGeneralPredistributed.values()[0]);
 //            marshalOne(AppearanceObjectSpecificBreachState.values()[0]);
 //            marshalOne(AppearanceObjectSpecificChemicalType.values()[0]);
-            marshalOne(AppearancePaintScheme.values()[0]);
-            marshalOne(AppearanceSubsurfaceHatch.values()[0]);
-            marshalOne(AppearanceSupplyDeployed.values()[0]);
-            marshalOne(AppearanceTrailingEffects.values()[0]);
-
-            marshalOne(ArticulatedPartsTypeClass.values()[0]);
-            marshalOne(ArticulatedPartsTypeMetric.values()[0]);
-            marshalOne(AttachedPartDetachedIndicator.values()[0]);
-            marshalOne(AttachedParts.values()[0]);
+      marshalOne(AppearancePaintScheme.values()[0]);
+      marshalOne(AppearanceSubsurfaceHatch.values()[0]);
+      marshalOne(AppearanceSupplyDeployed.values()[0]);
+      marshalOne(AppearanceTrailingEffects.values()[0]);
+
+      marshalOne(ArticulatedPartsTypeClass.values()[0]);
+      marshalOne(ArticulatedPartsTypeMetric.values()[0]);
+      marshalOne(AttachedPartDetachedIndicator.values()[0]);
+      marshalOne(AttachedParts.values()[0]);
 //            marshalOne(AustralianCategoryOverlay.values()[0]);
-            marshalOne(BeamStatusBeamState.values()[0]);
+      marshalOne(BeamStatusBeamState.values()[0]);
 //            marshalOne(BuildingPaintScheme.values()[0]);
-            marshalOne(CCTTSINCGARSClearChannel.values()[0]);
-            marshalOne(CCTTSINCGARSStartofMessage.values()[0]);
- //           marshalOne(CIGIExtensionPacketID.values()[0]);
-            marshalOne(CapabilityReport.values()[0]);
+      marshalOne(CCTTSINCGARSClearChannel.values()[0]);
+      marshalOne(CCTTSINCGARSStartofMessage.values()[0]);
+      //           marshalOne(CIGIExtensionPacketID.values()[0]);
+      marshalOne(CapabilityReport.values()[0]);
 //            marshalOne(Class10SupplyCategoryMaterialtoSupportNonMilitaryPrograms.values()[0]);
 //            marshalOne(Class11SupplyCategorySuppliesNonDoctrinal.values()[0]);
 //            marshalOne(Class12SupplyCategorySlingLoadsNonDoctrinal.values()[0]);
@@ -113,486 +113,478 @@ public class MarshalEnumsTest
 //            marshalOne(Class7SupplyCategoryMajorItems.values()[0]);
 //            marshalOne(Class8SupplyCategoryMedicalMaterial.values()[0]);
 //            marshalOne(Class9SupplyCategoryRepairPartsandComponents.values()[0]);
-            marshalOne(CollisionType.values()[0]);
+      marshalOne(CollisionType.values()[0]);
 //            marshalOne(Color.values()[0]);
-            marshalOne(ComponentVisualDamageStatusSmoke.values()[0]);
-            marshalOne(ComponentVisualDamageStatusSurfaceDamage.values()[0]);
-            marshalOne(Country.values()[0]);
-            marshalOne(CoverShroudStatus.values()[0]);
- //           marshalOne(CryptoKeyIDCryptoMode.values()[0]);
-
-            marshalOne(DEDamageDescriptionComponentDamageStatus.values()[0]);
-
-            marshalOne(DEDamageDescriptionComponentVisualSmokeColor.values()[0]);
-
-            marshalOne(DEFireFlagsStateUpdateFlag.values()[0]);
-            marshalOne(DEFirePulseShape.values()[0]);
-            marshalOne(DEPrecisionAimpointBeamSpotType.values()[0]);
-            marshalOne(DISAttributeActionCode.values()[0]);
-            marshalOne(DISLiveEntitySubprotocolNumber.values()[0]);
-            marshalOne(DISPDUStatusActiveInterrogationIndicatorAII.values()[0]);
-            marshalOne(DISPDUStatusCoupledExtensionIndicatorCEI.values()[0]);
-            marshalOne(DISPDUStatusDetonationTypeIndicatorDTI.values()[0]);
-            marshalOne(DISPDUStatusFireTypeIndicatorFTI.values()[0]);
-            marshalOne(DISPDUStatusIFFSimulationModeISM.values()[0]);
-            marshalOne(DISPDUStatusIntercomAttachedIndicatorIAI.values()[0]);
-            marshalOne(DISPDUStatusLVCIndicatorLVC.values()[0]);
-            marshalOne(DISPDUStatusRadioAttachedIndicatorRAI.values()[0]);
-            marshalOne(DISPDUStatusTransferredEntityIndicatorTEI.values()[0]);
-            marshalOne(DISPDUType.values()[0]);
-            marshalOne(DISProtocolFamily.values()[0]);
-            marshalOne(DISProtocolVersion.values()[0]);
-            marshalOne(DRParametersType.values()[0]);
-            marshalOne(DataCategory.values()[0]);
-            marshalOne(DeadReckoningAlgorithm.values()[0]);
-            marshalOne(DeltaMode5SAltitudePositiveNegativeIndicator.values()[0]);
-            marshalOne(DesignatorDesignatorCode.values()[0]);
-            marshalOne(DesignatorSystemName.values()[0]);
-            marshalOne(DetonationResult.values()[0]);
-            marshalOne(EEAttributeStateIndicator.values()[0]);
-            marshalOne(ElectromagneticEmissionBeamFunction.values()[0]);
-            marshalOne(ElectromagneticEmissionStateUpdateIndicator.values()[0]);
-       // why won't compile?     marshalOne(EmitterName.values()[0]);
-            marshalOne(EmitterSystemFunction.values()[0]);
-            marshalOne(EntityAssociationAssociationStatus.values()[0]);
-            marshalOne(EntityAssociationAssociationType.values()[0]);
-            marshalOne(EntityAssociationGroupMemberType.values()[0]);
-            marshalOne(EntityAssociationPhysicalAssociationType.values()[0]);
-            marshalOne(EntityAssociationPhysicalConnectionType.values()[0]);
-            marshalOne(EntityDamageStatusComponentIdentification.values()[0]);
-            marshalOne(EntityKind.values()[0]);
-            marshalOne(EntityMarkingCharacterSet.values()[0]);
-            marshalOne(EntityVPRecordChangeIndicator.values()[0]);
-            marshalOne(EnvironmentRecordTypeGroups.values()[0]);
-
-            marshalOne(EnvironmentalProcessModelType.values()[0]);
-            marshalOne(EnvironmentalProcessRecordType.values()[0]);
-            marshalOne(EnvironmentalSubcategory.values()[0]);
-            marshalOne(EventReportEventType.values()[0]);
-            marshalOne(ExpendableAirCategory.values()[0]);
-
-            marshalOne(ExpendableSubsurfaceCategory.values()[0]);
-            marshalOne(ExpendableSurfaceCategory.values()[0]);
-            marshalOne(ExplosiveMaterialCategories.values()[0]);
-            marshalOne(ExplosiveMaterialGroups.values()[0]);
-            marshalOne(FlareSmokeColor.values()[0]);
-            marshalOne(FlareSmokeStatus.values()[0]);
-            marshalOne(ForceID.values()[0]);
-            marshalOne(FormatType.values()[0]);
-            marshalOne(FuelLocation.values()[0]);
-            marshalOne(FuelMeasurementUnits.values()[0]);
-            marshalOne(GridAxisDescriptorAxisType.values()[0]);
-            marshalOne(GriddedDataConstantGrid.values()[0]);
-            marshalOne(GriddedDataCoordinateSystem.values()[0]);
-            marshalOne(GriddedDataDataRepresentation.values()[0]);
-            marshalOne(GriddedDataFieldNumber.values()[0]);
-            marshalOne(GriddedDataSampleType.values()[0]);
-            marshalOne(HighDensityTrackJam.values()[0]);
-            marshalOne(HighFidelityHAVEQUICKTODTransmitIndicator.values()[0]);
-            marshalOne(IFFAlternateMode4ChallengeReply.values()[0]);
-            marshalOne(IFFApplicableModes.values()[0]);
-            marshalOne(IFFDataRecordAvailable.values()[0]);
-            marshalOne(IFFLayerSpecificInformation.values()[0]);
-            marshalOne(IFFSimulationMode.values()[0]);
-            marshalOne(IFFSystemMode.values()[0]);
-            marshalOne(IFFSystemName.values()[0]);
-            marshalOne(IFFSystemType.values()[0]);
-            marshalOne(IFFSystemType1OperationalParameter1.values()[0]);
-            marshalOne(IFFSystemType1OperationalParameter2.values()[0]);
-            marshalOne(IOActionIOActionPhase.values()[0]);
-            marshalOne(IOActionIOActionType.values()[0]);
-            marshalOne(IOActionIOSimulationSource.values()[0]);
-            marshalOne(IOActionIOWarfareType.values()[0]);
-            marshalOne(IOCommsNodeRecordCommsNodeType.values()[0]);
-            marshalOne(IOEffectsRecordIOEffect.values()[0]);
-            marshalOne(IOEffectsRecordIOLinkType.values()[0]);
-            marshalOne(IOEffectsRecordIOProcess.values()[0]);
-            marshalOne(IOEffectsRecordIOStatus.values()[0]);
-            marshalOne(IOReportIOReportType.values()[0]);
-            marshalOne(ISLSAntennaType.values()[0]);
-            marshalOne(IntercomControlCommand.values()[0]);
-            marshalOne(IntercomControlCommunicationsClass.values()[0]);
-            marshalOne(IntercomControlCommunicationsType.values()[0]);
-            marshalOne(IntercomControlControlType.values()[0]);
-            marshalOne(IntercomControlDestinationLineStateCommand.values()[0]);
-            marshalOne(IntercomControlRecordType.values()[0]);
-            marshalOne(IntercomControlTransmitLineState.values()[0]);
-            marshalOne(IsGroupOfGroupedEntityCategory.values()[0]);
-            marshalOne(IsGroupOfRestStatus.values()[0]);
-            marshalOne(IsPartOfNature.values()[0]);
-            marshalOne(IsPartOfPosition.values()[0]);
-            marshalOne(IsPartOfStationName.values()[0]);
-            marshalOne(IslandSubcategory.values()[0]);
-            marshalOne(JTIDSMIDSModulationParametersSynchronizationState.values()[0]);
-            marshalOne(JTIDSMIDSModulationParametersTransmittingTerminalPrimaryMode.values()[0]);
-            marshalOne(JTIDSMIDSModulationParametersTransmittingTerminalSecondaryMode.values()[0]);
-
-            marshalOne(LeafCoverage.values()[0]);
-            marshalOne(Level2SquitterStatus.values()[0]);
-            marshalOne(LifeFormAirCategories.values()[0]);
-            marshalOne(LifeFormCategoriesUS.values()[0]);
-            marshalOne(LifeFormExtraPersonalData.values()[0]);
-            marshalOne(LifeFormHumanSpecificAntiMaterielRifles.values()[0]);
-            marshalOne(LifeFormHumanSpecificAntiTankMissiles.values()[0]);
-            marshalOne(LifeFormHumanSpecificAntiTankRockets.values()[0]);
-            marshalOne(LifeFormHumanSpecificAssaultRifles.values()[0]);
-            marshalOne(LifeFormHumanSpecificDroneGuns.values()[0]);
-            marshalOne(LifeFormHumanSpecificEquipmentClass.values()[0]);
-            marshalOne(LifeFormHumanSpecificFlameRockets.values()[0]);
-            marshalOne(LifeFormHumanSpecificFlameThrowers.values()[0]);
-            marshalOne(LifeFormHumanSpecificGrenadeLaunchers.values()[0]);
-            marshalOne(LifeFormHumanSpecificGrenadeLaunchingMachineGun.values()[0]);
-            marshalOne(LifeFormHumanSpecificHandGuns.values()[0]);
-            marshalOne(LifeFormHumanSpecificHighPowerRifles.values()[0]);
-            marshalOne(LifeFormHumanSpecificMachineGuns.values()[0]);
-            marshalOne(LifeFormHumanSpecificManPortableAirDefenseSystem.values()[0]);
-            marshalOne(LifeFormHumanSpecificMortars.values()[0]);
-            marshalOne(LifeFormHumanSpecificRecoillessRifles.values()[0]);
-            marshalOne(LifeFormHumanSpecificShotGuns.values()[0]);
-            marshalOne(LifeFormHumanSpecificSniper.values()[0]);
-            marshalOne(LifeFormHumanSpecificSubMachineGun.values()[0]);
-            marshalOne(LifeFormHumanSpecificWeaponNonspecific.values()[0]);
-            marshalOne(LifeFormHumanSubcategoryEquipmentClass.values()[0]);
-            marshalOne(LifeFormLandCategories.values()[0]);
-            marshalOne(LifeFormSubsurfaceCategories.values()[0]);
-
-            marshalOne(LifeFormsSubcategoryCISWeapons.values()[0]);
-            marshalOne(LifeFormsSubcategoryFrenchWeapons.values()[0]);
-            marshalOne(LifeFormsSubcategoryGermanWeapons.values()[0]);
-            marshalOne(LifeFormsSubcategoryIranianWeapons.values()[0]);
-            marshalOne(LifeFormsSubcategoryUKWeapons.values()[0]);
-            marshalOne(LifeFormsSubcategoryUSWeapons.values()[0]);
-            marshalOne(LifeSavingEquipment.values()[0]);
-
-            marshalOne(Link1111BDataTerminalSetIndicator.values()[0]);
-            marshalOne(Link1111BFidelityLevel.values()[0]);
-            marshalOne(Link1111BModeofOperation.values()[0]);
-            marshalOne(Link1111BTerminalMode.values()[0]);
-            marshalOne(Material.values()[0]);
-            marshalOne(MinefieldAppearanceActiveStatus.values()[0]);
-            marshalOne(MinefieldAppearanceLane.values()[0]);
-            marshalOne(MinefieldAppearanceMinefieldType.values()[0]);
-            marshalOne(MinefieldAppearanceState.values()[0]);
-
-            marshalOne(MinefieldFusingFuseType.values()[0]);
-            marshalOne(MinefieldPaintSchemeAlgae.values()[0]);
-            marshalOne(MinefieldPaintSchemePaintScheme.values()[0]);
-            marshalOne(MinefieldSensorTypes.values()[0]);
-            marshalOne(MinefieldSensorTypesFLIR.values()[0]);
-            marshalOne(MinefieldSensorTypesLaser.values()[0]);
-            marshalOne(MinefieldSensorTypesMagnetic.values()[0]);
-            marshalOne(MinefieldSensorTypesMultispectral.values()[0]);
-            marshalOne(MinefieldSensorTypesOptical.values()[0]);
-            marshalOne(MinefieldSensorTypesPhysical.values()[0]);
-            marshalOne(MinefieldSensorTypesRADAR.values()[0]);
-            marshalOne(MinefieldSensorTypesSONAR.values()[0]);
-
-            marshalOne(MinefieldStateProtocolMode.values()[0]);
-            marshalOne(Mode5IFFMission.values()[0]);
-            marshalOne(Mode5LevelSelection.values()[0]);
-            marshalOne(Mode5LocationErrors.values()[0]);
-            marshalOne(Mode5MessageFormatsStatus.values()[0]);
-            marshalOne(Mode5PlatformType.values()[0]);
-            marshalOne(Mode5Reply.values()[0]);
-            marshalOne(Mode5SAltitudeResolution.values()[0]);
-            marshalOne(Mode5SquitterType.values()[0]);
-            marshalOne(ModeCAltitudeIndicator.values()[0]);
-            marshalOne(ModeSInterrogatorIdentifierICType.values()[0]);
-            marshalOne(ModeSInterrogatorStatusTransmitState.values()[0]);
-            marshalOne(ModeSSquitterRecordSource.values()[0]);
-            marshalOne(ModeSSquitterType.values()[0]);
-
-            marshalOne(MunitionCategory.values()[0]);
-            marshalOne(MunitionDescriptorFuse.values()[0]);
-            marshalOne(MunitionDescriptorWarhead.values()[0]);
-            marshalOne(MunitionDomain.values()[0]);
-            marshalOne(MunitionExpendableStatus.values()[0]);
-            marshalOne(NETIDRecordFrequencyTable.values()[0]);
-            marshalOne(NETIDRecordMode.values()[0]);
-            marshalOne(NavigationSource.values()[0]);
-
-            marshalOne(ObjectKind.values()[0]);
-
-            marshalOne(OwnershipStatus.values()[0]);
-            marshalOne(Parachute.values()[0]);
-            marshalOne(PhysicalAssociationTypeGroups.values()[0]);
-            marshalOne(PlatformAirCategory.values()[0]);
-            marshalOne(PlatformAirCivilianFixedWingAircraftSubcategories.values()[0]);
-            marshalOne(PlatformAirCivilianGliderSubcategories.values()[0]);
-            marshalOne(PlatformAirCivilianHelicopterSubcategories.values()[0]);
-            marshalOne(PlatformAirCivilianLighterthanAirAirshipSubcategories.values()[0]);
-            marshalOne(PlatformAirCivilianLighterthanAirBalloonSubcategories.values()[0]);
-            marshalOne(PlatformAirCivilianUltralightNonrigidWingAircraftSubcategories.values()[0]);
-            marshalOne(PlatformAirCivilianUltralightRigidWingAircraftSubcategories.values()[0]);
-            marshalOne(PlatformDomain.values()[0]);
-            marshalOne(PlatformLandBusSubcategories.values()[0]);
-            marshalOne(PlatformLandCarSubcategories.values()[0]);
-            marshalOne(PlatformLandCategory.values()[0]);
-            marshalOne(PlatformLandConstructionSpecialtyVehicleSubcategories.values()[0]);
-            marshalOne(PlatformLandFarmSpecialtyVehicleSubcategories.values()[0]);
-            marshalOne(PlatformLandMotorcycleSubcategories.values()[0]);
-            marshalOne(PlatformLandMultipleUnitCargoTruckSubcategories.values()[0]);
-            marshalOne(PlatformLandMultipleUnitUtilityEmergencyTruckSubcategories.values()[0]);
-            marshalOne(PlatformLandNonmotorizedSubcategories.values()[0]);
-            marshalOne(PlatformLandRecreationalSubcategories.values()[0]);
-            marshalOne(PlatformLandSingleUnitCargoTruckSubcategories.values()[0]);
-            marshalOne(PlatformLandSingleUnitUtilityEmergencyTruckSubcategories.values()[0]);
-            marshalOne(PlatformLandTrailerSubcategories.values()[0]);
-            marshalOne(PlatformLandTrainsSubcategories.values()[0]);
-            marshalOne(PlatformLandUtilityEmergencyCarSubcategories.values()[0]);
-            marshalOne(PlatformSpaceCategory.values()[0]);
-            marshalOne(PlatformSubsurfaceCategory.values()[0]);
-            marshalOne(PlatformSubsurfaceCivilianSemiSubmersiblesSubcategories.values()[0]);
-            marshalOne(PlatformSubsurfaceCivilianSubmarineSubcategories.values()[0]);
-            marshalOne(PlatformSubsurfaceCivilianSubmersibleSubcategories.values()[0]);
-            marshalOne(PlatformSurfaceCategory.values()[0]);
-            marshalOne(PlatformSurfaceDryCargoShipSubcategories.values()[0]);
-            marshalOne(PlatformSurfaceFishingVesselSubcategories.values()[0]);
-            marshalOne(PlatformSurfaceOtherVesselsSubcategories.values()[0]);
-            marshalOne(PlatformSurfacePassengerVesselSubcategories.values()[0]);
-            marshalOne(PlatformSurfacePrivateMotorboatSubcategories.values()[0]);
-            marshalOne(PlatformSurfacePrivateSailboatSubcategories.values()[0]);
-            marshalOne(PlatformSurfaceSupportVesselSubcategories.values()[0]);
-            marshalOne(PlatformSurfaceTankerSubcategories.values()[0]);
-
-            marshalOne(RadioCategory.values()[0]);
-            marshalOne(RadioSubcategory.values()[0]);
-            marshalOne(ReceiverReceiverState.values()[0]);
-            marshalOne(RecordQueryREventType.values()[0]);
-            marshalOne(RecordREventType.values()[0]);
-            marshalOne(RepairCompleteRepair.values()[0]);
-            marshalOne(RepairGroups.values()[0]);
-            marshalOne(RepairResponseRepairResult.values()[0]);
-            marshalOne(ReplyAmplification.values()[0]);
-            marshalOne(RequiredReliabilityService.values()[0]);
-            marshalOne(Season.values()[0]);
-
-            marshalOne(SensorEmitterCategory.values()[0]);
-            marshalOne(SensorOnOffStatus.values()[0]);
-            marshalOne(SensorRecordSensorTypeOtherActiveSensors.values()[0]);
-            marshalOne(SensorRecordSensorTypePassiveSensors.values()[0]);
-            marshalOne(SensorTypeSource.values()[0]);
-            marshalOne(SeparationVPPreEntityIndicator.values()[0]);
-            marshalOne(SeparationVPReasonforSeparation.values()[0]);
-            marshalOne(ServiceRequestServiceTypeRequested.values()[0]);
-            marshalOne(SignalEncodingClass.values()[0]);
-            marshalOne(SignalEncodingType.values()[0]);
-            marshalOne(SignalTDLType.values()[0]);
-            marshalOne(SignalUserProtocolIdentificationNumber.values()[0]);
-
-            marshalOne(SpecificDimensionEnumerationsforAirAreaSize.values()[0]);
-            marshalOne(SpecificDimensionEnumerationsforLandAreaSize.values()[0]);
-            marshalOne(SpotChaffStatus.values()[0]);
-
-            marshalOne(StopFreezeReason.values()[0]);
-            marshalOne(SubcategoriesforAirCategory200Bird.values()[0]);
-            marshalOne(SubcategoriesforAirCategory201Insect.values()[0]);
-            marshalOne(SubcategoriesforAirCategory202Mammal.values()[0]);
-            marshalOne(SubcategoriesforLandCategory200Mammal.values()[0]);
-            marshalOne(SubcategoriesforLandCategory201Reptile.values()[0]);
-            marshalOne(SubcategoriesforLandCategory202Amphibian.values()[0]);
-            marshalOne(SubcategoriesforLandCategory203Insect.values()[0]);
-            marshalOne(SubcategoriesforLandCategory204Arachnid.values()[0]);
-            marshalOne(SubcategoriesforLandCategory205Mollusk.values()[0]);
-            marshalOne(SubcategoriesforLandCategory206Marsupial.values()[0]);
-            marshalOne(SubcategoriesforSubsurfaceCategory200Fish.values()[0]);
-            marshalOne(SubcategoriesforSubsurfaceCategory201Mammal.values()[0]);
-            marshalOne(SubcategoriesforSubsurfaceCategory202Mollusk.values()[0]);
-            marshalOne(SubcategoriesforSubsurfaceCategory203Crustacean.values()[0]);
-            marshalOne(SubcategoriesforSubsurfaceCategory204Insect.values()[0]);
-
-            marshalOne(SupplyDomain.values()[0]);
-            marshalOne(SupplyFuelType.values()[0]);
-
-            marshalOne(SurveillanceStatus.values()[0]);
-            marshalOne(TCASACASBasicAdvancedIndicator.values()[0]);
-            marshalOne(TCASACASIndicator.values()[0]);
-            marshalOne(TCASACASSoftwareVersion.values()[0]);
-            marshalOne(TCASACASType.values()[0]);
-            marshalOne(TCASIIIType.values()[0]);
-            marshalOne(TILinkType.values()[0]);
-            marshalOne(TimeTypeSource.values()[0]);
-            marshalOne(TransferControlTransferType.values()[0]);
-            marshalOne(TransmissionIndicator.values()[0]);
-            marshalOne(TransmitterAntennaPatternReferenceSystem.values()[0]);
-            marshalOne(TransmitterAntennaPatternType.values()[0]);
-            marshalOne(TransmitterCryptoSystem.values()[0]);
-            marshalOne(TransmitterDetailAmplitudeModulation.values()[0]);
-            marshalOne(TransmitterDetailAmplitudeandAngleModulation.values()[0]);
-            marshalOne(TransmitterDetailAnglemodulation.values()[0]);
-            marshalOne(TransmitterDetailCarrierPhaseShiftModulation.values()[0]);
-            marshalOne(TransmitterDetailCombinationModulation.values()[0]);
-            marshalOne(TransmitterDetailPulseModulation.values()[0]);
-            marshalOne(TransmitterDetailSATCOMModulation.values()[0]);
-            marshalOne(TransmitterDetailUnmodulatedModulation.values()[0]);
-            marshalOne(TransmitterInputSource.values()[0]);
-            marshalOne(TransmitterMajorModulation.values()[0]);
-            marshalOne(TransmitterModulationTypeSystem.values()[0]);
-            marshalOne(TransmitterTransmitState.values()[0]);
-            marshalOne(TransponderInterrogatorIndicator.values()[0]);
-            marshalOne(TurnRateSource.values()[0]);
-            marshalOne(UAAcousticEmitterSystemFunction.values()[0]);
-            marshalOne(UAAcousticSystemName.values()[0]);
-            marshalOne(UAActiveEmissionParameterIndex.values()[0]);
-            marshalOne(UAAdditionalPassiveActivityParameterIndex.values()[0]);
-            marshalOne(UAPassiveParameterIndex.values()[0]);
-
-            marshalOne(UAPropulsionPlantConfigurationConfiguration.values()[0]);
-            marshalOne(UAScanPattern.values()[0]);
-            marshalOne(UAStateChangeUpdateIndicator.values()[0]);
-            marshalOne(VariableParameterRecordType.values()[0]);
-            marshalOne(VariableRecordType.values()[0]);
-            marshalOne(VariantsforAirCategory200Bird.values()[0]);
-            marshalOne(VariantsforLandCategoriesReptilesAmphibiansInsectsandArachnids.values()[0]);
-            marshalOne(VariantsforSubsurfaceCategory201Mammal.values()[0]);
-
-            
-            System.out.println("Testing BitSets");
-            /* DisBitSets which were taken from the alphabetical list above where the spaces are */
-
-            // Testing import of particular Bits class
-            marshalOne(new AirPlatformAppearance(AirPlatformAppearance.AFTERBURNER_ON,1),"17");
-            
-            marshalOne(new AirPlatformAppearance().set(AirPlatformAppearance.CANOPY_TROOP_DOOR, AppearanceCanopy.REAR_CANOPY_RIGHT_TROOP_DOOR_OPEN.getValue()),"9 3bitslen = 5");
-            
-            marshalOne(new ArealObjectAppearanceMinefield().set(ArealObjectAppearanceMinefield.BREACH_STATE, 1),"");
-            marshalOne(new CulturalFeatureAppearance().set(CulturalFeatureAppearance.DAMAGE, 1),"");
-            marshalOne(new CulturalFeatureCapabilities().set(CulturalFeatureCapabilities.IED_PRESENCE_INDICATOR, 1),"");
-            marshalOne(new DEDamageDescriptionComponentVisualDamageStatus().set(DEDamageDescriptionComponentVisualDamageStatus.IS_FIRE_PRESENT, 1),"");
-            marshalOne(new DEFireFlags().set(DEFireFlags.STATE_UPDATE_FLAG, 1),"");
-            marshalOne(new EnvironmentalAppearance().set(EnvironmentalAppearance.DENSITY, 1),"");
-            
-            marshalOne(new EnvironmentalAppearance().set(EnvironmentalAppearance.DENSITY, 3).set(EnvironmentalAppearance.IS_FROZEN, 1),"");
-            
-            marshalOne(new EnvironmentalCapabilities().set(EnvironmentalCapabilities.IED_PRESENCE_INDICATOR, 1),"");
-            marshalOne(new EnvironmentalProcessEnvironmentStatus().set(EnvironmentalProcessEnvironmentStatus.IS_ACTIVE, 1),"");
-            marshalOne(new ExpendableAppearance().set(ExpendableAppearance.DAMAGE, 1),"");
-            marshalOne(new ExpendableCapabilities().set(ExpendableCapabilities.RESERVED, 1),"");
-            marshalOne(new LandPlatformAppearance().set(LandPlatformAppearance.BLACKOUT_BRAKE_LIGHTS_ON, 1),"");
-            marshalOne(new LandPlatformCapabilities().set(LandPlatformCapabilities.AMMUNITION_SUPPLY, 1),"");
-            marshalOne(new LifeFormsAppearance().set(LifeFormsAppearance.CAMOUFLAGE_TYPE,1),"");
-            marshalOne(new LifeFormsCapabilities().set(LifeFormsCapabilities.AMMUNITION_SUPPLY, 1),"");
-            marshalOne(new LinearObjectAppearanceExhaustSmoke().set(LinearObjectAppearanceExhaustSmoke.CHEMICAL_TYPE, 1),"");
-            marshalOne(new LinearObjectAppearanceMinefieldLaneMarker().set(LinearObjectAppearanceMinefieldLaneMarker.VISIBLE_SIDE, 1),"");
-            marshalOne(new LinearObjectAppearanceSpeedBump().set(LinearObjectAppearanceSpeedBump.COLOR, 1),"");
-            marshalOne(new LinearObjectAppearanceTankDitchAndConcertinaWire().set(LinearObjectAppearanceTankDitchAndConcertinaWire.BREACH_LENGTH, 1),"");
-            marshalOne(new LinearObjectAppearanceWire().set(LinearObjectAppearanceWire.COLOR, 1),"");
-            marshalOne(new MinefieldDataFusing().set(MinefieldDataFusing.HAS_ANTI_HANDLING_DEVICE,1),"");
-            marshalOne(new MinefieldDataPaintScheme().set(MinefieldDataPaintScheme.ALGAE, 1),"");
-            marshalOne(new MinefieldStateAppearanceBitMap().set(MinefieldStateAppearanceBitMap.ACTIVE_STATUS, 1),"");
-            marshalOne(new MunitionAppearance().set(MunitionAppearance.COVER_SHROUD_STATUS, 1),"");
-            marshalOne(new MunitionCapabilities().set(MunitionCapabilities.IED_PRESENCE_INDICATOR, 1),"");
-            marshalOne(new NonHumanLifeFormsAppearance().set(NonHumanLifeFormsAppearance.HEALTH, 1),"");
-            marshalOne(new ObjectStateAppearanceGeneral().set(ObjectStateAppearanceGeneral.DAMAGE, 1),"");
-            marshalOne(new ObjectStateModificationArealObject().set(ObjectStateModificationArealObject.IS_LOCATION_MODIFIED, 1),"");
-            marshalOne(new ObjectStateModificationLinearObject().set(ObjectStateModificationLinearObject.IS_LOCATION_MODIFIED, 1),"");
-            marshalOne(new ObjectStateModificationPointObject().set(ObjectStateModificationPointObject.IS_LOCATION_MODIFIED, 1),"");
-            marshalOne(new PointObjectAppearanceAirGroundBurst().set(PointObjectAppearanceAirGroundBurst.CHEMICAL_TYPE, 1),"");
-            marshalOne(new PointObjectAppearanceBuildingStructure().set(PointObjectAppearanceBuildingStructure.COLOR, 1),"");
-            marshalOne(new PointObjectAppearanceCrater().set(PointObjectAppearanceCrater.BREACH_STATE, 1),"");
-            marshalOne(new PointObjectAppearanceDisturbedEarthRoad().set(PointObjectAppearanceDisturbedEarthRoad.CONTRAST, 1),"");
-            marshalOne(new PointObjectAppearanceLogCribAbatisEtAl().set(PointObjectAppearanceLogCribAbatisEtAl.BREACH_STATE, 1),"");
-            marshalOne(new PointObjectAppearancePothole().set(PointObjectAppearancePothole.DEPTH, 1),"");
-            marshalOne(new PointObjectAppearanceRibbonBridge().set(PointObjectAppearanceRibbonBridge.NUMBER_OF_SEGMENTS, 1),"");
-            marshalOne(new PointObjectAppearanceTree().set(PointObjectAppearanceTree.LEAF_COVERAGE, 1),"");
-            marshalOne(new RadioAppearance().set(RadioAppearance.IS_FROZEN, 1),"");
-            marshalOne(new RadioCapabilities().set(RadioCapabilities.RESERVED, 1),"");
-            marshalOne(new SensorEmitterAppearance().set(SensorEmitterAppearance.ANTENNA_RAISED, 1),"");
-            marshalOne(new SensorEmitterCapabilities().set(SensorEmitterCapabilities.IED_PRESENCE_INDICATOR, 1),"");
-            marshalOne(new SpacePlatformAppearance().set(SpacePlatformAppearance.DAMAGE, 1),"");
-            marshalOne(new SpacePlatformCapabilities().set(SpacePlatformCapabilities.AMMUNITION_SUPPLY, 1),"");
-            marshalOne(new StopFreezeFrozenBehavior().set(StopFreezeFrozenBehavior.PROCESS_UPDATES, 1),"");
-            marshalOne(new SubsurfacePlatformAppearance().set(SubsurfacePlatformAppearance.DAMAGE, 1),"");
-            marshalOne(new SubsurfacePlatformCapabilities().set(SubsurfacePlatformCapabilities.AMMUNITION_SUPPLY, 1),"");
-            marshalOne(new SupplyAppearance().set(SupplyAppearance.DAMAGE, 1),"");
-            marshalOne(new SupplyCapabilities().set(SupplyCapabilities.AMMUNITION_SUPPLY, 1),"");
-            marshalOne(new SurfacePlatformAppearance().set(SurfacePlatformAppearance.DAMAGE, 1),"");
-            marshalOne(new SurfacePlatformCapabilities().set(SurfacePlatformCapabilities.AMMUNITION_SUPPLY, 1),"");
-            marshalOne(new UAPropulsionPlantConfiguration().set(UAPropulsionPlantConfiguration.CONFIGURATION, 1),"");
-            
-            // classes with no enumerated bit positions
-            marshalOne(new LinearObjectAppearanceBreach().set(0,1,1),"");
-            marshalOne(new PointObjectAppearanceBuildingRubble().set(0,1,1),"");
-            marshalOne(new PointObjectAppearanceStationaryBridgeAndAVLB().set(0,1,1),"");
-        }
-        catch (Throwable t) {
-            thr = t;
-        }
-        if(thr != null) thr.printStackTrace();
-    //temp    assertNull(thr, "Exception should be null if successful marshal");
-        System.out.println(""+count+" enums and disbitsets tested");
+      marshalOne(ComponentVisualDamageStatusSmoke.values()[0]);
+      marshalOne(ComponentVisualDamageStatusSurfaceDamage.values()[0]);
+      marshalOne(Country.values()[0]);
+      marshalOne(CoverShroudStatus.values()[0]);
+      //           marshalOne(CryptoKeyIDCryptoMode.values()[0]);
+
+      marshalOne(DEDamageDescriptionComponentDamageStatus.values()[0]);
+
+      marshalOne(DEDamageDescriptionComponentVisualSmokeColor.values()[0]);
+
+      marshalOne(DEFireFlagsStateUpdateFlag.values()[0]);
+      marshalOne(DEFirePulseShape.values()[0]);
+      marshalOne(DEPrecisionAimpointBeamSpotType.values()[0]);
+      marshalOne(DISAttributeActionCode.values()[0]);
+      marshalOne(DISLiveEntitySubprotocolNumber.values()[0]);
+      marshalOne(DISPDUStatusActiveInterrogationIndicatorAII.values()[0]);
+      marshalOne(DISPDUStatusCoupledExtensionIndicatorCEI.values()[0]);
+      marshalOne(DISPDUStatusDetonationTypeIndicatorDTI.values()[0]);
+      marshalOne(DISPDUStatusFireTypeIndicatorFTI.values()[0]);
+      marshalOne(DISPDUStatusIFFSimulationModeISM.values()[0]);
+      marshalOne(DISPDUStatusIntercomAttachedIndicatorIAI.values()[0]);
+      marshalOne(DISPDUStatusLVCIndicatorLVC.values()[0]);
+      marshalOne(DISPDUStatusRadioAttachedIndicatorRAI.values()[0]);
+      marshalOne(DISPDUStatusTransferredEntityIndicatorTEI.values()[0]);
+      marshalOne(DISPDUType.values()[0]);
+      marshalOne(DISProtocolFamily.values()[0]);
+      marshalOne(DISProtocolVersion.values()[0]);
+      marshalOne(DRParametersType.values()[0]);
+      marshalOne(DataCategory.values()[0]);
+      marshalOne(DeadReckoningAlgorithm.values()[0]);
+      marshalOne(DeltaMode5SAltitudePositiveNegativeIndicator.values()[0]);
+      marshalOne(DesignatorDesignatorCode.values()[0]);
+      marshalOne(DesignatorSystemName.values()[0]);
+      marshalOne(DetonationResult.values()[0]);
+      marshalOne(EEAttributeStateIndicator.values()[0]);
+      marshalOne(ElectromagneticEmissionBeamFunction.values()[0]);
+      marshalOne(ElectromagneticEmissionStateUpdateIndicator.values()[0]);
+      // why won't compile?     marshalOne(EmitterName.values()[0]);
+      marshalOne(EmitterSystemFunction.values()[0]);
+      marshalOne(EntityAssociationAssociationStatus.values()[0]);
+      marshalOne(EntityAssociationAssociationType.values()[0]);
+      marshalOne(EntityAssociationGroupMemberType.values()[0]);
+      marshalOne(EntityAssociationPhysicalAssociationType.values()[0]);
+      marshalOne(EntityAssociationPhysicalConnectionType.values()[0]);
+      marshalOne(EntityDamageStatusComponentIdentification.values()[0]);
+      marshalOne(EntityKind.values()[0]);
+      marshalOne(EntityMarkingCharacterSet.values()[0]);
+      marshalOne(EntityVPRecordChangeIndicator.values()[0]);
+      marshalOne(EnvironmentRecordTypeGroups.values()[0]);
+
+      marshalOne(EnvironmentalProcessModelType.values()[0]);
+      marshalOne(EnvironmentalProcessRecordType.values()[0]);
+      marshalOne(EnvironmentalSubcategory.values()[0]);
+      marshalOne(EventReportEventType.values()[0]);
+      marshalOne(ExpendableAirCategory.values()[0]);
+
+      marshalOne(ExpendableSubsurfaceCategory.values()[0]);
+      marshalOne(ExpendableSurfaceCategory.values()[0]);
+      marshalOne(ExplosiveMaterialCategories.values()[0]);
+      marshalOne(ExplosiveMaterialGroups.values()[0]);
+      marshalOne(FlareSmokeColor.values()[0]);
+      marshalOne(FlareSmokeStatus.values()[0]);
+      marshalOne(ForceID.values()[0]);
+      marshalOne(FormatType.values()[0]);
+      marshalOne(FuelLocation.values()[0]);
+      marshalOne(FuelMeasurementUnits.values()[0]);
+      marshalOne(GridAxisDescriptorAxisType.values()[0]);
+      marshalOne(GriddedDataConstantGrid.values()[0]);
+      marshalOne(GriddedDataCoordinateSystem.values()[0]);
+      marshalOne(GriddedDataDataRepresentation.values()[0]);
+      marshalOne(GriddedDataFieldNumber.values()[0]);
+      marshalOne(GriddedDataSampleType.values()[0]);
+      marshalOne(HighDensityTrackJam.values()[0]);
+      marshalOne(HighFidelityHAVEQUICKTODTransmitIndicator.values()[0]);
+      marshalOne(IFFAlternateMode4ChallengeReply.values()[0]);
+      marshalOne(IFFApplicableModes.values()[0]);
+      marshalOne(IFFDataRecordAvailable.values()[0]);
+      marshalOne(IFFLayerSpecificInformation.values()[0]);
+      marshalOne(IFFSimulationMode.values()[0]);
+      marshalOne(IFFSystemMode.values()[0]);
+      marshalOne(IFFSystemName.values()[0]);
+      marshalOne(IFFSystemType.values()[0]);
+      marshalOne(IFFSystemType1OperationalParameter1.values()[0]);
+      marshalOne(IFFSystemType1OperationalParameter2.values()[0]);
+      marshalOne(IOActionIOActionPhase.values()[0]);
+      marshalOne(IOActionIOActionType.values()[0]);
+      marshalOne(IOActionIOSimulationSource.values()[0]);
+      marshalOne(IOActionIOWarfareType.values()[0]);
+      marshalOne(IOCommsNodeRecordCommsNodeType.values()[0]);
+      marshalOne(IOEffectsRecordIOEffect.values()[0]);
+      marshalOne(IOEffectsRecordIOLinkType.values()[0]);
+      marshalOne(IOEffectsRecordIOProcess.values()[0]);
+      marshalOne(IOEffectsRecordIOStatus.values()[0]);
+      marshalOne(IOReportIOReportType.values()[0]);
+      marshalOne(ISLSAntennaType.values()[0]);
+      marshalOne(IntercomControlCommand.values()[0]);
+      marshalOne(IntercomControlCommunicationsClass.values()[0]);
+      marshalOne(IntercomControlCommunicationsType.values()[0]);
+      marshalOne(IntercomControlControlType.values()[0]);
+      marshalOne(IntercomControlDestinationLineStateCommand.values()[0]);
+      marshalOne(IntercomControlRecordType.values()[0]);
+      marshalOne(IntercomControlTransmitLineState.values()[0]);
+      marshalOne(IsGroupOfGroupedEntityCategory.values()[0]);
+      marshalOne(IsGroupOfRestStatus.values()[0]);
+      marshalOne(IsPartOfNature.values()[0]);
+      marshalOne(IsPartOfPosition.values()[0]);
+      marshalOne(IsPartOfStationName.values()[0]);
+      marshalOne(IslandSubcategory.values()[0]);
+      marshalOne(JTIDSMIDSModulationParametersSynchronizationState.values()[0]);
+      marshalOne(JTIDSMIDSModulationParametersTransmittingTerminalPrimaryMode.values()[0]);
+      marshalOne(JTIDSMIDSModulationParametersTransmittingTerminalSecondaryMode.values()[0]);
+
+      marshalOne(LeafCoverage.values()[0]);
+      marshalOne(Level2SquitterStatus.values()[0]);
+      marshalOne(LifeFormAirCategories.values()[0]);
+      marshalOne(LifeFormCategoriesUS.values()[0]);
+      marshalOne(LifeFormExtraPersonalData.values()[0]);
+      marshalOne(LifeFormHumanSpecificAntiMaterielRifles.values()[0]);
+      marshalOne(LifeFormHumanSpecificAntiTankMissiles.values()[0]);
+      marshalOne(LifeFormHumanSpecificAntiTankRockets.values()[0]);
+      marshalOne(LifeFormHumanSpecificAssaultRifles.values()[0]);
+      marshalOne(LifeFormHumanSpecificDroneGuns.values()[0]);
+      marshalOne(LifeFormHumanSpecificEquipmentClass.values()[0]);
+      marshalOne(LifeFormHumanSpecificFlameRockets.values()[0]);
+      marshalOne(LifeFormHumanSpecificFlameThrowers.values()[0]);
+      marshalOne(LifeFormHumanSpecificGrenadeLaunchers.values()[0]);
+      marshalOne(LifeFormHumanSpecificGrenadeLaunchingMachineGun.values()[0]);
+      marshalOne(LifeFormHumanSpecificHandGuns.values()[0]);
+      marshalOne(LifeFormHumanSpecificHighPowerRifles.values()[0]);
+      marshalOne(LifeFormHumanSpecificMachineGuns.values()[0]);
+      marshalOne(LifeFormHumanSpecificManPortableAirDefenseSystem.values()[0]);
+      marshalOne(LifeFormHumanSpecificMortars.values()[0]);
+      marshalOne(LifeFormHumanSpecificRecoillessRifles.values()[0]);
+      marshalOne(LifeFormHumanSpecificShotGuns.values()[0]);
+      marshalOne(LifeFormHumanSpecificSniper.values()[0]);
+      marshalOne(LifeFormHumanSpecificSubMachineGun.values()[0]);
+      marshalOne(LifeFormHumanSpecificWeaponNonspecific.values()[0]);
+      marshalOne(LifeFormHumanSubcategoryEquipmentClass.values()[0]);
+      marshalOne(LifeFormLandCategories.values()[0]);
+      marshalOne(LifeFormSubsurfaceCategories.values()[0]);
+
+      marshalOne(LifeFormsSubcategoryCISWeapons.values()[0]);
+      marshalOne(LifeFormsSubcategoryFrenchWeapons.values()[0]);
+      marshalOne(LifeFormsSubcategoryGermanWeapons.values()[0]);
+      marshalOne(LifeFormsSubcategoryIranianWeapons.values()[0]);
+      marshalOne(LifeFormsSubcategoryUKWeapons.values()[0]);
+      marshalOne(LifeFormsSubcategoryUSWeapons.values()[0]);
+      marshalOne(LifeSavingEquipment.values()[0]);
+
+      marshalOne(Link1111BDataTerminalSetIndicator.values()[0]);
+      marshalOne(Link1111BFidelityLevel.values()[0]);
+      marshalOne(Link1111BModeofOperation.values()[0]);
+      marshalOne(Link1111BTerminalMode.values()[0]);
+      marshalOne(Material.values()[0]);
+      marshalOne(MinefieldAppearanceActiveStatus.values()[0]);
+      marshalOne(MinefieldAppearanceLane.values()[0]);
+      marshalOne(MinefieldAppearanceMinefieldType.values()[0]);
+      marshalOne(MinefieldAppearanceState.values()[0]);
+
+      marshalOne(MinefieldFusingFuseType.values()[0]);
+      marshalOne(MinefieldPaintSchemeAlgae.values()[0]);
+      marshalOne(MinefieldPaintSchemePaintScheme.values()[0]);
+      marshalOne(MinefieldSensorTypes.values()[0]);
+      marshalOne(MinefieldSensorTypesFLIR.values()[0]);
+      marshalOne(MinefieldSensorTypesLaser.values()[0]);
+      marshalOne(MinefieldSensorTypesMagnetic.values()[0]);
+      marshalOne(MinefieldSensorTypesMultispectral.values()[0]);
+      marshalOne(MinefieldSensorTypesOptical.values()[0]);
+      marshalOne(MinefieldSensorTypesPhysical.values()[0]);
+      marshalOne(MinefieldSensorTypesRADAR.values()[0]);
+      marshalOne(MinefieldSensorTypesSONAR.values()[0]);
+
+      marshalOne(MinefieldStateProtocolMode.values()[0]);
+      marshalOne(Mode5IFFMission.values()[0]);
+      marshalOne(Mode5LevelSelection.values()[0]);
+      marshalOne(Mode5LocationErrors.values()[0]);
+      marshalOne(Mode5MessageFormatsStatus.values()[0]);
+      marshalOne(Mode5PlatformType.values()[0]);
+      marshalOne(Mode5Reply.values()[0]);
+      marshalOne(Mode5SAltitudeResolution.values()[0]);
+      marshalOne(Mode5SquitterType.values()[0]);
+      marshalOne(ModeCAltitudeIndicator.values()[0]);
+      marshalOne(ModeSInterrogatorIdentifierICType.values()[0]);
+      marshalOne(ModeSInterrogatorStatusTransmitState.values()[0]);
+      marshalOne(ModeSSquitterRecordSource.values()[0]);
+      marshalOne(ModeSSquitterType.values()[0]);
+
+      marshalOne(MunitionCategory.values()[0]);
+      marshalOne(MunitionDescriptorFuse.values()[0]);
+      marshalOne(MunitionDescriptorWarhead.values()[0]);
+      marshalOne(MunitionDomain.values()[0]);
+      marshalOne(MunitionExpendableStatus.values()[0]);
+      marshalOne(NETIDRecordFrequencyTable.values()[0]);
+      marshalOne(NETIDRecordMode.values()[0]);
+      marshalOne(NavigationSource.values()[0]);
+
+      marshalOne(ObjectKind.values()[0]);
+
+      marshalOne(OwnershipStatus.values()[0]);
+      marshalOne(Parachute.values()[0]);
+      marshalOne(PhysicalAssociationTypeGroups.values()[0]);
+      marshalOne(PlatformAirCategory.values()[0]);
+      marshalOne(PlatformAirCivilianFixedWingAircraftSubcategories.values()[0]);
+      marshalOne(PlatformAirCivilianGliderSubcategories.values()[0]);
+      marshalOne(PlatformAirCivilianHelicopterSubcategories.values()[0]);
+      marshalOne(PlatformAirCivilianLighterthanAirAirshipSubcategories.values()[0]);
+      marshalOne(PlatformAirCivilianLighterthanAirBalloonSubcategories.values()[0]);
+      marshalOne(PlatformAirCivilianUltralightNonrigidWingAircraftSubcategories.values()[0]);
+      marshalOne(PlatformAirCivilianUltralightRigidWingAircraftSubcategories.values()[0]);
+      marshalOne(PlatformDomain.values()[0]);
+      marshalOne(PlatformLandBusSubcategories.values()[0]);
+      marshalOne(PlatformLandCarSubcategories.values()[0]);
+      marshalOne(PlatformLandCategory.values()[0]);
+      marshalOne(PlatformLandConstructionSpecialtyVehicleSubcategories.values()[0]);
+      marshalOne(PlatformLandFarmSpecialtyVehicleSubcategories.values()[0]);
+      marshalOne(PlatformLandMotorcycleSubcategories.values()[0]);
+      marshalOne(PlatformLandMultipleUnitCargoTruckSubcategories.values()[0]);
+      marshalOne(PlatformLandMultipleUnitUtilityEmergencyTruckSubcategories.values()[0]);
+      marshalOne(PlatformLandNonmotorizedSubcategories.values()[0]);
+      marshalOne(PlatformLandRecreationalSubcategories.values()[0]);
+      marshalOne(PlatformLandSingleUnitCargoTruckSubcategories.values()[0]);
+      marshalOne(PlatformLandSingleUnitUtilityEmergencyTruckSubcategories.values()[0]);
+      marshalOne(PlatformLandTrailerSubcategories.values()[0]);
+      marshalOne(PlatformLandTrainsSubcategories.values()[0]);
+      marshalOne(PlatformLandUtilityEmergencyCarSubcategories.values()[0]);
+      marshalOne(PlatformSpaceCategory.values()[0]);
+      marshalOne(PlatformSubsurfaceCategory.values()[0]);
+      marshalOne(PlatformSubsurfaceCivilianSemiSubmersiblesSubcategories.values()[0]);
+      marshalOne(PlatformSubsurfaceCivilianSubmarineSubcategories.values()[0]);
+      marshalOne(PlatformSubsurfaceCivilianSubmersibleSubcategories.values()[0]);
+      marshalOne(PlatformSurfaceCategory.values()[0]);
+      marshalOne(PlatformSurfaceDryCargoShipSubcategories.values()[0]);
+      marshalOne(PlatformSurfaceFishingVesselSubcategories.values()[0]);
+      marshalOne(PlatformSurfaceOtherVesselsSubcategories.values()[0]);
+      marshalOne(PlatformSurfacePassengerVesselSubcategories.values()[0]);
+      marshalOne(PlatformSurfacePrivateMotorboatSubcategories.values()[0]);
+      marshalOne(PlatformSurfacePrivateSailboatSubcategories.values()[0]);
+      marshalOne(PlatformSurfaceSupportVesselSubcategories.values()[0]);
+      marshalOne(PlatformSurfaceTankerSubcategories.values()[0]);
+
+      marshalOne(RadioCategory.values()[0]);
+      marshalOne(RadioSubcategory.values()[0]);
+      marshalOne(ReceiverReceiverState.values()[0]);
+      marshalOne(RecordQueryREventType.values()[0]);
+      marshalOne(RecordREventType.values()[0]);
+      marshalOne(RepairCompleteRepair.values()[0]);
+      marshalOne(RepairGroups.values()[0]);
+      marshalOne(RepairResponseRepairResult.values()[0]);
+      marshalOne(ReplyAmplification.values()[0]);
+      marshalOne(RequiredReliabilityService.values()[0]);
+      marshalOne(Season.values()[0]);
+
+      marshalOne(SensorEmitterCategory.values()[0]);
+      marshalOne(SensorOnOffStatus.values()[0]);
+      marshalOne(SensorRecordSensorTypeOtherActiveSensors.values()[0]);
+      marshalOne(SensorRecordSensorTypePassiveSensors.values()[0]);
+      marshalOne(SensorTypeSource.values()[0]);
+      marshalOne(SeparationVPPreEntityIndicator.values()[0]);
+      marshalOne(SeparationVPReasonforSeparation.values()[0]);
+      marshalOne(ServiceRequestServiceTypeRequested.values()[0]);
+      marshalOne(SignalEncodingClass.values()[0]);
+      marshalOne(SignalEncodingType.values()[0]);
+      marshalOne(SignalTDLType.values()[0]);
+      marshalOne(SignalUserProtocolIdentificationNumber.values()[0]);
+
+      marshalOne(SpecificDimensionEnumerationsforAirAreaSize.values()[0]);
+      marshalOne(SpecificDimensionEnumerationsforLandAreaSize.values()[0]);
+      marshalOne(SpotChaffStatus.values()[0]);
+
+      marshalOne(StopFreezeReason.values()[0]);
+      marshalOne(SubcategoriesforAirCategory200Bird.values()[0]);
+      marshalOne(SubcategoriesforAirCategory201Insect.values()[0]);
+      marshalOne(SubcategoriesforAirCategory202Mammal.values()[0]);
+      marshalOne(SubcategoriesforLandCategory200Mammal.values()[0]);
+      marshalOne(SubcategoriesforLandCategory201Reptile.values()[0]);
+      marshalOne(SubcategoriesforLandCategory202Amphibian.values()[0]);
+      marshalOne(SubcategoriesforLandCategory203Insect.values()[0]);
+      marshalOne(SubcategoriesforLandCategory204Arachnid.values()[0]);
+      marshalOne(SubcategoriesforLandCategory205Mollusk.values()[0]);
+      marshalOne(SubcategoriesforLandCategory206Marsupial.values()[0]);
+      marshalOne(SubcategoriesforSubsurfaceCategory200Fish.values()[0]);
+      marshalOne(SubcategoriesforSubsurfaceCategory201Mammal.values()[0]);
+      marshalOne(SubcategoriesforSubsurfaceCategory202Mollusk.values()[0]);
+      marshalOne(SubcategoriesforSubsurfaceCategory203Crustacean.values()[0]);
+      marshalOne(SubcategoriesforSubsurfaceCategory204Insect.values()[0]);
+
+      marshalOne(SupplyDomain.values()[0]);
+      marshalOne(SupplyFuelType.values()[0]);
+
+      marshalOne(SurveillanceStatus.values()[0]);
+      marshalOne(TCASACASBasicAdvancedIndicator.values()[0]);
+      marshalOne(TCASACASIndicator.values()[0]);
+      marshalOne(TCASACASSoftwareVersion.values()[0]);
+      marshalOne(TCASACASType.values()[0]);
+      marshalOne(TCASIIIType.values()[0]);
+      marshalOne(TILinkType.values()[0]);
+      marshalOne(TimeTypeSource.values()[0]);
+      marshalOne(TransferControlTransferType.values()[0]);
+      marshalOne(TransmissionIndicator.values()[0]);
+      marshalOne(TransmitterAntennaPatternReferenceSystem.values()[0]);
+      marshalOne(TransmitterAntennaPatternType.values()[0]);
+      marshalOne(TransmitterCryptoSystem.values()[0]);
+      marshalOne(TransmitterDetailAmplitudeModulation.values()[0]);
+      marshalOne(TransmitterDetailAmplitudeandAngleModulation.values()[0]);
+      marshalOne(TransmitterDetailAnglemodulation.values()[0]);
+      marshalOne(TransmitterDetailCarrierPhaseShiftModulation.values()[0]);
+      marshalOne(TransmitterDetailCombinationModulation.values()[0]);
+      marshalOne(TransmitterDetailPulseModulation.values()[0]);
+      marshalOne(TransmitterDetailSATCOMModulation.values()[0]);
+      marshalOne(TransmitterDetailUnmodulatedModulation.values()[0]);
+      marshalOne(TransmitterInputSource.values()[0]);
+      marshalOne(TransmitterMajorModulation.values()[0]);
+      marshalOne(TransmitterModulationTypeSystem.values()[0]);
+      marshalOne(TransmitterTransmitState.values()[0]);
+      marshalOne(TransponderInterrogatorIndicator.values()[0]);
+      marshalOne(TurnRateSource.values()[0]);
+      marshalOne(UAAcousticEmitterSystemFunction.values()[0]);
+      marshalOne(UAAcousticSystemName.values()[0]);
+      marshalOne(UAActiveEmissionParameterIndex.values()[0]);
+      marshalOne(UAAdditionalPassiveActivityParameterIndex.values()[0]);
+      marshalOne(UAPassiveParameterIndex.values()[0]);
+
+      marshalOne(UAPropulsionPlantConfigurationConfiguration.values()[0]);
+      marshalOne(UAScanPattern.values()[0]);
+      marshalOne(UAStateChangeUpdateIndicator.values()[0]);
+      marshalOne(VariableParameterRecordType.values()[0]);
+      marshalOne(VariableRecordType.values()[0]);
+      marshalOne(VariantsforAirCategory200Bird.values()[0]);
+      marshalOne(VariantsforLandCategoriesReptilesAmphibiansInsectsandArachnids.values()[0]);
+      marshalOne(VariantsforSubsurfaceCategory201Mammal.values()[0]);
+
+      //System.out.println("Testing BitSets");
+      /* DisBitSets which were taken from the alphabetical list above where the spaces are */
+      // Testing import of particular Bits class
+      marshalOne(new AirPlatformAppearance(AirPlatformAppearance.AFTERBURNER_ON, 1), "17");
+
+      marshalOne(new AirPlatformAppearance().set(AirPlatformAppearance.CANOPY_TROOP_DOOR, AppearanceCanopy.REAR_CANOPY_RIGHT_TROOP_DOOR_OPEN.getValue()), "9 3bitslen = 5");
+
+      marshalOne(new ArealObjectAppearanceMinefield().set(ArealObjectAppearanceMinefield.BREACH_STATE, 1), "");
+      marshalOne(new CulturalFeatureAppearance().set(CulturalFeatureAppearance.DAMAGE, 1), "");
+      marshalOne(new CulturalFeatureCapabilities().set(CulturalFeatureCapabilities.IED_PRESENCE_INDICATOR, 1), "");
+      marshalOne(new DEDamageDescriptionComponentVisualDamageStatus().set(DEDamageDescriptionComponentVisualDamageStatus.IS_FIRE_PRESENT, 1), "");
+      marshalOne(new DEFireFlags().set(DEFireFlags.STATE_UPDATE_FLAG, 1), "");
+      marshalOne(new EnvironmentalAppearance().set(EnvironmentalAppearance.DENSITY, 1), "");
+
+      marshalOne(new EnvironmentalAppearance().set(EnvironmentalAppearance.DENSITY, 3).set(EnvironmentalAppearance.IS_FROZEN, 1), "");
+
+      marshalOne(new EnvironmentalCapabilities().set(EnvironmentalCapabilities.IED_PRESENCE_INDICATOR, 1), "");
+      marshalOne(new EnvironmentalProcessEnvironmentStatus().set(EnvironmentalProcessEnvironmentStatus.IS_ACTIVE, 1), "");
+      marshalOne(new ExpendableAppearance().set(ExpendableAppearance.DAMAGE, 1), "");
+      marshalOne(new ExpendableCapabilities().set(ExpendableCapabilities.RESERVED, 1), "");
+      marshalOne(new LandPlatformAppearance().set(LandPlatformAppearance.BLACKOUT_BRAKE_LIGHTS_ON, 1), "");
+      marshalOne(new LandPlatformCapabilities().set(LandPlatformCapabilities.AMMUNITION_SUPPLY, 1), "");
+      marshalOne(new LifeFormsAppearance().set(LifeFormsAppearance.CAMOUFLAGE_TYPE, 1), "");
+      marshalOne(new LifeFormsCapabilities().set(LifeFormsCapabilities.AMMUNITION_SUPPLY, 1), "");
+      marshalOne(new LinearObjectAppearanceExhaustSmoke().set(LinearObjectAppearanceExhaustSmoke.CHEMICAL_TYPE, 1), "");
+      marshalOne(new LinearObjectAppearanceMinefieldLaneMarker().set(LinearObjectAppearanceMinefieldLaneMarker.VISIBLE_SIDE, 1), "");
+      marshalOne(new LinearObjectAppearanceSpeedBump().set(LinearObjectAppearanceSpeedBump.COLOR, 1), "");
+      marshalOne(new LinearObjectAppearanceTankDitchAndConcertinaWire().set(LinearObjectAppearanceTankDitchAndConcertinaWire.BREACH_LENGTH, 1), "");
+      marshalOne(new LinearObjectAppearanceWire().set(LinearObjectAppearanceWire.COLOR, 1), "");
+      marshalOne(new MinefieldDataFusing().set(MinefieldDataFusing.HAS_ANTI_HANDLING_DEVICE, 1), "");
+      marshalOne(new MinefieldDataPaintScheme().set(MinefieldDataPaintScheme.ALGAE, 1), "");
+      marshalOne(new MinefieldStateAppearanceBitMap().set(MinefieldStateAppearanceBitMap.ACTIVE_STATUS, 1), "");
+      marshalOne(new MunitionAppearance().set(MunitionAppearance.COVER_SHROUD_STATUS, 1), "");
+      marshalOne(new MunitionCapabilities().set(MunitionCapabilities.IED_PRESENCE_INDICATOR, 1), "");
+      marshalOne(new NonHumanLifeFormsAppearance().set(NonHumanLifeFormsAppearance.HEALTH, 1), "");
+      marshalOne(new ObjectStateAppearanceGeneral().set(ObjectStateAppearanceGeneral.DAMAGE, 1), "");
+      marshalOne(new ObjectStateModificationArealObject().set(ObjectStateModificationArealObject.IS_LOCATION_MODIFIED, 1), "");
+      marshalOne(new ObjectStateModificationLinearObject().set(ObjectStateModificationLinearObject.IS_LOCATION_MODIFIED, 1), "");
+      marshalOne(new ObjectStateModificationPointObject().set(ObjectStateModificationPointObject.IS_LOCATION_MODIFIED, 1), "");
+      marshalOne(new PointObjectAppearanceAirGroundBurst().set(PointObjectAppearanceAirGroundBurst.CHEMICAL_TYPE, 1), "");
+      marshalOne(new PointObjectAppearanceBuildingStructure().set(PointObjectAppearanceBuildingStructure.COLOR, 1), "");
+      marshalOne(new PointObjectAppearanceCrater().set(PointObjectAppearanceCrater.BREACH_STATE, 1), "");
+      marshalOne(new PointObjectAppearanceDisturbedEarthRoad().set(PointObjectAppearanceDisturbedEarthRoad.CONTRAST, 1), "");
+      marshalOne(new PointObjectAppearanceLogCribAbatisEtAl().set(PointObjectAppearanceLogCribAbatisEtAl.BREACH_STATE, 1), "");
+      marshalOne(new PointObjectAppearancePothole().set(PointObjectAppearancePothole.DEPTH, 1), "");
+      marshalOne(new PointObjectAppearanceRibbonBridge().set(PointObjectAppearanceRibbonBridge.NUMBER_OF_SEGMENTS, 1), "");
+      marshalOne(new PointObjectAppearanceTree().set(PointObjectAppearanceTree.LEAF_COVERAGE, 1), "");
+      marshalOne(new RadioAppearance().set(RadioAppearance.IS_FROZEN, 1), "");
+      marshalOne(new RadioCapabilities().set(RadioCapabilities.RESERVED, 1), "");
+      marshalOne(new SensorEmitterAppearance().set(SensorEmitterAppearance.ANTENNA_RAISED, 1), "");
+      marshalOne(new SensorEmitterCapabilities().set(SensorEmitterCapabilities.IED_PRESENCE_INDICATOR, 1), "");
+      marshalOne(new SpacePlatformAppearance().set(SpacePlatformAppearance.DAMAGE, 1), "");
+      marshalOne(new SpacePlatformCapabilities().set(SpacePlatformCapabilities.AMMUNITION_SUPPLY, 1), "");
+      marshalOne(new StopFreezeFrozenBehavior().set(StopFreezeFrozenBehavior.PROCESS_UPDATES, 1), "");
+      marshalOne(new SubsurfacePlatformAppearance().set(SubsurfacePlatformAppearance.DAMAGE, 1), "");
+      marshalOne(new SubsurfacePlatformCapabilities().set(SubsurfacePlatformCapabilities.AMMUNITION_SUPPLY, 1), "");
+      marshalOne(new SupplyAppearance().set(SupplyAppearance.DAMAGE, 1), "");
+      marshalOne(new SupplyCapabilities().set(SupplyCapabilities.AMMUNITION_SUPPLY, 1), "");
+      marshalOne(new SurfacePlatformAppearance().set(SurfacePlatformAppearance.DAMAGE, 1), "");
+      marshalOne(new SurfacePlatformCapabilities().set(SurfacePlatformCapabilities.AMMUNITION_SUPPLY, 1), "");
+      marshalOne(new UAPropulsionPlantConfiguration().set(UAPropulsionPlantConfiguration.CONFIGURATION, 1), "");
+
+      // classes with no enumerated bit positions
+      marshalOne(new LinearObjectAppearanceBreach().set(0, 1, 1), "");
+      marshalOne(new PointObjectAppearanceBuildingRubble().set(0, 1, 1), "");
+      marshalOne(new PointObjectAppearanceStationaryBridgeAndAVLB().set(0, 1, 1), "");
     }
-    int count = 0;
-
-    private void marshalOne(Enum en) throws Throwable
-    {
-        Throwable thr = null;
-        try {
-            Exception ex = null;
-            ByteBuffer bb = ByteBuffer.allocate(100);
-            marshalIt(en, bb);
-            int sz = getMarshalSize(en);
-            //temp assertEquals(sz, bb.position(), "Marshalled array should be " + sz + " bytes long");
-          //  dump(en, sz, bb);
-        }
-        catch (Throwable t) {
-            thr = t;
-        }
-  //temp      assertNull(thr, "Exception should be null if successful marshal");
-        count++;
+    catch (Throwable t) {
+      thr = t;
     }
-
-    private void marshalIt(Enum en, ByteBuffer bb) throws Throwable
-    {
-        Class c = en.getClass();
-        Method meth = c.getDeclaredMethod("marshal", new Class[]{ByteBuffer.class});
-        meth.invoke(en, bb);
-    }
-
-    private int getMarshalSize(Enum en) throws Throwable
-    {
-        Class c = en.getClass();
-        Method meth = c.getDeclaredMethod("getMarshalledSize", (Class[]) null);
-        return (Integer) meth.invoke(en, (Object[]) null);
-    }
-
-    private void marshalOne(DisBitSet bs, String s) throws Throwable
-    {
-        Throwable thr = null;
-        try {
-            Exception ex = null;
-            ByteBuffer bb = ByteBuffer.allocate(100);
-            bs.marshal(bb);
-            int sz = bs.getMarshalledSize();
-            assertEquals(sz, bb.position(), "Marshalled array should be " + sz + " bytes long");
-            System.out.print(s+" ");
-         //   dump(bs, bb);
-        }
-        catch (Throwable t) {
-            thr = t;
-        }
-        //tempassertNull(thr, "Exception should be null if successful marshal");
-        count++;
-    }
-    
-    private void dump(Enum en, int sz, ByteBuffer bb)
-    {
-        System.out.print(en.getClass().getSimpleName() + "(" + sz + "): ");
-        dumpCommon(bb);
+    if (thr != null)
+      thr.printStackTrace();
+    assertNull(thr, "Exception should be null if successful marshal");
+    //System.out.println(""+count+" enums and disbitsets tested");
+  }
+  int count = 0;
+
+  private void marshalOne(Enum en) throws Throwable
+  {
+    ByteBuffer bb = ByteBuffer.allocate(100);
+    marshalIt(en, bb);
+    int sz = getMarshalSize(en);
+    assertEquals(sz, bb.position(), "Marshalled array should be " + sz + " bytes long");
+    //  dump(en, sz, bb);
+
+    count++;
+  }
+
+  private void marshalIt(Enum en, ByteBuffer bb) throws Throwable
+  {
+    Class c = en.getClass();
+    Method meth = c.getDeclaredMethod("marshal", new Class[]{ByteBuffer.class});
+    meth.invoke(en, bb);
+  }
+
+  private int getMarshalSize(Enum en) throws Throwable
+  {
+    Class c = en.getClass();
+    Method meth = c.getDeclaredMethod("getMarshalledSize", (Class[]) null);
+    return (Integer) meth.invoke(en, (Object[]) null);
+  }
+
+  private void marshalOne(DisBitSet bs, String s) throws Throwable
+  {
+    Throwable thr = null;
+    try {
+      Exception ex = null;
+      ByteBuffer bb = ByteBuffer.allocate(100);
+      bs.marshal(bb);
+      int sz = bs.getMarshalledSize();
+      assertEquals(sz, bb.position(), "Marshalled array should be " + sz + " bytes long");
+      //System.out.print(s + " ");
+      //   dump(bs, bb);
     }
-
-    private void dump(DisBitSet bs, ByteBuffer bb)
-    {
-        System.out.print(bs.getClass().getSimpleName() + "(" + bs.getMarshalledSize() + "): ");
-        dumpCommon(bb);
+    catch (Throwable t) {
+      thr = t;
     }
-
-    private void dumpCommon(ByteBuffer bb)
-    {
-        for (int i = 0; i < bb.position(); i++) {
-            System.out.print(String.format("%02X ", bb.array()[i]));
-        }
-        System.out.println();
+    //tempassertNull(thr, "Exception should be null if successful marshal");
+    count++;
+  }
+
+  private void dump(Enum en, int sz, ByteBuffer bb)
+  {
+    System.out.println(en.getClass().getSimpleName() + "(" + sz + "): ");
+    dumpCommon(bb);
+  }
+
+  private void dump(DisBitSet bs, ByteBuffer bb)
+  {
+    System.out.println(bs.getClass().getSimpleName() + "(" + bs.getMarshalledSize() + "): ");
+    dumpCommon(bb);
+  }
+
+  private void dumpCommon(ByteBuffer bb)
+  {
+    for (int i = 0; i < bb.position(); i++) {
+      System.out.print(String.format("%02X ", bb.array()[i]));
     }
+    System.out.println();
+  }
 
 }
diff --git a/test/edu/nps/moves/dis7/NullFieldsMarshallTest.java b/test/edu/nps/moves/dis7/NullFieldsEntityMarshallTest.java
similarity index 78%
rename from test/edu/nps/moves/dis7/NullFieldsMarshallTest.java
rename to test/edu/nps/moves/dis7/NullFieldsEntityMarshallTest.java
index 5d42f04040d99e8d04be78635c0deee6979a5f48..d24ce281ec39772074a3735d1c359b3e4386d26b 100644
--- a/test/edu/nps/moves/dis7/NullFieldsMarshallTest.java
+++ b/test/edu/nps/moves/dis7/NullFieldsEntityMarshallTest.java
@@ -1,3 +1,7 @@
+/**
+ * Copyright (c) 2008-2019, MOVES Institute, Naval Postgraduate School. All rights reserved.
+ * This work is licensed under the BSD open source license, available at https://www.movesinstitute.org/licenses/bsd.html
+ */
 /**
  * NullFieldsMarshallTest()); created on May 20, 2019 MOVES Institute Naval Postgraduate School, Monterey, CA, USA www.nps.edu
  *
@@ -11,14 +15,16 @@ import java.nio.ByteBuffer;
 import org.junit.jupiter.api.*;
 import static org.junit.jupiter.api.Assertions.*;
 
-@DisplayName("Null Fields Entity Marshal")
-public class NullFieldsMarshallTest
+@DisplayName("Null Fields Entity Marshall Test")
+public class NullFieldsEntityMarshallTest
 {
     LAV_105 lav105;
 
     @BeforeAll
     public static void beforeAllTests()
-    {}
+    {
+      System.out.println("NullFieldsEntityMarshallTest");
+    }
     
     @AfterAll
     public static void afterAllTests()
@@ -39,21 +45,19 @@ public class NullFieldsMarshallTest
     @Test
     public void testNoSpecificNoExtraMarshal()
     {
-        System.out.println("Test no specific, no extra marshal");
         Exception ex=null;
         ByteBuffer bb = ByteBuffer.allocate(100);
         try {
-            dumpET(lav105);
+            //dumpET(lav105);
             lav105.marshal(bb);
-            dumpBb(bb);
-            System.out.println("Test complete, no exception");
+            //dumpBb(bb);
         }
         catch(Exception e) {
           System.err.println(e.getClass().getSimpleName()+": "+e.getLocalizedMessage());
             ex = e;
         }
-   //temp     assertNull(ex,"Exception should be null if successful marshal");
-   //temp     assertEquals(8, bb.position(), "Marshalled array should be 8 bytes long");
+        assertNull(ex,"Exception should be null if successful marshal");
+        assertEquals(8, bb.position(), "Marshalled array should be 8 bytes long");
     }
     
     @Test
@@ -97,7 +101,7 @@ public class NullFieldsMarshallTest
     
     public static void main(String[] args)
     {
-      NullFieldsMarshallTest inst = new NullFieldsMarshallTest();
+      NullFieldsEntityMarshallTest inst = new NullFieldsEntityMarshallTest();
       inst.setUp();
       inst.testNoSpecificNoExtraMarshal();
     }
diff --git a/test/edu/nps/moves/dis7/ObjectTypeMarshallTest.java b/test/edu/nps/moves/dis7/ObjectTypeMarshallTest.java
index 66605af6e3dd1fe407cdbf40f3ccc4f6cd81a68a..8e2aa36c1b388ebeb0e822c280aa99f86c63ce3e 100644
--- a/test/edu/nps/moves/dis7/ObjectTypeMarshallTest.java
+++ b/test/edu/nps/moves/dis7/ObjectTypeMarshallTest.java
@@ -1,11 +1,9 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
+/**
+ * Copyright (c) 2008-2019, MOVES Institute, Naval Postgraduate School. All rights reserved.
+ * This work is licensed under the BSD open source license, available at https://www.movesinstitute.org/licenses/bsd.html
  */
 package edu.nps.moves.dis7;
 
-//import edu.nps.moves.dis.ObjectType;
 import edu.nps.moves.dis7.objecttypes.LinearObject.Culturalfeature.Tracks_Tire.Tracks_Tire;
 import edu.nps.moves.dis7.objecttypes.LinearObject.Obstacle.ConcertinaWire._2_Roll._2_Roll;
 import java.nio.ByteBuffer;
@@ -17,7 +15,10 @@ import static org.junit.jupiter.api.Assertions.assertNull;
 public class ObjectTypeMarshallTest
 {
     @BeforeAll
-    public static void setUpClass(){}
+    public static void setUpClass()
+    {
+      System.out.println("ObjectTypeMarshallTest");
+    }
     @AfterAll
     public static void tearDownClass(){}
     @BeforeEach
@@ -32,7 +33,6 @@ public class ObjectTypeMarshallTest
         try {
             _2_Roll roll2 = new _2_Roll();
             common(roll2);
-            System.out.println("testGoodMarshal successful");
         }
         catch (Throwable t) {
             thr = t;
@@ -47,7 +47,6 @@ public class ObjectTypeMarshallTest
         try {
             Tracks_Tire tracksTire = new Tracks_Tire();
             common(tracksTire);
-            System.out.println("TestNoSubCategory successful");
         }
         catch (Throwable t) {
             thr = t;
diff --git a/test/edu/nps/moves/dis7/TestPduFactory1.java b/test/edu/nps/moves/dis7/PduFactoryTest.java
similarity index 93%
rename from test/edu/nps/moves/dis7/TestPduFactory1.java
rename to test/edu/nps/moves/dis7/PduFactoryTest.java
index 255323c9dae1e7dd6e54ba37d18230a2d7e9971f..e7843c7ee1cabbc16df6ccd40e831e9cf8cce6dc 100644
--- a/test/edu/nps/moves/dis7/TestPduFactory1.java
+++ b/test/edu/nps/moves/dis7/PduFactoryTest.java
@@ -1,3 +1,7 @@
+/**
+ * Copyright (c) 2008-2019, MOVES Institute, Naval Postgraduate School. All rights reserved.
+ * This work is licensed under the BSD open source license, available at https://www.movesinstitute.org/licenses/bsd.html
+ */
 package edu.nps.moves.dis7;
 
 /**
@@ -8,17 +12,17 @@ package edu.nps.moves.dis7;
 
 import edu.nps.moves.dis7.enumerations.Country;
 import edu.nps.moves.dis7.util.PduFactory;
-import java.util.Arrays;
 import org.junit.jupiter.api.*;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
-@DisplayName("PduFactory All Pdus Create")
+@DisplayName("Pdu Factory Test")
 
-public class TestPduFactory1
+public class PduFactoryTest
 {
     @BeforeAll
     public static void beforeAllTests()
     {
+      System.out.println("PduFactoryTest");
     }
 
     @AfterAll
diff --git a/test/edu/nps/moves/dis7/SignalPdusTest.java b/test/edu/nps/moves/dis7/SignalPdusTest.java
index 335e0fed5e4202919c19d8713b53280ed74c7f94..b4a62c7e23fd0d91c444a6c2b5871b539c0c94d3 100644
--- a/test/edu/nps/moves/dis7/SignalPdusTest.java
+++ b/test/edu/nps/moves/dis7/SignalPdusTest.java
@@ -1,19 +1,14 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
+/**
+ * Copyright (c) 2008-2019, MOVES Institute, Naval Postgraduate School. All rights reserved.
+ * This work is licensed under the BSD open source license, available at https://www.movesinstitute.org/licenses/bsd.html
  */
 package edu.nps.moves.dis7;
 
-import edu.nps.moves.dis7.enumerations.*;
 import edu.nps.moves.dis7.util.DisNetworking;
 import edu.nps.moves.dis7.util.PduFactory;
 import java.io.IOException;
-import java.lang.reflect.Method;
-import java.nio.ByteBuffer;
 import org.junit.jupiter.api.*;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.*;
 
 @DisplayName("Signal Pdus Test")
 public class SignalPdusTest
@@ -21,6 +16,7 @@ public class SignalPdusTest
   @BeforeAll
   public static void setUpClass()
   {
+    System.out.println("SignalPdusTest");
   }
 
   @AfterAll
@@ -62,14 +58,14 @@ public class SignalPdusTest
     setUpReceiver();
 
     try {
-      Thread.sleep(250l); // make sure receiver is listening
+      Thread.sleep(2000l); //250l); // make sure receiver is listening
       DisNetworking disnet = new DisNetworking();
       disnet.sendPdu(sigPdu);
       disnet.sendPdu(sigPdu2);
       disnet.sendPdu(isig);
       disnet.sendPdu(isig2);
       
-      Thread.sleep(1000l); //(180*1000l));//waiter.wait();
+      Thread.sleep(3000l); //1000l); //(180*1000l));//waiter.wait();
     }
     catch (Exception ex) {
       System.err.println("Error sending Multicast: " + ex.getLocalizedMessage());
@@ -78,10 +74,10 @@ public class SignalPdusTest
 
     // Compare
     // If we made it this far, we've sent and received.  Now compare.
-    if (receivedPdu.equals(sigPdu))
-      System.out.println("passed test");
-    else
-      System.err.println("failed test");
+    assertTrue(receivedPdu != null, "No response from network");
+    assertTrue(receivedPdu.equals(sigPdu),"Sent and received pdus not identical");
+    
+    System.out.println("SignalPdusTest finished");
   }
 
   private void setUpReceiver()
diff --git a/testlibs/apiguardian-api-1.1.0.jar b/testlibs/apiguardian-api-1.1.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..e6fcead36fe0c8f7920f8f7abc532a62d51350c4
Binary files /dev/null and b/testlibs/apiguardian-api-1.1.0.jar differ
diff --git a/testlibs/junit-platform-commons-1.5.1.jar b/testlibs/junit-platform-commons-1.5.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..f941792ef1b10be01cf1e168ad2d8b854c7745ae
Binary files /dev/null and b/testlibs/junit-platform-commons-1.5.1.jar differ
diff --git a/testlibs/junit-platform-console-1.5.1.jar b/testlibs/junit-platform-console-1.5.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..c95785af33907b2e5ed6c09b995d6a2e26e78ca7
Binary files /dev/null and b/testlibs/junit-platform-console-1.5.1.jar differ
diff --git a/testlibs/junit-platform-engine-1.5.1.jar b/testlibs/junit-platform-engine-1.5.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..34d024fd16909d73b8d9b452b986aa6adabd090d
Binary files /dev/null and b/testlibs/junit-platform-engine-1.5.1.jar differ
diff --git a/testlibs/junit-platform-launcher-1.5.1.jar b/testlibs/junit-platform-launcher-1.5.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..829fa2c147056e542000d22117e0436633524b94
Binary files /dev/null and b/testlibs/junit-platform-launcher-1.5.1.jar differ
diff --git a/testlibs/junit-platform-reporting-1.5.1.jar b/testlibs/junit-platform-reporting-1.5.1.jar
new file mode 100644
index 0000000000000000000000000000000000000000..45329860b2fc080e4ec5691f3e00edb41cc86a5f
Binary files /dev/null and b/testlibs/junit-platform-reporting-1.5.1.jar differ
diff --git a/testlibs/opentest4j-1.2.0.jar b/testlibs/opentest4j-1.2.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..d5006361a412f458525afc317aecb067dd093d0a
Binary files /dev/null and b/testlibs/opentest4j-1.2.0.jar differ