diff --git a/projects/Assignments/AngelBlankFP/EspduReceiverB.java b/projects/Assignments/AngelBlankFP/EspduReceiverB.java
deleted file mode 100644
index d63205138f4f44350d34f10611df6edea73d58fd..0000000000000000000000000000000000000000
--- a/projects/Assignments/AngelBlankFP/EspduReceiverB.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package java.edu.nps.moves.examples;
-
-import java.net.*;
-import java.util.*;
-
-import edu.nps.moves.disutil.*;
-
-import edu.nps.moves.dis.*;
-
-/**
- * Receives PDUs from the network in IEEE format.
- *
- * @author DMcG
- * @version $Id:$
- */
-public class EspduReceiverB {
-
-    /** Max size of a PDU in binary format that we can receive. This is actually
-     * somewhat outdated--PDUs can be larger--but this is a reasonable starting point
-     */
-    public static final int MAX_PDU_SIZE = 8192;
-
-    public static void main(String args[]) {
-        MulticastSocket socket;
-        DatagramPacket packet;
-        InetAddress address;
-        PduFactory pduFactory = new PduFactory();
-
-        try {
-            // Specify the socket to receive data
-            socket = new MulticastSocket(3001);
-            socket.setBroadcast(true);
-       
-            //address = InetAddress.getByName(EspduSender.DEFAULT_MULTICAST_GROUP);
-            //socket.joinGroup(address);
-
-            // Loop infinitely, receiving datagrams
-            while (true) {
-                byte buffer[] = new byte[MAX_PDU_SIZE];
-                packet = new DatagramPacket(buffer, buffer.length);
-
-                socket.receive(packet);
-
-                List<Pdu> pduBundle = pduFactory.getPdusFromBundle(packet.getData());
-                System.out.println("Bundle size is " + pduBundle.size());
-                
-                Iterator it = pduBundle.iterator();
-
-                while(it.hasNext())
-                {
-                    Pdu aPdu = (Pdu)it.next();
-                
-                    System.out.print("got PDU of type: " + aPdu.getClass().getName());
-                    if(aPdu instanceof EntityStatePdu)
-                    {
-                        EntityID eid = ((EntityStatePdu)aPdu).getEntityID();
-                        Vector3Double position = ((EntityStatePdu)aPdu).getEntityLocation();
-                        System.out.print(" EID:[" + eid.getSite() + ", " + eid.getApplication() + ", " + eid.getEntity() + "] ");
-                        System.out.print(" Location in DIS coordinates: [" + position.getX() + ", " + position.getY() + ", " + position.getZ() + "]");
-                    }
-                    System.out.println();
-                } // end trop through PDU bundle
-
-            } // end while
-        } // End try
-        catch (Exception e) {
-
-            System.out.println(e);
-        }
-
-
-    } // end main
-} // end class
diff --git a/projects/Assignments/AngelBlankFP/EspduSenderB.java b/projects/Assignments/AngelBlankFP/EspduSenderB.java
deleted file mode 100644
index 80c46213cf5a45176f3ef35307259118c5bd5f9b..0000000000000000000000000000000000000000
--- a/projects/Assignments/AngelBlankFP/EspduSenderB.java
+++ /dev/null
@@ -1,323 +0,0 @@
-package java.edu.nps.moves.examples;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-import edu.nps.moves.dis.*;
-import edu.nps.moves.disutil.CoordinateConversions;
-import edu.nps.moves.disutil.DisTime;
-
-/**
- * Creates and sends ESPDUs in IEEE binary format. 
- *
- * @author DMcG
- */
-public class EspduSenderB 
-{
-    public static final int NUMBER_TO_SEND = 5000;
-
-    public enum NetworkMode{UNICAST, MULTICAST, BROADCAST};
-
-    /** default multicast group we send on */
-    public static final String DEFAULT_MULTICAST_GROUP="239.1.2.3";
-   
-    /** Port we send on */
-    public static final int    DIS_DESTINATION_PORT = 3000;
-    
-/** Possible system properties, passed in via -Dattr=val
-     * networkMode: unicast, broadcast, multicast
-     * destinationIp: where to send the packet. If in multicast mode, this can be mcast.
-     *                To determine bcast destination IP, use an online bcast address
-     *                caclulator, for example http://www.remotemonitoringsystems.ca/broadcast.php
-     *                If in mcast mode, a join() will be done on the mcast address.
-     * port: port used for both source and destination.
-     * @param args 
-     */
-public static void main(String args[])
-{
-    /** an entity state pdu */
-    EntityStatePdu espdu = new EntityStatePdu();
-    MulticastSocket socket = null;
-    DisTime disTime = DisTime.getInstance();
-    int alternator = -1;
-    
-    // ICBM coordinates for my office
-    double lat = 36.595517; 
-    double lon = -121.877000;
-
-    
-    // Default settings. These are used if no system properties are set. 
-    // If system properties are passed in, these are over ridden.
-    int port = DIS_DESTINATION_PORT;
-    NetworkMode mode = NetworkMode.BROADCAST;
-    InetAddress destinationIp = null;
-    
-    try
-    {
-        destinationIp = InetAddress.getByName(DEFAULT_MULTICAST_GROUP);
-    }
-    catch(Exception e)
-    {
-        System.out.println(e + " Cannot create multicast address");
-        System.exit(0);
-    }
-    
-    // All system properties, passed in on the command line via -Dattribute=value
-    Properties systemProperties = System.getProperties();
-    
-    // IP address we send to
-    String destinationIpString = systemProperties.getProperty("destinationIp");
-    
-    // Port we send to, and local port we open the socket on
-    String portString = systemProperties.getProperty("port");
-    
-    // Network mode: unicast, multicast, broadcast
-    String networkModeString = systemProperties.getProperty("networkMode"); // unicast or multicast or broadcast
-        
-
-    // Set up a socket to send information
-    try
-    {
-        // Port we send to
-        if(portString != null)
-            port = Integer.parseInt(portString);
-        
-        socket = new MulticastSocket(port);
-        
-        // Where we send packets to, the destination IP address
-        if(destinationIpString != null)
-        {
-            destinationIp = InetAddress.getByName(destinationIpString);
-        }
-
-        // Type of transport: unicast, broadcast, or multicast
-        if(networkModeString != null)
-        {
-            if(networkModeString.equalsIgnoreCase("unicast"))
-                mode = NetworkMode.UNICAST;
-            else if(networkModeString.equalsIgnoreCase("broadcast"))
-                mode = NetworkMode.BROADCAST;
-            else if(networkModeString.equalsIgnoreCase("multicast"))
-            {
-                mode = NetworkMode.MULTICAST;
-                if(!destinationIp.isMulticastAddress())
-                {
-                    throw new RuntimeException("Sending to multicast address, but destination address " + destinationIp.toString() + "is not multicast");
-                }
-                
-                socket.joinGroup(destinationIp);
-                
-            }
-        } // end networkModeString
-    }
-    catch(Exception e)
-    {
-        System.out.println("Unable to initialize networking. Exiting.");
-        System.out.println(e);
-        System.exit(-1);
-    }
-    
-    // Initialize values in the Entity State PDU object. The exercise ID is 
-    // a way to differentiate between different virtual worlds on one network.
-    // Note that some values (such as the PDU type and PDU family) are set
-    // automatically when you create the ESPDU.
-    espdu.setExerciseID((short)1);
-    
-    // The EID is the unique identifier for objects in the world. This 
-    // EID should match up with the ID for the object specified in the 
-    // VMRL/x3d/virtual world.
-    EntityID eid = espdu.getEntityID();
-    eid.setSite(1);  // 0 is apparently not a valid site number, per the spec
-    eid.setApplication(1); 
-    eid.setEntity(2); 
-    
-    // Set the entity type. SISO has a big list of enumerations, so that by
-    // specifying various numbers we can say this is an M1A2 American tank,
-    // the USS Enterprise, and so on. We'll make this a tank. There is a 
-    // separate project elsehwhere in this project that implements DIS 
-    // enumerations in C++ and Java, but to keep things simple we just use
-    // numbers here.
-    EntityType entityType = espdu.getEntityType();
-    entityType.setEntityKind((short)1);      // Platform (vs lifeform, munition, sensor, etc.)
-    entityType.setCountry(225);              // USA
-    entityType.setDomain((short)1);          // Land (vs air, surface, subsurface, space)
-    entityType.setCategory((short)1);        // Tank
-    entityType.setSubcategory((short)1);     // M1 Abrams
-    entityType.setSpec((short)3);            // M1A2 Abrams
-    
-
-    Set<InetAddress> bcastAddresses = getBroadcastAddresses();
-    // Loop through sending N ESPDUs
-    try
-    {
-        System.out.println("Sending " + NUMBER_TO_SEND + " ESPDU packets to " + destinationIp.toString());
-        for(int idx = 0; idx < NUMBER_TO_SEND; idx++)
-        {
-            // DIS time is a pain in the ass. DIS time units are 2^31-1 units per
-            // hour, and time is set to DIS time units from the top of the hour. 
-            // This means that if you start sending just before the top of the hour
-            // the time units can roll over to zero as you are sending. The receivers
-            // (escpecially homegrown ones) are often not able to detect rollover
-            // and may start discarding packets as dupes or out of order. We use
-            // an NPS timestamp here, hundredths of a second since the start of the
-            // year. The DIS standard for time is often ignored in the wild; I've seen
-            // people use Unix time (seconds since 1970) and more. Or you can
-            // just stuff idx into the timestamp field to get something that is monotonically
-            // increasing.
-            
-            // Note that timestamp is used to detect duplicate and out of order packets. 
-            // That means if you DON'T change the timestamp, many implementations will simply
-            // discard subsequent packets that have an identical timestamp. Also, if they
-            // receive a PDU with an timestamp lower than the last one they received, they
-            // may discard it as an earlier, out-of-order PDU. So it is a good idea to
-            // update the timestamp on ALL packets sent.
-            
-
-            // An alterative approach: actually follow the standard. It's a crazy concept,
-            // but it might just work.
-            int ts = disTime.getDisAbsoluteTimestamp();
-            espdu.setTimestamp(ts);
-            
-            // Set the position of the entity in the world. DIS uses a cartesian 
-            // coordinate system with the origin at the center of the earth, the x
-            // axis out at the equator and prime meridian, y out at the equator and
-            // 90 deg east, and z up and out the north pole. To place an object on
-            // the earth's surface you also need a model for the shape of the earth
-            // (it's not a sphere.) All the fancy math necessary to do this is in
-            // the SEDRIS SRM package. There are also some one-off formulas for 
-            // doing conversions from, for example, lat/lon/altitude to DIS coordinates.
-            // Here we use those one-off formulas.
-
-            // Modify the position of the object. This will send the object a little
-            // due east by adding some to the longitude every iteration. Since we
-            // are on the Pacific coast, this sends the object east. Assume we are
-            // at zero altitude. In other worlds you'd use DTED to determine the
-            // local ground altitude at that lat/lon, or you'd just use ground clamping.
-            // The x and y values will change, but the z value should not.
-            
-            //lon = lon + (double)((double)idx / 100000.0);
-            //System.out.println("lla=" + lat + "," + lon + ", 0.0");
-
-            double direction = Math.pow((double)(-1.0), (double)(idx));
-            lon = lon + (direction * 0.00006);
-            System.out.println(lon);
-            
-            double disCoordinates[] = CoordinateConversions.getXYZfromLatLonDegrees(lat, lon, 1.0);
-            Vector3Double location = espdu.getEntityLocation();
-            location.setX(disCoordinates[0]);
-            location.setY(disCoordinates[1]);
-            location.setZ(disCoordinates[2]);
-            System.out.println("lat, lon:" + lat + ", " + lon);
-            System.out.println("DIS coord:" + disCoordinates[0] + ", " + disCoordinates[1] + ", " + disCoordinates[2]);
-
-            // Optionally, we can do some rotation of the entity
-            /*
-            Orientation orientation = espdu.getEntityOrientation();
-            float psi = orientation.getPsi();
-            psi = psi + idx;
-            orientation.setPsi(psi);
-            orientation.setTheta((float)(orientation.getTheta() + idx /2.0));
-             */
-            
-            // You can set other ESPDU values here, such as the velocity, acceleration,
-            // and so on.
-
-            // Marshal out the espdu object to a byte array, then send a datagram
-            // packet with that data in it.
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            DataOutputStream dos = new DataOutputStream(baos);
-            espdu.marshal(dos);
-
-            FirePdu fire = new FirePdu();
-            byte[] fireArray = fire.marshal();
-            
-            // The byte array here is the packet in DIS format. We put that into a 
-            // datagram and send it.
-            byte[] data = baos.toByteArray();
-
-            bcastAddresses = getBroadcastAddresses();
-            Iterator it = bcastAddresses.iterator();
-            while(it.hasNext())
-            {
-               InetAddress bcast = (InetAddress)it.next();
-               System.out.println("Sending bcast to " + bcast);
-               DatagramPacket packet = new DatagramPacket(data, data.length, bcast, 3000);
-               socket.send(packet);
-               packet = new DatagramPacket(fireArray, fireArray.length, bcast, 3000);
-               //socket.send(packet);
-            }
-            
-            // Send every 1 sec. Otherwise this will be all over in a fraction of a second.
-            Thread.sleep(3000);
-
-            location = espdu.getEntityLocation();
-            
-            System.out.println("Espdu #" + idx + " EID=[" + eid.getSite() + "," + eid.getApplication() + "," + eid.getEntity() + "]");
-            System.out.println(" DIS coordinates location=[" + location.getX() + "," + location.getY() + "," + location.getZ() + "]");
-            double c[] = {location.getX(), location.getY(), location.getZ()};
-            double lla[] = CoordinateConversions.xyzToLatLonDegrees(c);
-//            System.out.println(" Location (lat/lon/alt): [" + lla[0] + ", " + lla[1] + ", " + lla[2] + "]");
-
-        }
-    }
-    catch(Exception e)
-    {
-        System.out.println(e);
-    }
-        
-}
-
- /**
-    * A number of sites get all snippy about using 255.255.255.255 for a bcast
-    * address; it trips their security software and they kick you off their 
-    * network. (Comcast, NPS.) This determines the bcast address for all
-    * connected interfaces, based on the IP and subnet mask. If you have
-    * a dual-homed host it will return a bcast address for both. If you have
-    * some VMs running on your host this will pick up the addresses for those
-    * as well--eg running VMWare on your laptop with a local IP this will
-    * also pick up a 192.168 address assigned to the VM by the host OS.
-    * 
-    * @return set of all bcast addresses
-    */
-   public static Set<InetAddress> getBroadcastAddresses()
-   {
-       Set<InetAddress> bcastAddresses = new HashSet<InetAddress>();
-       Enumeration interfaces;
-       
-       try
-       {
-           interfaces = NetworkInterface.getNetworkInterfaces();
-           
-           while(interfaces.hasMoreElements())
-           {
-               NetworkInterface anInterface = (NetworkInterface)interfaces.nextElement();
-               
-               if(anInterface.isUp())
-               {
-                   Iterator it = anInterface.getInterfaceAddresses().iterator();
-                   while(it.hasNext())
-                   {
-                       InterfaceAddress anAddress = (InterfaceAddress)it.next();
-                       if((anAddress == null || anAddress.getAddress().isLinkLocalAddress()))
-                           continue;
-                       
-                       //System.out.println("Getting bcast address for " + anAddress);
-                       InetAddress abcast = anAddress.getBroadcast();
-                       if(abcast != null)
-                        bcastAddresses.add(abcast);
-                   }
-               }
-           }
-           
-       }
-       catch(Exception e)
-       {
-           e.printStackTrace();
-           System.out.println(e);
-       }
-       
-       return bcastAddresses;   
-   }
-
-}
diff --git a/projects/Assignments/homework1/BlankenbekerMyTcpServer.java b/projects/Assignments/homework1/BlankenbekerMyTcpServer.java
index 4dc227890b63db663d542795fc12b6a4bf95a6b1..a595ef3089f22afebc38391242075080204c31a6 100644
--- a/projects/Assignments/homework1/BlankenbekerMyTcpServer.java
+++ b/projects/Assignments/homework1/BlankenbekerMyTcpServer.java
@@ -33,12 +33,12 @@ public class BlankenbekerMyTcpServer
             // needs to be made only once.
             int connectionCount = 0;
             ServerSocket serverSocket = new ServerSocket(2317);
