diff --git a/test/edu/nps/moves/dis7/EntityStatePduTest.java b/test/edu/nps/moves/dis7/EntityStatePduTest.java
index f86937e2804ea050d9017d9e74689f4ed9995499..9f8433857e3156df599a0fc20660a6e2cd6d771c 100644
--- a/test/edu/nps/moves/dis7/EntityStatePduTest.java
+++ b/test/edu/nps/moves/dis7/EntityStatePduTest.java
@@ -4,7 +4,8 @@
  */
 package edu.nps.moves.dis7;
 
-import edu.nps.moves.dis7.entities.usa.platform.land.M1A2;
+import edu.nps.moves.dis7.*;
+import edu.nps.moves.dis7.entities.usa.munition.other.M1A2;
 import edu.nps.moves.dis7.enumerations.Country;
 import edu.nps.moves.dis7.enumerations.EntityKind;
 import edu.nps.moves.dis7.utilities.DisThreadedNetIF;
@@ -82,11 +83,54 @@ public class EntityStatePduTest
   {
      sendPdu(newPdu); // will wait a while
      assertTrue(receivedPdu != null,         "No response from network receive");
+     
+     assertEquals (         newPdu.getProtocolVersion(),         receivedPdu.getProtocolVersion(), "mismatched ProtocolVersion");
+     // TODO compatibility version
+     assertEquals (         newPdu.getExerciseID(),              receivedPdu.getExerciseID(),      "mismatched ExerciseID");
+     assertEquals (         newPdu.getPduType(),                 receivedPdu.getPduType(),         "mismatched PduType");
+     assertEquals (         newPdu.getProtocolFamily(),          receivedPdu.getProtocolFamily(),  "mismatched ProtocolFamily"); // derived from PduType
+     assertEquals(((PduBase)newPdu).getPduStatus(),    ((PduBase)receivedPdu).getPduStatus(),      "mismatched PduStatus");
+     assertEquals(((PduBase)newPdu).getPadding(),      ((PduBase)receivedPdu).getPadding(),        "mismatched header padding");
+     // TODO HDR length
+     assertEquals (newPdu.getTimestamp(),                        receivedPdu.getTimestamp(),       "mismatched Timestamp");
+     
+     // can cast PDUs at this point since PduType matched
+     EntityStatePdu      newEspdu = (EntityStatePdu) newPdu;
+     EntityStatePdu receivedEspdu = (EntityStatePdu) newPdu;
+     assertEquals (newEspdu.getEntityID(),                receivedEspdu.getEntityID(),                "mismatched EntityID");
+     // TODO Sequence number
+     assertEquals (newEspdu.getEntityType(),              receivedEspdu.getEntityType(),              "mismatched EntityType");
+     // padding?
+     assertEquals (newEspdu.getEntityAppearance(),        receivedEspdu.getEntityAppearance(),        "mismatched EntityAppearance");
+     assertEquals (newEspdu.getCapabilities(),            receivedEspdu.getCapabilities(),            "mismatched EntityCapabilities");
+     assertEquals (newEspdu.getEntityLocation(),          receivedEspdu.getEntityLocation(),          "mismatched EntityLocation");
+     assertEquals (newEspdu.getEntityOrientation(),       receivedEspdu.getEntityOrientation(),       "mismatched EntityOrientation");
+     assertEquals (newEspdu.getForceId(),                 receivedEspdu.getForceId(),                 "mismatched EntityForceId");
+     assertEquals (newEspdu.getMarking(),                 receivedEspdu.getMarking(),                 "mismatched Marking");
+     assertEquals (newEspdu.getDeadReckoningParameters(), receivedEspdu.getDeadReckoningParameters(), "mismatched DeadReckoningParameters");
+     
+     // attached parts, utility method for NumberVariableParameters
+     assertEquals (newEspdu.getVariableParameters(),      receivedEspdu.getVariableParameters(),      "mismatched VariableParameters");
+     assertEquals (newEspdu.getEntityLinearVelocity(),    receivedEspdu.getEntityLinearVelocity(),    "mismatched EntityLinearVelocity");
+
+     // trace option to compare strings, JSON or XML
+     if (false) // true || !newEspdu.toString().equals(receivedEspdu.toString())) 
+     {
+         System.err.println("     newEspdu=" +      newEspdu.toString());
+         System.err.println("receivedEspdu=" + receivedEspdu.toString());
+     }
+     assertEquals (newEspdu.toString(),    receivedEspdu.toString(),    "mismatched toString()");
+     // built-in object comparison
+     assertTrue   (newEspdu.equalsImpl(receivedEspdu),                                                "EntityStatePdu.equalsImpl() built-in object comparison");
+     // final recheck that everything adds up
      assertEquals(newPdu.getMarshalledSize(),receivedPdu.getMarshalledSize(),
         "Marshalled size mismatch," +
             "sent (" +      newPdu.getMarshalledSize() + " bytes) and " +
         "recieved (" + receivedPdu.getMarshalledSize() + " bytes)");
-     assertTrue(compare(newPdu,receivedPdu), "Comparison failed");
+     assertEquals (newPdu.getLength(),         receivedPdu.getLength(), "mismatched length"); // from Pdu superclass
+     
+//   comparison of class Pdu is questionable
+//   assertTrue(compare(newPdu,receivedPdu), "compare() method failed for original and received PDUs");
      receivedPdu = null; // ensure cleared prior to next test
   }
   
@@ -104,7 +148,7 @@ public class EntityStatePduTest
  
   private boolean compare(Pdu pdu1, Pdu pdu2)
   {
-    return pdu1.equals(pdu2);
+    return pdu1.equalsImpl(pdu2);
   }
   
   private void setUpReceiver(Pdu newPdu)