diff --git a/assignments/nbproject/project.xml b/assignments/nbproject/project.xml
index ec9c9401e07d97eb2d28c832cc9985585aeb9f06..d7234beae9aa3ea90d012607e6919204e1a4942a 100644
--- a/assignments/nbproject/project.xml
+++ b/assignments/nbproject/project.xml
@@ -1,43 +1,44 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://www.netbeans.org/ns/project/1">
-    <type>org.netbeans.modules.java.j2seproject</type>
-    <configuration>
-        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
-            <name>Networked Graphics MV3500 assignments</name>
-            <source-roots>
-                <root id="src.dir"/>
-            </source-roots>
-            <test-roots>
-                <root id="test.src.dir"/>
-            </test-roots>
-        </data>
-        <spellchecker-wordlist xmlns="http://www.netbeans.org/ns/spellchecker-wordlist/1">
-            <word>accessor</word>
-            <word>autogeneration</word>
-            <word>classpath</word>
-            <word>Cygwin</word>
-            <word>deliverables</word>
-            <word>docx</word>
-            <word>https</word>
-            <word>interarrival</word>
-            <word>javadoc</word>
-            <word>localhost</word>
-            <word>multicast</word>
-            <word>Netbeans</word>
-            <word>netcat</word>
-            <word>NPS</word>
-            <word>pdu</word>
-            <word>README</word>
-            <word>simkit</word>
-            <word>simulationists</word>
-            <word>SISO</word>
-            <word>subpackage</word>
-            <word>teardown</word>
-            <word>txt</word>
-            <word>UML</word>
-            <word>unicast</word>
-            <word>wikipedia</word>
-            <word>Wireshark</word>
-        </spellchecker-wordlist>
-    </configuration>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.java.j2seproject</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
+            <name>Networked Graphics MV3500 assignments</name>
+            <explicit-platform explicit-source-supported="true"/>
+            <source-roots>
+                <root id="src.dir"/>
+            </source-roots>
+            <test-roots>
+                <root id="test.src.dir"/>
+            </test-roots>
+        </data>
+        <spellchecker-wordlist xmlns="http://www.netbeans.org/ns/spellchecker-wordlist/1">
+            <word>accessor</word>
+            <word>autogeneration</word>
+            <word>classpath</word>
+            <word>Cygwin</word>
+            <word>deliverables</word>
+            <word>docx</word>
+            <word>https</word>
+            <word>interarrival</word>
+            <word>javadoc</word>
+            <word>localhost</word>
+            <word>multicast</word>
+            <word>Netbeans</word>
+            <word>netcat</word>
+            <word>NPS</word>
+            <word>pdu</word>
+            <word>README</word>
+            <word>simkit</word>
+            <word>simulationists</word>
+            <word>SISO</word>
+            <word>subpackage</word>
+            <word>teardown</word>
+            <word>txt</word>
+            <word>UML</word>
+            <word>unicast</word>
+            <word>wikipedia</word>
+            <word>Wireshark</word>
+        </spellchecker-wordlist>
+    </configuration>
+</project>
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Williams/Assemblies/dis7/Williams_ArrivalProcessOpenDis7Assembly.xml b/assignments/src/MV3500Cohort2024JulySeptember/projects/Williams/Assemblies/dis7/Williams_ArrivalProcessOpenDis7Assembly.xml
new file mode 100644
index 0000000000000000000000000000000000000000..597e3466d1cbf16277106c2a88056fdaf381ce4b
--- /dev/null
+++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Williams/Assemblies/dis7/Williams_ArrivalProcessOpenDis7Assembly.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<SimkitAssembly name="ArrivalProcessOpenDis7Assembly" version="1.0" package="dis7" xsi:noNamespaceSchemaLocation="http://diana.nps.edu/Simkit/assembly.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <SimEntity name="aPOpenDis7" type="dis7.ArrivalProcessOpenDis7" description="">
+        <TerminalParameter name="address" value="" type="java.lang.String"/>
+        <TerminalParameter name="port" value="-1" type="int"/>
+        <FactoryParameter factory="simkit.random.RandomVariateFactory" type="simkit.random.RandomVariate">
+            <TerminalParameter name="" value="Exponential" type="String"/>
+            <TerminalParameter name="" value="1.7" type="Object..."/>
+        </FactoryParameter>
+        <Coordinate x="220.0" y="210.0"/>
+    </SimEntity>
+    <PropertyChangeListener name="numArrivalsStat" type="simkit.stat.SimpleStatsTimeVarying" mode="replicationStat" meanStatistics="false" countStatistics="true" description="">
+        <TerminalParameter name="p[0] : " value="N" type="java.lang.String"/>
+        <Coordinate x="220.0" y="330.0"/>
+    </PropertyChangeListener>
+    <PropertyChangeListener name="numEntityCreationsStat" type="simkit.stat.SimpleStatsTimeVarying" mode="replicationStat" meanStatistics="false" countStatistics="true" description="">
+        <TerminalParameter name="p[0] : " value="C" type="java.lang.String"/>
+        <Coordinate x="220.0" y="80.0"/>
+    </PropertyChangeListener>
+    <PropertyChangeListener name="numEntityRemovalsStat" type="simkit.stat.SimpleStatsTimeVarying" mode="replicationStat" meanStatistics="false" countStatistics="true" description="">
+        <TerminalParameter name="p[0] : " value="R" type="java.lang.String"/>
+        <Coordinate x="380.0" y="210.0"/>
+    </PropertyChangeListener>
+    <PropertyChangeListenerConnection property="N" listener="numArrivalsStat" source="aPOpenDis7" description=""/>
+    <PropertyChangeListenerConnection property="C" listener="numEntityCreationsStat" source="aPOpenDis7" description=""/>
+    <PropertyChangeListenerConnection property="R" listener="numEntityRemovalsStat" source="aPOpenDis7" description=""/>
+    <Output entity="aPOpenDis7"/>
+    <Schedule stopTime="100.0" verbose="false" saveReplicationData="false"/>
+</SimkitAssembly>
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Williams/Assemblies/dis7/Williams_SimpleServerDis7Assembly.xml b/assignments/src/MV3500Cohort2024JulySeptember/projects/Williams/Assemblies/dis7/Williams_SimpleServerDis7Assembly.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5aac321ee51ee75c2eb1c78ec7618b2f475737d6
--- /dev/null
+++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Williams/Assemblies/dis7/Williams_SimpleServerDis7Assembly.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<SimkitAssembly name="SimpleServerDis7Assembly" version="1.0" package="dis7" xsi:noNamespaceSchemaLocation="http://diana.nps.edu/Simkit/assembly.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <SimEntity name="arrivalProcessOpenDis7" type="SimkitOpenDis7Examples.ArrivalProcessOpenDis7" description="">
+        <FactoryParameter factory="simkit.random.RandomVariateFactory" type="simkit.random.RandomVariate">
+            <TerminalParameter name="" value="Uniform" type="String"/>
+            <TerminalParameter name="" value="0.9, 2.2" type="Object..."/>
+        </FactoryParameter>
+        <Coordinate x="90.0" y="200.0"/>
+    </SimEntity>
+    <SimEntity name="simpleServer" type="SimkitOpenDis7Examples.SimpleServer" description="">
+        <TerminalParameter name="p[0] : " value="1" type="int"/>
+        <FactoryParameter factory="simkit.random.RandomVariateFactory" type="simkit.random.RandomVariate">
+            <TerminalParameter name="" value="Gamma" type="String"/>
+            <TerminalParameter name="" value="1.7, 1.8" type="Object..."/>
+        </FactoryParameter>
+        <Coordinate x="310.0" y="200.0"/>
+    </SimEntity>
+    <PropertyChangeListener name="numInQueueStat" type="simkit.stat.SimpleStatsTimeVarying" mode="replicationStat" meanStatistics="true" countStatistics="false" description="">
+        <TerminalParameter name="p[0] : " value="numberInQueue" type="java.lang.String"/>
+        <Coordinate x="310.0" y="80.0"/>
+    </PropertyChangeListener>
+    <PropertyChangeListener name="numAvailServersStat" type="simkit.stat.SimpleStatsTimeVarying" mode="replicationStat" meanStatistics="true" countStatistics="false" description="">
+        <TerminalParameter name="p[0] : " value="numberAvailableServers" type="java.lang.String"/>
+        <Coordinate x="510.0" y="200.0"/>
+    </PropertyChangeListener>
+    <PropertyChangeListener name="numArrivalsStat" type="simkit.stat.SimpleStatsTimeVarying" mode="replicationStat" meanStatistics="false" countStatistics="true" description="">
+        <TerminalParameter name="p[0] : " value="numberArrivals" type="java.lang.String"/>
+        <Coordinate x="90.0" y="80.0"/>
+    </PropertyChangeListener>
+    <PropertyChangeListener name="numServedStat" type="simkit.stat.SimpleStatsTimeVarying" mode="replicationStat" meanStatistics="false" countStatistics="true" description="">
+        <TerminalParameter name="p[0] : " value="numberServed" type="java.lang.String"/>
+        <Coordinate x="310.0" y="350.0"/>
+    </PropertyChangeListener>
+    <SimEventListenerConnection listener="simpleServer" source="arrivalProcessOpenDis7"/>
+    <PropertyChangeListenerConnection property="numberInQueue" listener="numInQueueStat" source="simpleServer" description=""/>
+    <PropertyChangeListenerConnection property="numberAvailableServers" listener="numAvailServersStat" source="simpleServer" description=""/>
+    <PropertyChangeListenerConnection property="numberArrivals" listener="numArrivalsStat" source="arrivalProcessOpenDis7" description=""/>
+    <PropertyChangeListenerConnection property="numberServed" listener="numServedStat" source="simpleServer" description=""/>
+    <Output entity="arrivalProcessOpenDis7"/>
+    <Output entity="simpleServer"/>
+    <Schedule stopTime="100000.0" verbose="false" saveReplicationData="false"/>
+</SimkitAssembly>
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Williams/EventGraphs/dis7/Williams_ArrivalProcessOpenDis7.xml b/assignments/src/MV3500Cohort2024JulySeptember/projects/Williams/EventGraphs/dis7/Williams_ArrivalProcessOpenDis7.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f1dd2c6371c7520450a510b6427c2eeb0fb4754d
--- /dev/null
+++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Williams/EventGraphs/dis7/Williams_ArrivalProcessOpenDis7.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<SimEntity name="ArrivalProcessOpenDis7" package="dis7" version="1.0" author="terry" extend="SimkitOpenDis7Examples.run.OpenDisHelper" xsi:noNamespaceSchemaLocation="http://diana.nps.edu/Simkit/simkit.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <Parameter name="address" type="java.lang.String">
+        <Comment>An other than default network address</Comment>
+    </Parameter>
+    <Parameter name="port" type="int">
+        <Comment>An other than default network port</Comment>
+    </Parameter>
+    <Parameter name="tA" type="simkit.random.RandomVariate">
+        <Comment>Inter arrival time</Comment>
+    </Parameter>
+    <StateVariable name="N" type="int">
+        <Comment>Number of arrivals</Comment>
+    </StateVariable>
+    <StateVariable name="C" type="int">
+        <Comment>Number of entity creations</Comment>
+    </StateVariable>
+    <StateVariable name="R" type="int">
+        <Comment>Number of entity removals</Comment>
+    </StateVariable>
+    <Event name="Run" description="This event is fired first to facilitate initialization of all simulation state variables">
+        <Comment>Initialize all state variables</Comment>
+        <StateTransition state="N">
+            <Assignment value="0"/>
+        </StateTransition>
+        <StateTransition state="C">
+            <Assignment value="1"/>
+        </StateTransition>
+        <StateTransition state="R">
+            <Assignment value="0"/>
+        </StateTransition>
+        <Schedule delay="tA.generate()" event="Arrival" priority="DEFAULT"/>
+        <Code></Code>
+        <Coordinate x="50.0" y="70.0"/>
+    </Event>
+    <Event name="Arrival">
+        <Comment>Tallys the number of arrivals and schedules future arrival events with time tA</Comment>
+        <StateTransition state="N">
+            <Assignment value="N + 1"/>
+        </StateTransition>
+        <Schedule delay="tA.generate()" event="Arrival" priority="DEFAULT"/>
+        <Code>int everyTen = 10;
+int oldC = C;
+int oldR = R;
+
+if ((N % everyTen) == 0) {
+    disChannel.removeEntity(entityStatePdu_1.getEntityID());
+    firePropertyChange("R", oldR, R+1);
+} else {
+    disChannel.addEntity(entityStatePdu_1.getEntityID());
+    firePropertyChange("C", oldC, C+1);
+}</Code>
+        <Coordinate x="260.0" y="70.0"/>
+    </Event>
+    <Code></Code>
+</SimEntity>
diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Williams/package-info.java b/assignments/src/MV3500Cohort2024JulySeptember/projects/Williams/package-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..410ebc48b9d276b8c6dfeba2e6af7fb229de3cb7
--- /dev/null
+++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Williams/package-info.java
@@ -0,0 +1,10 @@
+/**
+ * Final project assignments supporting the NPS MOVES MV3500 Networked Graphics course.
+ * 
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
+ * @see java.lang.Package
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
+ */
+
+package MV3500Cohort2024JulySeptember.projects.Williams;