-
+            Socket clientConnection = serverSocket.accept();
             // Loop, infinitely, waiting for client connections.
             // Stop the program somewhere else.
             while(true)
             {
-                Socket clientConnection = serverSocket.accept();
+               
                 
                 OutputStream os = clientConnection.getOutputStream();
                 PrintStream ps = new PrintStream(os);
diff --git a/projects/Assignments/homework3/ABEspduReceiverA.java b/projects/Assignments/homework3/ABEspduReceiverA.java
deleted file mode 100644
index 7b28b2b368975e266954717d0c0ea5955769bf8b..0000000000000000000000000000000000000000
--- a/projects/Assignments/homework3/ABEspduReceiverA.java
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-import java.net.*;
-import java.util.*;
-
-import edu.nps.moves.disutil.*;
-
-import edu.nps.moves.dis.*;
-
-/**
- * Receives PDUs from the network in IEEE format.
- *
- * @author DMcG
- * @version $Id:$
- */
-public class ABEspduReceiverA {
-
-    /** Max size of a PDU in binary format that we can receive. This is actually
-     * somewhat outdated--PDUs can be larger--but this is a reasonable starting point
-     */
-    public static final int MAX_PDU_SIZE = 8192;
-    public static final String GROUP = "239.1.2.3";
-    public static void main(String args[]) {
-        MulticastSocket socket;
-        DatagramPacket packet;
-        InetAddress address;
-        PduFactory pduFactory = new PduFactory();
-
-        try {
-            // Specify the socket to receive data
-            socket = new MulticastSocket(3000);
-            socket.setBroadcast(true);
-       
-            address = InetAddress.getByName(GROUP);
-            socket.joinGroup(address);
-
-            // Loop infinitely, receiving datagrams
-            while (true) {
-                byte buffer[] = new byte[MAX_PDU_SIZE];
-                packet = new DatagramPacket(buffer, buffer.length);
-
-                socket.receive(packet);
-
-                List<Pdu> pduBundle = pduFactory.getPdusFromBundle(packet.getData());
-                System.out.println("Bundle size is " + pduBundle.size());
-                
-                Iterator it = pduBundle.iterator();
-
-                while(it.hasNext())
-                {
-                    Pdu aPdu = (Pdu)it.next();
-                
-                    System.out.print("got PDU of type: " + aPdu.getClass().getName());
-                    if(aPdu instanceof EntityStatePdu)
-                    {
-                        EntityID eid = ((EntityStatePdu)aPdu).getEntityID();
-                        Vector3Double position = ((EntityStatePdu)aPdu).getEntityLocation();
-                        System.out.print(" EID:[" + eid.getSite() + ", " + eid.getApplication() + ", " + eid.getEntity() + "] ");
-                        System.out.print(" Location in DIS coordinates: [" + position.getX() + ", " + position.getY() + ", " + position.getZ() + "]");
-                    }
-                    System.out.println();
-                } // end trop through PDU bundle
-
-            } // end while
-        } // End try
-        catch (Exception e) {
-
-            System.out.println(e);
-        }
-
-
-    } // end main
-} // end class
diff --git a/projects/Assignments/homework3/ABEspduReceiverB.java b/projects/Assignments/homework3/ABEspduReceiverB.java
deleted file mode 100644
index c19654ecc603a97eda1e0846fa0ec48c3665dc46..0000000000000000000000000000000000000000
--- a/projects/Assignments/homework3/ABEspduReceiverB.java
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-import java.net.*;
-import java.util.*;
-
-import edu.nps.moves.disutil.*;
-import edu.nps.moves.dis.*;
-
-/**
- * Receives PDUs from the network in IEEE format.
- *
- * @author DMcG
- * @version $Id:$
- */
-public class ABEspduReceiverB {
-
-    /** Max size of a PDU in binary format that we can receive. This is actually
-     * somewhat outdated--PDUs can be larger--but this is a reasonable starting point
-     */
-    public static final int MAX_PDU_SIZE = 8192;
-    
-    public static final String GROUP = "239.1.2.3";
-
-    public static void main(String args[]) {
-        MulticastSocket socket;
-        DatagramPacket packet;
-        InetAddress address;
-        PduFactory pduFactory = new PduFactory();
-
-        try {
-            // Specify the socket to receive data
-            socket = new MulticastSocket(3000);
-            socket.setBroadcast(true);
-       
-
-            address = InetAddress.getByName(GROUP);
-            socket.joinGroup(address);
-
-            // Loop infinitely, receiving datagrams
-            while (true) {
-                byte buffer[] = new byte[MAX_PDU_SIZE];
-                packet = new DatagramPacket(buffer, buffer.length);
-
-                socket.receive(packet);
-
-                List<Pdu> pduBundle = pduFactory.getPdusFromBundle(packet.getData());
-                System.out.println("Bundle size is " + pduBundle.size());
-                
-                Iterator it = pduBundle.iterator();
-
-                while(it.hasNext())
-                {
-                    Pdu aPdu = (Pdu)it.next();
-                
-                    System.out.print("got PDU of type: " + aPdu.getClass().getName());
-                    if(aPdu instanceof EntityStatePdu)
-                    {
-                        EntityID eid = ((EntityStatePdu)aPdu).getEntityID();
-                        Vector3Double position = ((EntityStatePdu)aPdu).getEntityLocation();
-                        System.out.print(" EID:[" + eid.getSite() + ", " + eid.getApplication() + ", " + eid.getEntity() + "] ");
-                        System.out.print(" Location in DIS coordinates: [" + position.getX() + ", " + position.getY() + ", " + position.getZ() + "]");
-                    }
-                    System.out.println();
-                } // end trop through PDU bundle
-
-            } // end while
-        } // End try
-        catch (Exception e) {
-
-            System.out.println(e);
-        }
-
-
-    } // end main
-} // end class
diff --git a/projects/Assignments/homework3/ABEspduSenderA.java b/projects/Assignments/homework3/ABEspduSenderA.java
deleted file mode 100644
index d3cd7510899593dda0626ba0803f2903ba027146..0000000000000000000000000000000000000000
--- a/projects/Assignments/homework3/ABEspduSenderA.java
+++ /dev/null
@@ -1,323 +0,0 @@
-
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-import edu.nps.moves.dis.*;
-import edu.nps.moves.disutil.CoordinateConversions;
-import edu.nps.moves.disutil.DisTime;
-
-/**
- * Creates and sends ESPDUs in IEEE binary format. 
- *
- * @author DMcG
- */
-public class ABEspduSenderA 
-{
-    public static final int NUMBER_TO_SEND = 5000;
-
-    public enum NetworkMode{UNICAST, MULTICAST, BROADCAST};
-
-    /** default multicast group we send on */
-    public static final String DEFAULT_MULTICAST_GROUP="239.1.2.3";
-   
-    /** Port we send on */
-    public static final int    DIS_DESTINATION_PORT = 3000;
-    
-/** Possible system properties, passed in via -Dattr=val
-     * networkMode: unicast, broadcast, multicast
-     * destinationIp: where to send the packet. If in multicast mode, this can be mcast.
-     *                To determine bcast destination IP, use an online bcast address
-     *                caclulator, for example http://www.remotemonitoringsystems.ca/broadcast.php
-     *                If in mcast mode, a join() will be done on the mcast address.
-     * port: port used for both source and destination.
-     * @param args 
-     */
-public static void main(String args[])
-{
-    /** an entity state pdu */
-    EntityStatePdu espdu = new EntityStatePdu();
-    MulticastSocket socket = null;
-    DisTime disTime = DisTime.getInstance();
-    int alternator = -1;
-    
-    // ICBM coordinates for my office
-    double lat = 36.595517; 
-    double lon = -121.877000;
-
-    
-    // Default settings. These are used if no system properties are set. 
-    // If system properties are passed in, these are over ridden.
-    int port = DIS_DESTINATION_PORT;
-    NetworkMode mode = NetworkMode.MULTICAST;
-    InetAddress destinationIp = null;
-    
-    try
-    {
-        destinationIp = InetAddress.getByName(DEFAULT_MULTICAST_GROUP);
-    }
-    catch(Exception e)
-    {
-        System.out.println(e + " Cannot create multicast address");
-        System.exit(0);
-    }
-    
-    // All system properties, passed in on the command line via -Dattribute=value
-    Properties systemProperties = System.getProperties();
-    
-    // IP address we send to
-    String destinationIpString = systemProperties.getProperty("destinationIp");
-    
-    // Port we send to, and local port we open the socket on
-    String portString = systemProperties.getProperty("port");
-    
-    // Network mode: unicast, multicast, broadcast
-    String networkModeString = systemProperties.getProperty("networkMode"); // unicast or multicast or broadcast
-        
-
-    // Set up a socket to send information
-    try
-    {
-        // Port we send to
-        if(portString != null)
-            port = Integer.parseInt(portString);
-        
-        socket = new MulticastSocket(port);
-        
-        // Where we send packets to, the destination IP address
-        if(destinationIpString != null)
-        {
-            destinationIp = InetAddress.getByName(destinationIpString);
-        }
-
-        // Type of transport: unicast, broadcast, or multicast
-        if(networkModeString != null)
-        {
-            if(networkModeString.equalsIgnoreCase("unicast"))
-                mode = NetworkMode.UNICAST;
-            else if(networkModeString.equalsIgnoreCase("broadcast"))
-                mode = NetworkMode.BROADCAST;
-            else if(networkModeString.equalsIgnoreCase("multicast"))
-            {
-                mode = NetworkMode.MULTICAST;
-                if(!destinationIp.isMulticastAddress())
-                {
-                    throw new RuntimeException("Sending to multicast address, but destination address " + destinationIp.toString() + "is not multicast");
-                }
-                
-                socket.joinGroup(destinationIp);
-                
-            }
-        } // end networkModeString
-    }
-    catch(Exception e)
-    {
-        System.out.println("Unable to initialize networking. Exiting.");
-        System.out.println(e);
-        System.exit(-1);
-    }
-    
-    // Initialize values in the Entity State PDU object. The exercise ID is 
-    // a way to differentiate between different virtual worlds on one network.
-    // Note that some values (such as the PDU type and PDU family) are set
-    // automatically when you create the ESPDU.
-    espdu.setExerciseID((short)1);
-    
-    // The EID is the unique identifier for objects in the world. This 
-    // EID should match up with the ID for the object specified in the 
-    // VMRL/x3d/virtual world.
-    EntityID eid = espdu.getEntityID();
-    eid.setSite(1);  // 0 is apparently not a valid site number, per the spec
-    eid.setApplication(1); 
-    eid.setEntity(2); 
-    
-    // Set the entity type. SISO has a big list of enumerations, so that by
-    // specifying various numbers we can say this is an M1A2 American tank,
-    // the USS Enterprise, and so on. We'll make this a tank. There is a 
-    // separate project elsehwhere in this project that implements DIS 
-    // enumerations in C++ and Java, but to keep things simple we just use
-    // numbers here.
-    EntityType entityType = espdu.getEntityType();
-    entityType.setEntityKind((short)1);      // Platform (vs lifeform, munition, sensor, etc.)
-    entityType.setCountry(225);              // USA
-    entityType.setDomain((short)1);          // Land (vs air, surface, subsurface, space)
-    entityType.setCategory((short)1);        // Tank
-    entityType.setSubcategory((short)1);     // M1 Abrams
-    entityType.setSpec((short)3);            // M1A2 Abrams
-    
-
-    Set<InetAddress> bcastAddresses = getBroadcastAddresses();
-    // Loop through sending N ESPDUs
-    try
-    {
-        System.out.println("Sending " + NUMBER_TO_SEND + " ESPDU packets to " + destinationIp.toString());
-        for(int idx = 0; idx < NUMBER_TO_SEND; idx++)
-        {
-            // DIS time is a pain in the ass. DIS time units are 2^31-1 units per
-            // hour, and time is set to DIS time units from the top of the hour. 
-            // This means that if you start sending just before the top of the hour
-            // the time units can roll over to zero as you are sending. The receivers
-            // (escpecially homegrown ones) are often not able to detect rollover
-            // and may start discarding packets as dupes or out of order. We use
-            // an NPS timestamp here, hundredths of a second since the start of the
-            // year. The DIS standard for time is often ignored in the wild; I've seen
-            // people use Unix time (seconds since 1970) and more. Or you can
-            // just stuff idx into the timestamp field to get something that is monotonically
-            // increasing.
-            
-            // Note that timestamp is used to detect duplicate and out of order packets. 
-            // That means if you DON'T change the timestamp, many implementations will simply
-            // discard subsequent packets that have an identical timestamp. Also, if they
-            // receive a PDU with an timestamp lower than the last one they received, they
-            // may discard it as an earlier, out-of-order PDU. So it is a good idea to
-            // update the timestamp on ALL packets sent.
-            
-
-            // An alterative approach: actually follow the standard. It's a crazy concept,
-            // but it might just work.
-            int ts = disTime.getDisAbsoluteTimestamp();
-            espdu.setTimestamp(ts);
-            
-            // Set the position of the entity in the world. DIS uses a cartesian 
-            // coordinate system with the origin at the center of the earth, the x
-            // axis out at the equator and prime meridian, y out at the equator and
-            // 90 deg east, and z up and out the north pole. To place an object on
-            // the earth's surface you also need a model for the shape of the earth
-            // (it's not a sphere.) All the fancy math necessary to do this is in
-            // the SEDRIS SRM package. There are also some one-off formulas for 
-            // doing conversions from, for example, lat/lon/altitude to DIS coordinates.
-            // Here we use those one-off formulas.
-
-            // Modify the position of the object. This will send the object a little
-            // due east by adding some to the longitude every iteration. Since we
-            // are on the Pacific coast, this sends the object east. Assume we are
-            // at zero altitude. In other worlds you'd use DTED to determine the
-            // local ground altitude at that lat/lon, or you'd just use ground clamping.
-            // The x and y values will change, but the z value should not.
-            
-            //lon = lon + (double)((double)idx / 100000.0);
-            //System.out.println("lla=" + lat + "," + lon + ", 0.0");
-
-            double direction = Math.pow((double)(-1.0), (double)(idx));
-            lon = lon + (direction * 0.00006);
-            System.out.println(lon);
-            
-            double disCoordinates[] = CoordinateConversions.getXYZfromLatLonDegrees(lat, lon, 1.0);
-            Vector3Double location = espdu.getEntityLocation();
-            location.setX(disCoordinates[0]);
-            location.setY(disCoordinates[1]);
-            location.setZ(disCoordinates[2]);
-            System.out.println("lat, lon:" + lat + ", " + lon);
-            System.out.println("DIS coord:" + disCoordinates[0] + ", " + disCoordinates[1] + ", " + disCoordinates[2]);
-
-            // Optionally, we can do some rotation of the entity
-            /*
-            Orientation orientation = espdu.getEntityOrientation();
-            float psi = orientation.getPsi();
-            psi = psi + idx;
-            orientation.setPsi(psi);
-            orientation.setTheta((float)(orientation.getTheta() + idx /2.0));
-             */
-            
-            // You can set other ESPDU values here, such as the velocity, acceleration,
-            // and so on.
-
-            // Marshal out the espdu object to a byte array, then send a datagram
-            // packet with that data in it.
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            DataOutputStream dos = new DataOutputStream(baos);
-            espdu.marshal(dos);
-
-            FirePdu fire = new FirePdu();
-            byte[] fireArray = fire.marshal();
-            
-            // The byte array here is the packet in DIS format. We put that into a 
-            // datagram and send it.
-            byte[] data = baos.toByteArray();
-
-            bcastAddresses = getBroadcastAddresses();
-            Iterator it = bcastAddresses.iterator();
-            while(it.hasNext())
-            {
-               InetAddress bcast = (InetAddress)it.next();
-               System.out.println("Sending bcast to " + bcast);
-               DatagramPacket packet = new DatagramPacket(data, data.length, bcast, 3000);
-               socket.send(packet);
-               packet = new DatagramPacket(fireArray, fireArray.length, bcast, 3000);
-               //socket.send(packet);
-            }
-            
-            // Send every 1 sec. Otherwise this will be all over in a fraction of a second.
-            Thread.sleep(3000);
-
-            location = espdu.getEntityLocation();
-            
-            System.out.println("Espdu #" + idx + " EID=[" + eid.getSite() + "," + eid.getApplication() + "," + eid.getEntity() + "]");
-            System.out.println(" DIS coordinates location=[" + location.getX() + "," + location.getY() + "," + location.getZ() + "]");
-            double c[] = {location.getX(), location.getY(), location.getZ()};
-            double lla[] = CoordinateConversions.xyzToLatLonDegrees(c);
-//            System.out.println(" Location (lat/lon/alt): [" + lla[0] + ", " + lla[1] + ", " + lla[2] + "]");
-
-        }
-    }
-    catch(Exception e)
-    {
-        System.out.println(e);
-    }
-        
-}
-
- /**
-    * A number of sites get all snippy about using 255.255.255.255 for a bcast
-    * address; it trips their security software and they kick you off their 
-    * network. (Comcast, NPS.) This determines the bcast address for all
-    * connected interfaces, based on the IP and subnet mask. If you have
-    * a dual-homed host it will return a bcast address for both. If you have
-    * some VMs running on your host this will pick up the addresses for those
-    * as well--eg running VMWare on your laptop with a local IP this will
-    * also pick up a 192.168 address assigned to the VM by the host OS.
-    * 
-    * @return set of all bcast addresses
-    */
-   public static Set<InetAddress> getBroadcastAddresses()
-   {
-       Set<InetAddress> bcastAddresses = new HashSet<InetAddress>();
-       Enumeration interfaces;
-       
-       try
-       {
-           interfaces = NetworkInterface.getNetworkInterfaces();
-           
-           while(interfaces.hasMoreElements())
-           {
-               NetworkInterface anInterface = (NetworkInterface)interfaces.nextElement();
-               
-               if(anInterface.isUp())
-               {
-                   Iterator it = anInterface.getInterfaceAddresses().iterator();
-                   while(it.hasNext())
-                   {
-                       InterfaceAddress anAddress = (InterfaceAddress)it.next();
-                       if((anAddress == null || anAddress.getAddress().isLinkLocalAddress()))
-                           continue;
-                       
-                       //System.out.println("Getting bcast address for " + anAddress);
-                       InetAddress abcast = anAddress.getBroadcast();
-                       if(abcast != null)
-                        bcastAddresses.add(abcast);
-                   }
-               }
-           }
-           
-       }
-       catch(Exception e)
-       {
-           e.printStackTrace();
-           System.out.println(e);
-       }
-       
-       return bcastAddresses;   
-   }
-
-}
diff --git a/projects/Assignments/homework3/ABEspduSenderB.java b/projects/Assignments/homework3/ABEspduSenderB.java
deleted file mode 100644
index 4e373aa924a7f4c957fd198a2f9b7717b664ba95..0000000000000000000000000000000000000000
--- a/projects/Assignments/homework3/ABEspduSenderB.java
+++ /dev/null
@@ -1,323 +0,0 @@
-
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-import edu.nps.moves.dis.*;
-import edu.nps.moves.disutil.CoordinateConversions;
-import edu.nps.moves.disutil.DisTime;
-
-/**
- * Creates and sends ESPDUs in IEEE binary format. 
- *
- * @author DMcG
- */
-public class ABEspduSenderB 
-{
-    public static final int NUMBER_TO_SEND = 5000;
-
-    public enum NetworkMode{UNICAST, MULTICAST, BROADCAST};
-
-    /** default multicast group we send on */
-    public static final String DEFAULT_MULTICAST_GROUP = "239.1.2.3";
-   
-    /** Port we send on */
-    public static final int    DIS_DESTINATION_PORT = 3000;
-    
-/** Possible system properties, passed in via -Dattr=val
-     * networkMode: unicast, broadcast, multicast
-     * destinationIp: where to send the packet. If in multicast mode, this can be mcast.
-     *                To determine bcast destination IP, use an online bcast address
-     *                caclulator, for example http://www.remotemonitoringsystems.ca/broadcast.php
-     *                If in mcast mode, a join() will be done on the mcast address.
-     * port: port used for both source and destination.
-     * @param args 
-     */
-public static void main(String args[])
-{
-    /** an entity state pdu */
-    EntityStatePdu espdu = new EntityStatePdu();
-    MulticastSocket socket = null;
-    DisTime disTime = DisTime.getInstance();
-    int alternator = -1;
-    
-    // ICBM coordinates for my office
-    double lat = 36.595517; 
-    double lon = -121.877000;
-
-    
-    // Default settings. These are used if no system properties are set. 
-    // If system properties are passed in, these are over ridden.
-    int port = DIS_DESTINATION_PORT;
-    NetworkMode mode = NetworkMode.MULTICAST;
-    InetAddress destinationIp = null;
-    
-    try
-    {
-        destinationIp = InetAddress.getByName(DEFAULT_MULTICAST_GROUP);
-    }
-    catch(Exception e)
-    {
-        System.out.println(e + " Cannot create multicast address");
-        System.exit(0);
-    }
-    
-    // All system properties, passed in on the command line via -Dattribute=value
-    Properties systemProperties = System.getProperties();
-    
-    // IP address we send to
-    String destinationIpString = systemProperties.getProperty("destinationIp");
-    
-    // Port we send to, and local port we open the socket on
-    String portString = systemProperties.getProperty("port");
-    
-    // Network mode: unicast, multicast, broadcast
-    String networkModeString = systemProperties.getProperty("networkMode"); // unicast or multicast or broadcast
-        
-
-    // Set up a socket to send information
-    try
-    {
-        // Port we send to
-        if(portString != null)
-            port = Integer.parseInt(portString);
-        
-        socket = new MulticastSocket(port);
-        
-        // Where we send packets to, the destination IP address
-        if(destinationIpString != null)
-        {
-            destinationIp = InetAddress.getByName(destinationIpString);
-        }
-
-        // Type of transport: unicast, broadcast, or multicast
-        if(networkModeString != null)
-        {
-            if(networkModeString.equalsIgnoreCase("unicast"))
-                mode = NetworkMode.UNICAST;
-            else if(networkModeString.equalsIgnoreCase("broadcast"))
-                mode = NetworkMode.BROADCAST;
-            else if(networkModeString.equalsIgnoreCase("multicast"))
-            {
-                mode = NetworkMode.MULTICAST;
-                if(!destinationIp.isMulticastAddress())
-                {
-                    throw new RuntimeException("Sending to multicast address, but destination address " + destinationIp.toString() + "is not multicast");
-                }
-                
-                socket.joinGroup(destinationIp);
-                
-            }
-        } // end networkModeString
-    }
-    catch(Exception e)
-    {
-        System.out.println("Unable to initialize networking. Exiting.");
-        System.out.println(e);
-        System.exit(-1);
-    }
-    
-    // Initialize values in the Entity State PDU object. The exercise ID is 
-    // a way to differentiate between different virtual worlds on one network.
-    // Note that some values (such as the PDU type and PDU family) are set
-    // automatically when you create the ESPDU.
-    espdu.setExerciseID((short)1);
-    
-    // The EID is the unique identifier for objects in the world. This 
-    // EID should match up with the ID for the object specified in the 
-    // VMRL/x3d/virtual world.
-    EntityID eid = espdu.getEntityID();
-    eid.setSite(1);  // 0 is apparently not a valid site number, per the spec
-    eid.setApplication(1); 
-    eid.setEntity(2); 
-    
-    // Set the entity type. SISO has a big list of enumerations, so that by
-    // specifying various numbers we can say this is an M1A2 American tank,
-    // the USS Enterprise, and so on. We'll make this a tank. There is a 
-    // separate project elsehwhere in this project that implements DIS 
-    // enumerations in C++ and Java, but to keep things simple we just use
-    // numbers here.
-    EntityType entityType = espdu.getEntityType();
-    entityType.setEntityKind((short)1);      // Platform (vs lifeform, munition, sensor, etc.)
-    entityType.setCountry(225);              // USA
-    entityType.setDomain((short)1);          // Land (vs air, surface, subsurface, space)
-    entityType.setCategory((short)1);        // Tank
-    entityType.setSubcategory((short)1);     // M1 Abrams
-    entityType.setSpec((short)3);            // M1A2 Abrams
-    
-
-    Set<InetAddress> bcastAddresses = getBroadcastAddresses();
-    // Loop through sending N ESPDUs
-    try
-    {
-        System.out.println("Sending " + NUMBER_TO_SEND + " ESPDU packets to " + destinationIp.toString());
-        for(int idx = 0; idx < NUMBER_TO_SEND; idx++)
-        {
-            // DIS time is a pain in the ass. DIS time units are 2^31-1 units per
-            // hour, and time is set to DIS time units from the top of the hour. 
-            // This means that if you start sending just before the top of the hour
-            // the time units can roll over to zero as you are sending. The receivers
-            // (escpecially homegrown ones) are often not able to detect rollover
-            // and may start discarding packets as dupes or out of order. We use
-            // an NPS timestamp here, hundredths of a second since the start of the
-            // year. The DIS standard for time is often ignored in the wild; I've seen
-            // people use Unix time (seconds since 1970) and more. Or you can
-            // just stuff idx into the timestamp field to get something that is monotonically
-            // increasing.
-            
-            // Note that timestamp is used to detect duplicate and out of order packets. 
-            // That means if you DON'T change the timestamp, many implementations will simply
-            // discard subsequent packets that have an identical timestamp. Also, if they
-            // receive a PDU with an timestamp lower than the last one they received, they
-            // may discard it as an earlier, out-of-order PDU. So it is a good idea to
-            // update the timestamp on ALL packets sent.
-            
-
-            // An alterative approach: actually follow the standard. It's a crazy concept,
-            // but it might just work.
-            int ts = disTime.getDisAbsoluteTimestamp();
-            espdu.setTimestamp(ts);
-            
-            // Set the position of the entity in the world. DIS uses a cartesian 
-            // coordinate system with the origin at the center of the earth, the x
-            // axis out at the equator and prime meridian, y out at the equator and
-            // 90 deg east, and z up and out the north pole. To place an object on
-            // the earth's surface you also need a model for the shape of the earth
-            // (it's not a sphere.) All the fancy math necessary to do this is in
-            // the SEDRIS SRM package. There are also some one-off formulas for 
-            // doing conversions from, for example, lat/lon/altitude to DIS coordinates.
-            // Here we use those one-off formulas.
-
-            // Modify the position of the object. This will send the object a little
-            // due east by adding some to the longitude every iteration. Since we
-            // are on the Pacific coast, this sends the object east. Assume we are
-            // at zero altitude. In other worlds you'd use DTED to determine the
-            // local ground altitude at that lat/lon, or you'd just use ground clamping.
-            // The x and y values will change, but the z value should not.
-            
-            //lon = lon + (double)((double)idx / 100000.0);
-            //System.out.println("lla=" + lat + "," + lon + ", 0.0");
-
-            double direction = Math.pow((double)(-1.0), (double)(idx));
-            lon = lon + (direction * 0.00006);
-            System.out.println(lon);
-            
-            double disCoordinates[] = CoordinateConversions.getXYZfromLatLonDegrees(lat, lon, 1.0);
-            Vector3Double location = espdu.getEntityLocation();
-            location.setX(disCoordinates[0]);
-            location.setY(disCoordinates[1]);
-            location.setZ(disCoordinates[2]);
-            System.out.println("lat, lon:" + lat + ", " + lon);
-            System.out.println("DIS coord:" + disCoordinates[0] + ", " + disCoordinates[1] + ", " + disCoordinates[2]);
-
-            // Optionally, we can do some rotation of the entity
-            /*
-            Orientation orientation = espdu.getEntityOrientation();
-            float psi = orientation.getPsi();
-            psi = psi + idx;
-            orientation.setPsi(psi);
-            orientation.setTheta((float)(orientation.getTheta() + idx /2.0));
-             */
-            
-            // You can set other ESPDU values here, such as the velocity, acceleration,
-            // and so on.
-
-            // Marshal out the espdu object to a byte array, then send a datagram
-            // packet with that data in it.
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            DataOutputStream dos = new DataOutputStream(baos);
-            espdu.marshal(dos);
-
-            FirePdu fire = new FirePdu();
-            byte[] fireArray = fire.marshal();
-            
-            // The byte array here is the packet in DIS format. We put that into a 
-            // datagram and send it.
-            byte[] data = baos.toByteArray();
-
-            bcastAddresses = getBroadcastAddresses();
-            Iterator it = bcastAddresses.iterator();
-            while(it.hasNext())
-            {
-               InetAddress bcast = (InetAddress)it.next();
-               System.out.println("Sending bcast to " + bcast);
-               DatagramPacket packet = new DatagramPacket(data, data.length, bcast, 3000);
-               socket.send(packet);
-               packet = new DatagramPacket(fireArray, fireArray.length, bcast, 3000);
-               //socket.send(packet);
-            }
-            
-            // Send every 1 sec. Otherwise this will be all over in a fraction of a second.
-            Thread.sleep(3000);
-
-            location = espdu.getEntityLocation();
-            
-            System.out.println("Espdu #" + idx + " EID=[" + eid.getSite() + "," + eid.getApplication() + "," + eid.getEntity() + "]");
-            System.out.println(" DIS coordinates location=[" + location.getX() + "," + location.getY() + "," + location.getZ() + "]");
-            double c[] = {location.getX(), location.getY(), location.getZ()};
-            double lla[] = CoordinateConversions.xyzToLatLonDegrees(c);
-//            System.out.println(" Location (lat/lon/alt): [" + lla[0] + ", " + lla[1] + ", " + lla[2] + "]");
-
-        }
-    }
-    catch(Exception e)
-    {
-        System.out.println(e);
-    }
-        
-}
-
- /**
-    * A number of sites get all snippy about using 255.255.255.255 for a bcast
-    * address; it trips their security software and they kick you off their 
-    * network. (Comcast, NPS.) This determines the bcast address for all
-    * connected interfaces, based on the IP and subnet mask. If you have
-    * a dual-homed host it will return a bcast address for both. If you have
-    * some VMs running on your host this will pick up the addresses for those
-    * as well--eg running VMWare on your laptop with a local IP this will
-    * also pick up a 192.168 address assigned to the VM by the host OS.
-    * 
-    * @return set of all bcast addresses
-    */
-   public static Set<InetAddress> getBroadcastAddresses()
-   {
-       Set<InetAddress> bcastAddresses = new HashSet<InetAddress>();
-       Enumeration interfaces;
-       
-       try
-       {
-           interfaces = NetworkInterface.getNetworkInterfaces();
-           
-           while(interfaces.hasMoreElements())
-           {
-               NetworkInterface anInterface = (NetworkInterface)interfaces.nextElement();
-               
-               if(anInterface.isUp())
-               {
-                   Iterator it = anInterface.getInterfaceAddresses().iterator();
-                   while(it.hasNext())
-                   {
-                       InterfaceAddress anAddress = (InterfaceAddress)it.next();
-                       if((anAddress == null || anAddress.getAddress().isLinkLocalAddress()))
-                           continue;
-                       
-                       //System.out.println("Getting bcast address for " + anAddress);
-                       InetAddress abcast = anAddress.getBroadcast();
-                       if(abcast != null)
-                        bcastAddresses.add(abcast);
-                   }
-               }
-           }
-           
-       }
-       catch(Exception e)
-       {
-           e.printStackTrace();
-           System.out.println(e);
-       }
-       
-       return bcastAddresses;   
-   }
-
-}
diff --git a/projects/Assignments/homework3/AngelBlank/ABEspduReceiverA.java b/projects/Assignments/homework3/AngelBlank/ABEspduReceiverA.java
deleted file mode 100644
index 14fa3eb227c44a20f81d48d61739c3c18c155a8f..0000000000000000000000000000000000000000
--- a/projects/Assignments/homework3/AngelBlank/ABEspduReceiverA.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package AngelBlank;
-
-import java.net.*;
-import java.util.*;
-
-import edu.nps.moves.disutil.*;
-import edu.nps.moves.dis.*;
-
-/**
- * Receives PDUs from the network in IEEE format.
- *
- * @author DMcG
- * @version $Id:$
- */
-public class ABEspduReceiverA {
-
-    /** Max size of a PDU in binary format that we can receive. This is actually
-     * somewhat outdated--PDUs can be larger--but this is a reasonable starting point
-     */
-    public static final int MAX_PDU_SIZE = 8192;
-    public static final String GROUP = "239.1.2.3";
-    public static void main(String args[]) {
-        MulticastSocket socket;
-        DatagramPacket packet;
-        InetAddress address;
-        PduFactory pduFactory = new PduFactory();
-        
-        
-
-        try {
-            // Create TCP Bridge
-             ServerSocket serverSocket = new ServerSocket(2999);
-            
-            
-            
-            // Specify the socket to receive data
-            socket = new MulticastSocket(3000);
-            socket.setBroadcast(true);
-       
-            address = InetAddress.getByName(GROUP);
-            socket.joinGroup(address);
-
-            // Loop infinitely, receiving datagrams
-            while (true) {
-                byte buffer[] = new byte[MAX_PDU_SIZE];
-                packet = new DatagramPacket(buffer, buffer.length);
-
-                socket.receive(packet);
-
-                List<Pdu> pduBundle = pduFactory.getPdusFromBundle(packet.getData());
-                System.out.println("Bundle size is " + pduBundle.size());
-                
-                Iterator it = pduBundle.iterator();
-
-                while(it.hasNext())
-                {
-                    Pdu aPdu = (Pdu)it.next();
-                
-                    System.out.print("got PDU of type: " + aPdu.getClass().getName());
-                    if(aPdu instanceof EntityStatePdu)
-                    {
-                        EntityID eid = ((EntityStatePdu)aPdu).getEntityID();
-                        Vector3Double position = ((EntityStatePdu)aPdu).getEntityLocation();
-                        System.out.print(" EID:[" + eid.getSite() + ", " + eid.getApplication() + ", " + eid.getEntity() + "] ");
-                        System.out.print(" Location in DIS coordinates: [" + position.getX() + ", " + position.getY() + ", " + position.getZ() + "]");
-                    }
-                    System.out.println();
-                } // end trop through PDU bundle
-
-            } // end while
-        } // End try
-        catch (Exception e) {
-
-            System.out.println(e);
-        }
-
-
-    } // end main
-} // end class
diff --git a/projects/Assignments/homework3/AngelBlank/ABEspduReceiverB.java b/projects/Assignments/homework3/AngelBlank/ABEspduReceiverB.java
deleted file mode 100644
index 07c9b290455af164b3475b829ae44598eb20179b..0000000000000000000000000000000000000000
--- a/projects/Assignments/homework3/AngelBlank/ABEspduReceiverB.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package AngelBlank;
-
-
-import java.net.*;
-import java.util.*;
-
-import edu.nps.moves.disutil.*;
-import edu.nps.moves.dis.*;
-
-/**
- * Receives PDUs from the network in IEEE format.
- *
- * @author DMcG
- * @version $Id:$
- */
-public class ABEspduReceiverB {
-
-    /** Max size of a PDU in binary format that we can receive. This is actually
-     * somewhat outdated--PDUs can be larger--but this is a reasonable starting point
-     */
-    public static final int MAX_PDU_SIZE = 8192;
-    
-    public static final String GROUP = "239.1.2.3";
-
-    public static void main(String args[]) {
-        MulticastSocket socket;
-        DatagramPacket packet;
-        InetAddress address;
-        PduFactory pduFactory = new PduFactory();
-
-        try {
-            // Specify the socket to receive data
-            socket = new MulticastSocket(3000);
-            socket.setBroadcast(true);
-       
-
-            address = InetAddress.getByName(GROUP);
-            socket.joinGroup(address);
-
-            // Loop infinitely, receiving datagrams
-            while (true) {
-                byte buffer[] = new byte[MAX_PDU_SIZE];
-                packet = new DatagramPacket(buffer, buffer.length);
-
-                socket.receive(packet);
-
-                List<Pdu> pduBundle = pduFactory.getPdusFromBundle(packet.getData());
-                System.out.println("Bundle size is " + pduBundle.size());
-                
-                Iterator it = pduBundle.iterator();
-
-                while(it.hasNext())
-                {
-                    Pdu aPdu = (Pdu)it.next();
-                
-                    System.out.print("got PDU of type: " + aPdu.getClass().getName());
-                    if(aPdu instanceof EntityStatePdu)
-                    {
-                        EntityID eid = ((EntityStatePdu)aPdu).getEntityID();
-                        Vector3Double position = ((EntityStatePdu)aPdu).getEntityLocation();
-                        System.out.print(" EID:[" + eid.getSite() + ", " + eid.getApplication() + ", " + eid.getEntity() + "] ");
-                        System.out.print(" Location in DIS coordinates: [" + position.getX() + ", " + position.getY() + ", " + position.getZ() + "]");
-                    }
-                    System.out.println();
-                } // end trop through PDU bundle
-
-            } // end while
-        } // End try
-        catch (Exception e) {
-
-            System.out.println(e);
-        }
-
-
-    } // end main
-} // end class
diff --git a/projects/Assignments/homework3/AngelBlank/ABEspduSenderA.java b/projects/Assignments/homework3/AngelBlank/ABEspduSenderA.java
deleted file mode 100644
index 4a6391b7681db3fb44248bfaa2bb652298b00ca8..0000000000000000000000000000000000000000
--- a/projects/Assignments/homework3/AngelBlank/ABEspduSenderA.java
+++ /dev/null
@@ -1,324 +0,0 @@
-package AngelBlank;
-
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-import edu.nps.moves.dis.*;
-import edu.nps.moves.disutil.CoordinateConversions;
-import edu.nps.moves.disutil.DisTime;
-
-/**
- * Creates and sends ESPDUs in IEEE binary format. 
- *
- * @author DMcG
- */
-public class ABEspduSenderA 
-{
-    public static final int NUMBER_TO_SEND = 5000;
-
-    public enum NetworkMode{UNICAST, MULTICAST, BROADCAST};
-
-    /** default multicast group we send on */
-    public static final String DEFAULT_MULTICAST_GROUP="239.1.2.3";
-   
-    /** Port we send on */
-    public static final int    DIS_DESTINATION_PORT = 3000;
-    
-/** Possible system properties, passed in via -Dattr=val
-     * networkMode: unicast, broadcast, multicast
-     * destinationIp: where to send the packet. If in multicast mode, this can be mcast.
-     *                To determine bcast destination IP, use an online bcast address
-     *                caclulator, for example http://www.remotemonitoringsystems.ca/broadcast.php
-     *                If in mcast mode, a join() will be done on the mcast address.
-     * port: port used for both source and destination.
-     * @param args 
-     */
-public static void main(String args[])
-{
-    /** an entity state pdu */
-    EntityStatePdu espdu = new EntityStatePdu();
-    MulticastSocket socket = null;
-    DisTime disTime = DisTime.getInstance();
-    int alternator = -1;
-    
-    // ICBM coordinates for my office
-    double lat = 36.595517; 
-    double lon = -121.877000;
-
-    
-    // Default settings. These are used if no system properties are set. 
-    // If system properties are passed in, these are over ridden.
-    int port = DIS_DESTINATION_PORT;
-    NetworkMode mode = NetworkMode.MULTICAST;
-    InetAddress destinationIp = null;
-    
-    try
-    {
-        destinationIp = InetAddress.getByName(DEFAULT_MULTICAST_GROUP);
-    }
-    catch(Exception e)
-    {
-        System.out.println(e + " Cannot create multicast address");
-        System.exit(0);
-    }
-    
-    // All system properties, passed in on the command line via -Dattribute=value
-    Properties systemProperties = System.getProperties();
-    
-    // IP address we send to
-    String destinationIpString = systemProperties.getProperty("destinationIp");
-    
-    // Port we send to, and local port we open the socket on
-    String portString = systemProperties.getProperty("port");
-    
-    // Network mode: unicast, multicast, broadcast
-    String networkModeString = systemProperties.getProperty("networkMode"); // unicast or multicast or broadcast
-        
-
-    // Set up a socket to send information
-    try
-    {
-        // Port we send to
-        if(portString != null)
-            port = Integer.parseInt(portString);
-        
-        socket = new MulticastSocket(port);
-        
-        // Where we send packets to, the destination IP address
-        if(destinationIpString != null)
-        {
-            destinationIp = InetAddress.getByName(destinationIpString);
-        }
-
-        // Type of transport: unicast, broadcast, or multicast
-        if(networkModeString != null)
-        {
-            if(networkModeString.equalsIgnoreCase("unicast"))
-                mode = NetworkMode.UNICAST;
-            else if(networkModeString.equalsIgnoreCase("broadcast"))
-                mode = NetworkMode.BROADCAST;
-            else if(networkModeString.equalsIgnoreCase("multicast"))
-            {
-                mode = NetworkMode.MULTICAST;
-                if(!destinationIp.isMulticastAddress())
-                {
-                    throw new RuntimeException("Sending to multicast address, but destination address " + destinationIp.toString() + "is not multicast");
-                }
-                
-                socket.joinGroup(destinationIp);
-                
-            }
-        } // end networkModeString
-    }
-    catch(Exception e)
-    {
-        System.out.println("Unable to initialize networking. Exiting.");
-        System.out.println(e);
-        System.exit(-1);
-    }
-    
-    // Initialize values in the Entity State PDU object. The exercise ID is 
-    // a way to differentiate between different virtual worlds on one network.
-    // Note that some values (such as the PDU type and PDU family) are set
-    // automatically when you create the ESPDU.
-    espdu.setExerciseID((short)1);
-    
-    // The EID is the unique identifier for objects in the world. This 
-    // EID should match up with the ID for the object specified in the 
-    // VMRL/x3d/virtual world.
-    EntityID eid = espdu.getEntityID();
-    eid.setSite(1);  // 0 is apparently not a valid site number, per the spec
-    eid.setApplication(1); 
-    eid.setEntity(2); 
-    
-    // Set the entity type. SISO has a big list of enumerations, so that by
-    // specifying various numbers we can say this is an M1A2 American tank,
-    // the USS Enterprise, and so on. We'll make this a tank. There is a 
-    // separate project elsehwhere in this project that implements DIS 
-    // enumerations in C++ and Java, but to keep things simple we just use
-    // numbers here.
-    EntityType entityType = espdu.getEntityType();
-    entityType.setEntityKind((short)1);      // Platform (vs lifeform, munition, sensor, etc.)
-    entityType.setCountry(225);              // USA
-    entityType.setDomain((short)1);          // Land (vs air, surface, subsurface, space)
-    entityType.setCategory((short)1);        // Tank
-    entityType.setSubcategory((short)1);     // M1 Abrams
-    entityType.setSpec((short)3);            // M1A2 Abrams
-    
-
-    Set<InetAddress> bcastAddresses = getBroadcastAddresses();
-    // Loop through sending N ESPDUs
-    try
-    {
-        System.out.println("Sending " + NUMBER_TO_SEND + " ESPDU packets to " + destinationIp.toString());
-        for(int idx = 0; idx < NUMBER_TO_SEND; idx++)
-        {
-            // DIS time is a pain in the ass. DIS time units are 2^31-1 units per
-            // hour, and time is set to DIS time units from the top of the hour. 
-            // This means that if you start sending just before the top of the hour
-            // the time units can roll over to zero as you are sending. The receivers
-            // (escpecially homegrown ones) are often not able to detect rollover
-            // and may start discarding packets as dupes or out of order. We use
-            // an NPS timestamp here, hundredths of a second since the start of the
-            // year. The DIS standard for time is often ignored in the wild; I've seen
-            // people use Unix time (seconds since 1970) and more. Or you can
-            // just stuff idx into the timestamp field to get something that is monotonically
-            // increasing.
-            
-            // Note that timestamp is used to detect duplicate and out of order packets. 
-            // That means if you DON'T change the timestamp, many implementations will simply
-            // discard subsequent packets that have an identical timestamp. Also, if they
-            // receive a PDU with an timestamp lower than the last one they received, they
-            // may discard it as an earlier, out-of-order PDU. So it is a good idea to
-            // update the timestamp on ALL packets sent.
-            
-
-            // An alterative approach: actually follow the standard. It's a crazy concept,
-            // but it might just work.
-            int ts = disTime.getDisAbsoluteTimestamp();
-            espdu.setTimestamp(ts);
-            
-            // Set the position of the entity in the world. DIS uses a cartesian 
-            // coordinate system with the origin at the center of the earth, the x
-            // axis out at the equator and prime meridian, y out at the equator and
-            // 90 deg east, and z up and out the north pole. To place an object on
-            // the earth's surface you also need a model for the shape of the earth
-            // (it's not a sphere.) All the fancy math necessary to do this is in
-            // the SEDRIS SRM package. There are also some one-off formulas for 
-            // doing conversions from, for example, lat/lon/altitude to DIS coordinates.
-            // Here we use those one-off formulas.
-
-            // Modify the position of the object. This will send the object a little
-            // due east by adding some to the longitude every iteration. Since we
-            // are on the Pacific coast, this sends the object east. Assume we are
-            // at zero altitude. In other worlds you'd use DTED to determine the
-            // local ground altitude at that lat/lon, or you'd just use ground clamping.
-            // The x and y values will change, but the z value should not.
-            
-            //lon = lon + (double)((double)idx / 100000.0);
-            //System.out.println("lla=" + lat + "," + lon + ", 0.0");
-
-            double direction = Math.pow((double)(-1.0), (double)(idx));
-            lon = lon + (direction * 0.00006);
-            System.out.println(lon);
-            
-            double disCoordinates[] = CoordinateConversions.getXYZfromLatLonDegrees(lat, lon, 1.0);
-            Vector3Double location = espdu.getEntityLocation();
-            location.setX(disCoordinates[0]);
-            location.setY(disCoordinates[1]);
-            location.setZ(disCoordinates[2]);
-            System.out.println("lat, lon:" + lat + ", " + lon);
-            System.out.println("DIS coord:" + disCoordinates[0] + ", " + disCoordinates[1] + ", " + disCoordinates[2]);
-
-            // Optionally, we can do some rotation of the entity
-            /*
-            Orientation orientation = espdu.getEntityOrientation();
-            float psi = orientation.getPsi();
-            psi = psi + idx;
-            orientation.setPsi(psi);
-            orientation.setTheta((float)(orientation.getTheta() + idx /2.0));
-             */
-            
-            // You can set other ESPDU values here, such as the velocity, acceleration,
-            // and so on.
-
-            // Marshal out the espdu object to a byte array, then send a datagram
-            // packet with that data in it.
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            DataOutputStream dos = new DataOutputStream(baos);
-            espdu.marshal(dos);
-
-            FirePdu fire = new FirePdu();
-            byte[] fireArray = fire.marshal();
-            
-            // The byte array here is the packet in DIS format. We put that into a 
-            // datagram and send it.
-            byte[] data = baos.toByteArray();
-
-            bcastAddresses = getBroadcastAddresses();
-            Iterator it = bcastAddresses.iterator();
-            while(it.hasNext())
-            {
-               InetAddress bcast = (InetAddress)it.next();
-               System.out.println("Sending bcast to " + bcast);
-               DatagramPacket packet = new DatagramPacket(data, data.length, bcast, 3000);
-               socket.send(packet);
-               packet = new DatagramPacket(fireArray, fireArray.length, bcast, 3000);
-               //socket.send(packet);
-            }
-            
-            // Send every 1 sec. Otherwise this will be all over in a fraction of a second.
-            Thread.sleep(3000);
-
-            location = espdu.getEntityLocation();
-            
-            System.out.println("Espdu #" + idx + " EID=[" + eid.getSite() + "," + eid.getApplication() + "," + eid.getEntity() + "]");
-            System.out.println(" DIS coordinates location=[" + location.getX() + "," + location.getY() + "," + location.getZ() + "]");
-            double c[] = {location.getX(), location.getY(), location.getZ()};
-            double lla[] = CoordinateConversions.xyzToLatLonDegrees(c);
-//            System.out.println(" Location (lat/lon/alt): [" + lla[0] + ", " + lla[1] + ", " + lla[2] + "]");
-
-        }
-    }
-    catch(Exception e)
-    {
-        System.out.println(e);
-    }
-        
-}
-
- /**
-    * A number of sites get all snippy about using 255.255.255.255 for a bcast
-    * address; it trips their security software and they kick you off their 
-    * network. (Comcast, NPS.) This determines the bcast address for all
-    * connected interfaces, based on the IP and subnet mask. If you have
-    * a dual-homed host it will return a bcast address for both. If you have
-    * some VMs running on your host this will pick up the addresses for those
-    * as well--eg running VMWare on your laptop with a local IP this will
-    * also pick up a 192.168 address assigned to the VM by the host OS.
-    * 
-    * @return set of all bcast addresses
-    */
-   public static Set<InetAddress> getBroadcastAddresses()
-   {
-       Set<InetAddress> bcastAddresses = new HashSet<InetAddress>();
-       Enumeration interfaces;
-       
-       try
-       {
-           interfaces = NetworkInterface.getNetworkInterfaces();
-           
-           while(interfaces.hasMoreElements())
-           {
-               NetworkInterface anInterface = (NetworkInterface)interfaces.nextElement();
-               
-               if(anInterface.isUp())
-               {
-                   Iterator it = anInterface.getInterfaceAddresses().iterator();
-                   while(it.hasNext())
-                   {
-                       InterfaceAddress anAddress = (InterfaceAddress)it.next();
-                       if((anAddress == null || anAddress.getAddress().isLinkLocalAddress()))
-                           continue;
-                       
-                       //System.out.println("Getting bcast address for " + anAddress);
-                       InetAddress abcast = anAddress.getBroadcast();
-                       if(abcast != null)
-                        bcastAddresses.add(abcast);
-                   }
-               }
-           }
-           
-       }
-       catch(Exception e)
-       {
-           e.printStackTrace();
-           System.out.println(e);
-       }
-       
-       return bcastAddresses;   
-   }
-
-}
diff --git a/projects/Assignments/homework3/AngelBlank/ABEspduSenderB.java b/projects/Assignments/homework3/AngelBlank/ABEspduSenderB.java
deleted file mode 100644
index c562c08720f8393185c735366975a341e6231bb8..0000000000000000000000000000000000000000
--- a/projects/Assignments/homework3/AngelBlank/ABEspduSenderB.java
+++ /dev/null
@@ -1,323 +0,0 @@
-package AngelBlank;
-
-import java.io.*;
-import java.net.*;
-import java.util.*;
-
-import edu.nps.moves.dis.*;
-import edu.nps.moves.disutil.CoordinateConversions;
-import edu.nps.moves.disutil.DisTime;
-
-/**
- * Creates and sends ESPDUs in IEEE binary format. 
- *
- * @author DMcG
- */
-public class ABEspduSenderB 
-{
-    public static final int NUMBER_TO_SEND = 5000;
-
-    public enum NetworkMode{UNICAST, MULTICAST, BROADCAST};
-
-    /** default multicast group we send on */
-    public static final String DEFAULT_MULTICAST_GROUP = "239.1.2.3";
-   
-    /** Port we send on */
-    public static final int    DIS_DESTINATION_PORT = 3000;
-    
-/** Possible system properties, passed in via -Dattr=val
-     * networkMode: unicast, broadcast, multicast
-     * destinationIp: where to send the packet. If in multicast mode, this can be mcast.
-     *                To determine bcast destination IP, use an online bcast address
-     *                caclulator, for example http://www.remotemonitoringsystems.ca/broadcast.php
-     *                If in mcast mode, a join() will be done on the mcast address.
-     * port: port used for both source and destination.
-     * @param args 
-     */
-public static void main(String args[])
-{
-    /** an entity state pdu */
-    EntityStatePdu espdu = new EntityStatePdu();
-    MulticastSocket socket = null;
-    DisTime disTime = DisTime.getInstance();
-    int alternator = -1;
-    
-    // ICBM coordinates for my office
-    double lat = 36.595517; 
-    double lon = -121.877000;
-
-    
-    // Default settings. These are used if no system properties are set. 
-    // If system properties are passed in, these are over ridden.
-    int port = DIS_DESTINATION_PORT;
-    NetworkMode mode = NetworkMode.MULTICAST;
-    InetAddress destinationIp = null;
-    
-    try
-    {
-        destinationIp = InetAddress.getByName(DEFAULT_MULTICAST_GROUP);
-    }
-    catch(Exception e)
-    {
-        System.out.println(e + " Cannot create multicast address");
-        System.exit(0);
-    }
-    
-    // All system properties, passed in on the command line via -Dattribute=value
-    Properties systemProperties = System.getProperties();
-    
-    // IP address we send to
-    String destinationIpString = systemProperties.getProperty("destinationIp");
-    
-    // Port we send to, and local port we open the socket on
-    String portString = systemProperties.getProperty("port");
-    
-    // Network mode: unicast, multicast, broadcast
-    String networkModeString = systemProperties.getProperty("networkMode"); // unicast or multicast or broadcast
-        
-
-    // Set up a socket to send information
-    try
-    {
-        // Port we send to
-        if(portString != null)
-            port = Integer.parseInt(portString);
-        
-        socket = new MulticastSocket(port);
-        
-        // Where we send packets to, the destination IP address
-        if(destinationIpString != null)
-        {
-            destinationIp = InetAddress.getByName(destinationIpString);
-        }
-
-        // Type of transport: unicast, broadcast, or multicast
-        if(networkModeString != null)
-        {
-            if(networkModeString.equalsIgnoreCase("unicast"))
-                mode = NetworkMode.UNICAST;
-            else if(networkModeString.equalsIgnoreCase("broadcast"))
-                mode = NetworkMode.BROADCAST;
-            else if(networkModeString.equalsIgnoreCase("multicast"))
-            {
-                mode = NetworkMode.MULTICAST;
-                if(!destinationIp.isMulticastAddress())
-                {
-                    throw new RuntimeException("Sending to multicast address, but destination address " + destinationIp.toString() + "is not multicast");
-                }
-                
-                socket.joinGroup(destinationIp);
-                
-            }
-        } // end networkModeString
-    }
-    catch(Exception e)
-    {
-        System.out.println("Unable to initialize networking. Exiting.");
-        System.out.println(e);
-        System.exit(-1);
-    }
-    
-    // Initialize values in the Entity State PDU object. The exercise ID is 
-    // a way to differentiate between different virtual worlds on one network.
-    // Note that some values (such as the PDU type and PDU family) are set
-    // automatically when you create the ESPDU.
-    espdu.setExerciseID((short)1);
-    
-    // The EID is the unique identifier for objects in the world. This 
-    // EID should match up with the ID for the object specified in the 
-    // VMRL/x3d/virtual world.
-    EntityID eid = espdu.getEntityID();
-    eid.setSite(1);  // 0 is apparently not a valid site number, per the spec
-    eid.setApplication(1); 
-    eid.setEntity(2); 
-    
-    // Set the entity type. SISO has a big list of enumerations, so that by
-    // specifying various numbers we can say this is an M1A2 American tank,
-    // the USS Enterprise, and so on. We'll make this a tank. There is a 
-    // separate project elsehwhere in this project that implements DIS 
-    // enumerations in C++ and Java, but to keep things simple we just use
-    // numbers here.
-    EntityType entityType = espdu.getEntityType();
-    entityType.setEntityKind((short)1);      // Platform (vs lifeform, munition, sensor, etc.)
-    entityType.setCountry(225);              // USA
-    entityType.setDomain((short)1);          // Land (vs air, surface, subsurface, space)
-    entityType.setCategory((short)1);        // Tank
-    entityType.setSubcategory((short)1);     // M1 Abrams
-    entityType.setSpec((short)3);            // M1A2 Abrams
-    
-
-    Set<InetAddress> bcastAddresses = getBroadcastAddresses();
-    // Loop through sending N ESPDUs
-    try
-    {
-        System.out.println("Sending " + NUMBER_TO_SEND + " ESPDU packets to " + destinationIp.toString());
-        for(int idx = 0; idx < NUMBER_TO_SEND; idx++)
-        {
-            // DIS time is a pain in the ass. DIS time units are 2^31-1 units per
-            // hour, and time is set to DIS time units from the top of the hour. 
-            // This means that if you start sending just before the top of the hour
-            // the time units can roll over to zero as you are sending. The receivers
-            // (escpecially homegrown ones) are often not able to detect rollover
-            // and may start discarding packets as dupes or out of order. We use
-            // an NPS timestamp here, hundredths of a second since the start of the
-            // year. The DIS standard for time is often ignored in the wild; I've seen
-            // people use Unix time (seconds since 1970) and more. Or you can
-            // just stuff idx into the timestamp field to get something that is monotonically
-            // increasing.
-            
-            // Note that timestamp is used to detect duplicate and out of order packets. 
-            // That means if you DON'T change the timestamp, many implementations will simply
-            // discard subsequent packets that have an identical timestamp. Also, if they
-            // receive a PDU with an timestamp lower than the last one they received, they
-            // may discard it as an earlier, out-of-order PDU. So it is a good idea to
-            // update the timestamp on ALL packets sent.
-            
-
-            // An alterative approach: actually follow the standard. It's a crazy concept,
-            // but it might just work.
-            int ts = disTime.getDisAbsoluteTimestamp();
-            espdu.setTimestamp(ts);
-            
-            // Set the position of the entity in the world. DIS uses a cartesian 
-            // coordinate system with the origin at the center of the earth, the x
-            // axis out at the equator and prime meridian, y out at the equator and
-            // 90 deg east, and z up and out the north pole. To place an object on
-            // the earth's surface you also need a model for the shape of the earth
-            // (it's not a sphere.) All the fancy math necessary to do this is in
-            // the SEDRIS SRM package. There are also some one-off formulas for 
-            // doing conversions from, for example, lat/lon/altitude to DIS coordinates.
-            // Here we use those one-off formulas.
-
-            // Modify the position of the object. This will send the object a little
-            // due east by adding some to the longitude every iteration. Since we
-            // are on the Pacific coast, this sends the object east. Assume we are
-            // at zero altitude. In other worlds you'd use DTED to determine the
-            // local ground altitude at that lat/lon, or you'd just use ground clamping.
-            // The x and y values will change, but the z value should not.
-            
-            //lon = lon + (double)((double)idx / 100000.0);
-            //System.out.println("lla=" + lat + "," + lon + ", 0.0");
-
-            double direction = Math.pow((double)(-1.0), (double)(idx));
-            lon = lon + (direction * 0.00006);
-            System.out.println(lon);
-            
-            double disCoordinates[] = CoordinateConversions.getXYZfromLatLonDegrees(lat, lon, 1.0);
-            Vector3Double location = espdu.getEntityLocation();
-            location.setX(disCoordinates[0]);
-            location.setY(disCoordinates[1]);
-            location.setZ(disCoordinates[2]);
-            System.out.println("lat, lon:" + lat + ", " + lon);
-            System.out.println("DIS coord:" + disCoordinates[0] + ", " + disCoordinates[1] + ", " + disCoordinates[2]);
-
-            // Optionally, we can do some rotation of the entity
-            /*
-            Orientation orientation = espdu.getEntityOrientation();
-            float psi = orientation.getPsi();
-            psi = psi + idx;
-            orientation.setPsi(psi);
-            orientation.setTheta((float)(orientation.getTheta() + idx /2.0));
-             */
-            
-            // You can set other ESPDU values here, such as the velocity, acceleration,
-            // and so on.
-
-            // Marshal out the espdu object to a byte array, then send a datagram
-            // packet with that data in it.
-            ByteArrayOutputStream baos = new ByteArrayOutputStream();
-            DataOutputStream dos = new DataOutputStream(baos);
-            espdu.marshal(dos);
-
-            FirePdu fire = new FirePdu();
-            byte[] fireArray = fire.marshal();
-            
-            // The byte array here is the packet in DIS format. We put that into a 
-            // datagram and send it.
-            byte[] data = baos.toByteArray();
-
-            bcastAddresses = getBroadcastAddresses();
-            Iterator it = bcastAddresses.iterator();
-            while(it.hasNext())
-            {
-               InetAddress bcast = (InetAddress)it.next();
-               System.out.println("Sending bcast to " + bcast);
-               DatagramPacket packet = new DatagramPacket(data, data.length, bcast, 3000);
-               socket.send(packet);
-               packet = new DatagramPacket(fireArray, fireArray.length, bcast, 3000);
-               //socket.send(packet);
-            }
-            
-            // Send every 1 sec. Otherwise this will be all over in a fraction of a second.
-            Thread.sleep(3000);
-
-            location = espdu.getEntityLocation();
-            
-            System.out.println("Espdu #" + idx + " EID=[" + eid.getSite() + "," + eid.getApplication() + "," + eid.getEntity() + "]");
-            System.out.println(" DIS coordinates location=[" + location.getX() + "," + location.getY() + "," + location.getZ() + "]");
-            double c[] = {location.getX(), location.getY(), location.getZ()};
-            double lla[] = CoordinateConversions.xyzToLatLonDegrees(c);
-//            System.out.println(" Location (lat/lon/alt): [" + lla[0] + ", " + lla[1] + ", " + lla[2] + "]");
-
-        }
-    }
-    catch(Exception e)
-    {
-        System.out.println(e);
-    }
-        
-}
-
- /**
-    * A number of sites get all snippy about using 255.255.255.255 for a bcast
-    * address; it trips their security software and they kick you off their 
-    * network. (Comcast, NPS.) This determines the bcast address for all
-    * connected interfaces, based on the IP and subnet mask. If you have
-    * a dual-homed host it will return a bcast address for both. If you have
-    * some VMs running on your host this will pick up the addresses for those
-    * as well--eg running VMWare on your laptop with a local IP this will
-    * also pick up a 192.168 address assigned to the VM by the host OS.
-    * 
-    * @return set of all bcast addresses
-    */
-   public static Set<InetAddress> getBroadcastAddresses()
-   {
-       Set<InetAddress> bcastAddresses = new HashSet<InetAddress>();
-       Enumeration interfaces;
-       
-       try
-       {
-           interfaces = NetworkInterface.getNetworkInterfaces();
-           
-           while(interfaces.hasMoreElements())
-           {
-               NetworkInterface anInterface = (NetworkInterface)interfaces.nextElement();
-               
-               if(anInterface.isUp())
-               {
-                   Iterator it = anInterface.getInterfaceAddresses().iterator();
-                   while(it.hasNext())
-                   {
-                       InterfaceAddress anAddress = (InterfaceAddress)it.next();
-                       if((anAddress == null || anAddress.getAddress().isLinkLocalAddress()))
-                           continue;
-                       
-                       //System.out.println("Getting bcast address for " + anAddress);
-                       InetAddress abcast = anAddress.getBroadcast();
-                       if(abcast != null)
-                        bcastAddresses.add(abcast);
-                   }
-               }
-           }
-           
-       }
-       catch(Exception e)
-       {
-           e.printStackTrace();
-           System.out.println(e);
-       }
-       
-       return bcastAddresses;   
-   }
-
-}
diff --git a/projects/Assignments/AngelBlankFP/EspduReceiver.java b/projects/Assignments/homework3/EspduReceiver.java
similarity index 100%
rename from projects/Assignments/AngelBlankFP/EspduReceiver.java
rename to projects/Assignments/homework3/EspduReceiver.java
diff --git a/projects/Assignments/AngelBlankFP/EspduSender.java b/projects/Assignments/homework3/EspduSender_1.java
similarity index 100%
rename from projects/Assignments/AngelBlankFP/EspduSender.java
rename to projects/Assignments/homework3/EspduSender_1.java
diff --git a/projects/Assignments/nbproject/build-impl.xml b/projects/Assignments/nbproject/build-impl.xml
index 6072af6763d68a47105c0c0fdef3c488c699ec42..98d9dffdf429625ed651b3d1f9aceb2ac459ea6d 100644
--- a/projects/Assignments/nbproject/build-impl.xml
+++ b/projects/Assignments/nbproject/build-impl.xml
@@ -125,6 +125,7 @@ is divided into following sections:
         </condition>
         <condition property="have.sources">
             <or>
+                <available file="${src.FinalProjects.dir}"/>
                 <available file="${src.homework3.dir}"/>
                 <available file="${src.homework1.dir}"/>
                 <available file="${src.homework2.dir}"/>
@@ -230,6 +231,7 @@ is divided into following sections:
         <!-- You can override this target in the ../build.xml file. -->
     </target>
     <target depends="-pre-init,-init-private,-init-user,-init-project,-do-init" name="-init-check">
+        <fail unless="src.FinalProjects.dir">Must set src.FinalProjects.dir</fail>
         <fail unless="src.homework3.dir">Must set src.homework3.dir</fail>
         <fail unless="src.homework1.dir">Must set src.homework1.dir</fail>
         <fail unless="src.homework2.dir">Must set src.homework2.dir</fail>
@@ -253,7 +255,7 @@ is divided into following sections:
     </target>
     <target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
         <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.homework3.dir}:${src.homework1.dir}:${src.homework2.dir}" name="srcdir"/>
