diff --git a/test/edu/nps/moves/dis7/EntityStatePduTest.java b/test/edu/nps/moves/dis7/EntityStatePduTest.java
index 0990e496c715171c9fbf8b1a7cfeba0b94283e07..d245f8f466278f0d1b1169866252e3b697d49104 100644
--- a/test/edu/nps/moves/dis7/EntityStatePduTest.java
+++ b/test/edu/nps/moves/dis7/EntityStatePduTest.java
@@ -4,13 +4,22 @@
  */
 package edu.nps.moves.dis7;
 
-import edu.nps.moves.dis7.enumerations.LandPlatformCapabilities;
+import edu.nps.moves.dis7.entities.usa.platform.land.M1A2;
+import edu.nps.moves.dis7.enumerations.Country;
+import edu.nps.moves.dis7.enumerations.EntityKind;
+import edu.nps.moves.dis7.utilities.DisThreadedNetIF;
+import edu.nps.moves.dis7.utilities.PduFactory;
+import edu.nps.moves.dis7.enumerations.PlatformDomain;
 import org.junit.jupiter.api.*;
 import static org.junit.jupiter.api.Assertions.*;
 
 @DisplayName("Entity State Pdu Test")
 public class EntityStatePduTest
 {
+  DisThreadedNetIF             disThreadedNetworkInterface;
+  Pdu                          receivedPdu;
+  DisThreadedNetIF.PduListener pduListener;
+    
   @BeforeAll
   public static void setUpClass()
   {
@@ -25,29 +34,89 @@ public class EntityStatePduTest
   @BeforeEach
   public void setUp()
   {
+      disThreadedNetworkInterface = new DisThreadedNetIF();
+      pduListener = new DisThreadedNetIF.PduListener() {
+          @Override
+          public void incomingPdu(Pdu newPdu) {
+              setUpReceiver(newPdu);
+  }
+      };
+      disThreadedNetworkInterface.addListener(pduListener);
   }
 
   @AfterEach
   public void tearDown()
   {
+      disThreadedNetworkInterface.removeListener(pduListener);
+      disThreadedNetworkInterface.kill();
+      disThreadedNetworkInterface = null;
   }
 
   @Test
-  public void testEntityCapabilities()
+  public void testRoundTrip()
+  {
+    PduFactory pduFactory = new PduFactory();
+    
+    EntityStatePdu    espdu = pduFactory.makeEntityStatePdu(); 
+    // TODO alternate constructors and utility methods
+    EntityID       entityID = new EntityID().setSiteID((short)1).setApplicationID((short)2).setEntityID((short)3);
+    EntityType   entityType = new EntityType()
+                    .setEntityKind (EntityKind.PLATFORM).setEntityKind(EntityKind.PLATFORM)  //(short) 1); // Platform (vs lifeform, munition, sensor, etc.); //(short) 1); // Platform (vs lifeform, munition, sensor, etc.)
+                    .setCountry    (Country.UNITED_STATES_OF_AMERICA_USA)  // 225 USA
+                    .setDomain     (Domain.inst(PlatformDomain.LAND))      // Land (vs air, surface, subsurface, space)
+                    .setCategory   ((byte) 1)   // Tank
+                    .setSubCategory((byte) 1)   // M1 Abrams
+                    .setSpecific   ((byte) 3);  // M1A2 Abrams
+    
+    espdu.setEntityType(entityType);
+    // Alternate way using entity jar(s)
+    espdu.setEntityType(new edu.nps.moves.dis7.entities.usa.platform.land.M1A2());
+    // or simply use an enumeration by name, with accompanying import statement above
+    espdu.setEntityType(new M1A2()); 
+        
+    testOne(espdu);
+    testOne(espdu.setEntityID(entityID).setEntityType(entityType));   
+  }
+  
+  private void testOne(Pdu newPdu)
+  {
+     sendPdu(newPdu); // will wait a while
+     assertTrue(receivedPdu != null,         "No response from network receive");
+     assertTrue(compare(newPdu,receivedPdu), "Comparison failed");
+     assertEqual(newPdu.getMarshalledSize(),receivedPdu),getMarshalledSize(),"Marshalled size mismatch," +
+            "sent (" +      newPdu.getMarshalledSize() + " bytes) and " +
+        "recieved (" + receivedPdu.getMarshalledSize() + " bytes)");
+     receivedPdu = null; // ensure cleared prior to next test
+  }
+  
+  private void sendPdu(Pdu pdu)
   {
-    Throwable thr = null;
     try {
-      EntityStatePdu espdu = new EntityStatePdu();
-      espdu.setCapabilities(new LandPlatformCapabilities());
+      disThreadedNetworkInterface.send(pdu);
+      Thread.sleep(100);
     }
-    catch (Throwable t) {
-      thr = t;
+    catch (InterruptedException ex) {
+      System.err.println("Error sending Multicast: " + ex.getLocalizedMessage());
+      System.exit(1);
     }
-    assertNull(thr, "Exception indicates error creating EntityStatePdu");
+  }
+ 
+  private boolean compare(Pdu pdu1, Pdu pdu2)
+  {
+    return pdu1.equals(pdu2);
+  }
+  
+  private void setUpReceiver(Pdu newPdu)
+  {
+    receivedPdu = newPdu;
   }
   
   public static void main(String[] args)
   {
-    new EntityStatePduTest().testEntityCapabilities();
+    EntityStatePduTest entityStatePduTest = new EntityStatePduTest();
+    
+    entityStatePduTest.setUp();
+    entityStatePduTest.testRoundTrip();
+    entityStatePduTest.tearDown();
   }
 }