+            <attribute default="${src.FinalProjects.dir}:${src.homework3.dir}:${src.homework1.dir}:${src.homework2.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <attribute default="${javac.processorpath}" name="processorpath"/>
@@ -294,7 +296,7 @@ is divided into following sections:
     </target>
     <target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
         <macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.homework3.dir}:${src.homework1.dir}:${src.homework2.dir}" name="srcdir"/>
+            <attribute default="${src.FinalProjects.dir}:${src.homework3.dir}:${src.homework1.dir}:${src.homework2.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <attribute default="${javac.processorpath}" name="processorpath"/>
@@ -327,7 +329,7 @@ is divided into following sections:
     </target>
     <target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
         <macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
-            <attribute default="${src.homework3.dir}:${src.homework1.dir}:${src.homework2.dir}" name="srcdir"/>
+            <attribute default="${src.FinalProjects.dir}:${src.homework3.dir}:${src.homework1.dir}:${src.homework2.dir}" name="srcdir"/>
             <attribute default="${build.classes.dir}" name="destdir"/>
             <attribute default="${javac.classpath}" name="classpath"/>
             <sequential>
@@ -915,11 +917,12 @@ is divided into following sections:
                 <include name="*"/>
             </dirset>
         </pathconvert>
-        <j2seproject3:depend srcdir="${src.homework3.dir}:${src.homework1.dir}:${src.homework2.dir}:${build.generated.subdirs}"/>
+        <j2seproject3:depend srcdir="${src.FinalProjects.dir}:${src.homework3.dir}:${src.homework1.dir}:${src.homework2.dir}:${build.generated.subdirs}"/>
     </target>
     <target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
         <j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
         <copy todir="${build.classes.dir}">
+            <fileset dir="${src.FinalProjects.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.homework3.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.homework1.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
             <fileset dir="${src.homework2.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
@@ -943,7 +946,7 @@ is divided into following sections:
     <target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
         <fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
         <j2seproject3:force-recompile/>
-        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.homework3.dir}:${src.homework1.dir}:${src.homework2.dir}"/>
+        <j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.FinalProjects.dir}:${src.homework3.dir}:${src.homework1.dir}:${src.homework2.dir}"/>
     </target>
     <target name="-post-compile-single">
         <!-- Empty placeholder for easier customization. -->
@@ -1209,6 +1212,9 @@ is divided into following sections:
             <classpath>
                 <path path="${javac.classpath}"/>
             </classpath>
+            <fileset dir="${src.FinalProjects.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
+                <filename name="**/*.java"/>
+            </fileset>
             <fileset dir="${src.homework3.dir}" excludes="${bug5101868workaround},${excludes}" includes="${includes}">
                 <filename name="**/*.java"/>
             </fileset>
@@ -1225,6 +1231,9 @@ is divided into following sections:
             <arg line="${javadoc.endorsed.classpath.cmd.line.arg}"/>
         </javadoc>
         <copy todir="${dist.javadoc.dir}">
+            <fileset dir="${src.FinalProjects.dir}" excludes="${excludes}" includes="${includes}">
+                <filename name="**/doc-files/**"/>
+            </fileset>
             <fileset dir="${src.homework3.dir}" excludes="${excludes}" includes="${includes}">
                 <filename name="**/doc-files/**"/>
             </fileset>
diff --git a/projects/Assignments/nbproject/genfiles.properties b/projects/Assignments/nbproject/genfiles.properties
index a7551219a8e9d0c11a7420914e37e8d1a7c24ac8..389f40c35d09b10c547e5f59cc1c08f35ba603ed 100644
--- a/projects/Assignments/nbproject/genfiles.properties
+++ b/projects/Assignments/nbproject/genfiles.properties
@@ -1,8 +1,8 @@
-build.xml.data.CRC32=b21d1ee7
+build.xml.data.CRC32=80187eb2
 build.xml.script.CRC32=71581cc3
 build.xml.stylesheet.CRC32=8064a381@1.80.1.48
 # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
 # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=b21d1ee7
-nbproject/build-impl.xml.script.CRC32=3800b3a5
+nbproject/build-impl.xml.data.CRC32=80187eb2
+nbproject/build-impl.xml.script.CRC32=53c6ba36
 nbproject/build-impl.xml.stylesheet.CRC32=830a3534@1.80.1.48
diff --git a/projects/Assignments/nbproject/project.properties b/projects/Assignments/nbproject/project.properties
index dfc77e1dfa6738b878ec9d091d8ba3d02fc8db0d..773370d3fc0fa0b635eb9eedd5281b9c0023bede 100644
--- a/projects/Assignments/nbproject/project.properties
+++ b/projects/Assignments/nbproject/project.properties
@@ -76,6 +76,7 @@ run.test.classpath=\
     ${javac.test.classpath}:\
     ${build.test.classes.dir}
 source.encoding=UTF-8
+src.FinalProjects.dir=FinalProjects
 src.homework1.dir=homework1
 src.homework2.dir=homework2
 src.homework3.dir=homework3
diff --git a/projects/Assignments/nbproject/project.xml b/projects/Assignments/nbproject/project.xml
index 7fea14ab803a181d74afd843122afaf65df829fd..667d58689263f6d49e6a665ec562cb3c9c671879 100644
--- a/projects/Assignments/nbproject/project.xml
+++ b/projects/Assignments/nbproject/project.xml
@@ -5,6 +5,7 @@
         <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
             <name>Assignments: MV3500 Homework</name>
             <source-roots>
+                <root id="src.FinalProjects.dir"/>
                 <root id="src.homework3.dir"/>
                 <root id="src.homework1.dir"/>
                 <root id="src.homework2.dir"/>