diff --git a/test/edu/nps/moves/dis7/BitFieldRoundTripTest.java b/test/edu/nps/moves/dis7/BitFieldRoundTripTest.java
index 602e02052dd784a27d0b124d1489a49c6c75ade9..733fdf0dfa80831305ee15300bc0e2cf9bb5d4e1 100644
--- a/test/edu/nps/moves/dis7/BitFieldRoundTripTest.java
+++ b/test/edu/nps/moves/dis7/BitFieldRoundTripTest.java
@@ -17,6 +17,7 @@ public class BitFieldRoundTripTest
 {
     Pdu receivedPdu;
     DisThreadedNetIF netif;
+    DisThreadedNetIF.PduListener lis;
 
   @BeforeAll
   public static void setUpClass()
@@ -33,12 +34,19 @@ public class BitFieldRoundTripTest
   public void setUp()
   {   
       netif = new DisThreadedNetIF();
-      netif.addListener(pdu -> setUpReceiver(pdu));
+      lis = new DisThreadedNetIF.PduListener() {
+          @Override
+          public void incomingPdu(Pdu pdu) {
+              setUpReceiver(pdu);
+          }
+      };
+      netif.addListener(lis);
   }
 
   @AfterEach
   public void tearDown()
   {
+      netif.removeListener(lis);
       netif.kill();
       netif = null;
   }
@@ -69,7 +77,6 @@ public class BitFieldRoundTripTest
       .set(LandPlatformAppearance.IS_FROZEN,1);
   
     try {
-      Thread.sleep(250l); // make sure receiver is listening
       netif.send(espdu);
       Thread.sleep(100l); 
     }
diff --git a/test/edu/nps/moves/dis7/CommentPdusTest.java b/test/edu/nps/moves/dis7/CommentPdusTest.java
index daceed84eb8f577b2d3fcab8279277320fdef41c..c376e8155f73c0e78d524bf5b8b9b4adea9389df 100644
--- a/test/edu/nps/moves/dis7/CommentPdusTest.java
+++ b/test/edu/nps/moves/dis7/CommentPdusTest.java
@@ -15,6 +15,7 @@ public class CommentPdusTest
 {
   DisThreadedNetIF netif;
   Pdu receivedPdu;
+  DisThreadedNetIF.PduListener lis;
     
   @BeforeAll
   public static void setUpClass()
@@ -29,14 +30,21 @@ public class CommentPdusTest
 
   @BeforeEach
   public void setUp()
-  {
+  {   
       netif = new DisThreadedNetIF();
-      netif.addListener(pdu -> setUpReceiver(pdu));
+      lis = new DisThreadedNetIF.PduListener() {
+          @Override
+          public void incomingPdu(Pdu pdu) {
+              setUpReceiver(pdu);
+          }
+      };
+      netif.addListener(lis);
   }
 
   @AfterEach
   public void tearDown()
   {
+      netif.removeListener(lis);
       netif.kill();
       netif = null;
   }
@@ -68,7 +76,6 @@ public class CommentPdusTest
   private void sendPdu(Pdu pdu)
   {
     try {
-      Thread.sleep(250l); // make sure receiver is listening
       netif.send(pdu);
       Thread.sleep(100l);
     }
diff --git a/test/edu/nps/moves/dis7/DataQueryPduRoundTripTest.java b/test/edu/nps/moves/dis7/DataQueryPduRoundTripTest.java
index 84fafbb9a4ccd6a3f07aff28972601959dc2fd4d..e11bf3c478ad335394034f667cb775f1dfd3c735 100644
--- a/test/edu/nps/moves/dis7/DataQueryPduRoundTripTest.java
+++ b/test/edu/nps/moves/dis7/DataQueryPduRoundTripTest.java
@@ -16,6 +16,7 @@ public class DataQueryPduRoundTripTest
 
  Pdu receivedPdu;
  DisThreadedNetIF netif;
+ DisThreadedNetIF.PduListener lis;
 
   @BeforeAll
   public static void setUpClass()
@@ -30,14 +31,21 @@ public class DataQueryPduRoundTripTest
 
   @BeforeEach
   public void setUp()
-  {
+  {   
       netif = new DisThreadedNetIF();
-      netif.addListener(pdu -> setUpReceiver(pdu));
+      lis = new DisThreadedNetIF.PduListener() {
+          @Override
+          public void incomingPdu(Pdu pdu) {
+              setUpReceiver(pdu);
+          }
+      };
+      netif.addListener(lis);
   }
 
   @AfterEach
   public void tearDown()
   {
+      netif.removeListener(lis);
       netif.kill();
       netif = null;
   }
@@ -99,9 +107,8 @@ public class DataQueryPduRoundTripTest
     sendingPdu.getVariableDatums().add(variableDatum2);
 
     try {
-      Thread.sleep(250l); // make sure receiver is listening
       netif.send(sendingPdu);
-      Thread.sleep(1000l); 
+      Thread.sleep(100l);
     }
     catch (InterruptedException ex) {
       System.err.println("Error sending Multicast: " + ex.getLocalizedMessage());
diff --git a/test/edu/nps/moves/dis7/FixedAndVariableDatumRoundTripTest.java b/test/edu/nps/moves/dis7/FixedAndVariableDatumRoundTripTest.java
index 6f4cc2c7ac18f1a91d1c9eb76ee199931bd51839..04d331d215ae9f482efee5c659573d5c47a51c97 100644
--- a/test/edu/nps/moves/dis7/FixedAndVariableDatumRoundTripTest.java
+++ b/test/edu/nps/moves/dis7/FixedAndVariableDatumRoundTripTest.java
@@ -4,7 +4,6 @@
  */
 package edu.nps.moves.dis7;
 
-import edu.nps.moves.dis7.enumerations.ActionResponseRequestStatus;
 import edu.nps.moves.dis7.enumerations.VariableRecordType;
 import edu.nps.moves.dis7.utilities.DisThreadedNetIF;
 import edu.nps.moves.dis7.utilities.PduFactory;
@@ -16,6 +15,7 @@ public class FixedAndVariableDatumRoundTripTest
 {
   Pdu receivedPdu;
   DisThreadedNetIF netif;
+  DisThreadedNetIF.PduListener lis;
 
   @BeforeAll
   public static void setUpClass()
@@ -32,19 +32,23 @@ public class FixedAndVariableDatumRoundTripTest
   public void setUp()
   {   
       netif = new DisThreadedNetIF();
-      netif.addListener(pdu -> setUpReceiver(pdu));
+      lis = new DisThreadedNetIF.PduListener() {
+          @Override
+          public void incomingPdu(Pdu pdu) {
+              setUpReceiver(pdu);
+          }
+      };
+      netif.addListener(lis);
   }
 
   @AfterEach
   public void tearDown()
   {
+      netif.removeListener(lis);
       netif.kill();
       netif = null;
   }
 
-  private static int REQUEST_ID = 0x00112233;
-  private static ActionResponseRequestStatus REQUEST_STATUS = ActionResponseRequestStatus.RETRANSMIT_REQUEST_LATER;
-
   private static FixedDatum fixedDatum1 = new FixedDatum();
   private static int fixedDatum1Value = 0x111111FF;
   private static VariableRecordType fixedDatum1VarRecordType = VariableRecordType.ACTIVATE_OWNSHIP;
@@ -59,7 +63,6 @@ public class FixedAndVariableDatumRoundTripTest
   private static VariableRecordType variableDatum1Type = VariableRecordType.ACLS_AIRCRAFT_REPORT;
   private static String variableDatum1String = "varDatum1Value111";
   private static byte[] variableDatum1Value = variableDatum1String.getBytes();
-  private static int variableDatum1LengthInBits = variableDatum1String.length() * 8 - 1; // test
 
   private static VariableDatum variableDatum2 = new VariableDatum();
   private static VariableRecordType variableDatum2Type = VariableRecordType.Z_ACCELERATION;
@@ -77,11 +80,9 @@ public class FixedAndVariableDatumRoundTripTest
 
     variableDatum1.setVariableDatumID(variableDatum1Type);
     variableDatum1.setVariableDatumValue(variableDatum1Value);
-    //variableDatum1.setVariableDatumLength(variableDatum1LengthInBits);
 
     variableDatum2.setVariableDatumID(variableDatum2Type);
     variableDatum2.setVariableDatumValue(variableDatum2Value);
-    //variableDatum2.setVariableDatumLength(variableDatum2Value.length * 8); //in bits
   }
 
   @Test
@@ -98,9 +99,8 @@ public class FixedAndVariableDatumRoundTripTest
     sentPdu.getVariableDatums().add(variableDatum2);
 
     try {
-      Thread.sleep(250l); // make sure receiver is listening
       netif.send(sentPdu);
-      Thread.sleep(1000l);
+      Thread.sleep(100l);
     }
     catch (InterruptedException ex) {
       System.err.println("Error sending Multicast: " + ex.getLocalizedMessage());
diff --git a/test/edu/nps/moves/dis7/SignalPdusTest.java b/test/edu/nps/moves/dis7/SignalPdusTest.java
index 1ae60ffc7c5b2cce3f476a3f8538c7ebaf7cb571..0c62da965218f7f7d3820bbbc04d3c546a041ea1 100644
--- a/test/edu/nps/moves/dis7/SignalPdusTest.java
+++ b/test/edu/nps/moves/dis7/SignalPdusTest.java
@@ -29,30 +29,30 @@ import static org.junit.jupiter.api.Assertions.*;
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
 public class SignalPdusTest {
     
-    DisThreadedNetIF netif;
-    List<Pdu> receivedPdus;
-    PduRecorder recorder;
+    static DisThreadedNetIF netif;
+    static DisThreadedNetIF.PduListener lis;
+    static List<Pdu> receivedPdus;
+    static PduRecorder recorder;
     
-    Semaphore mutex;
-    PduFactory pduFac;
-    List<Pdu> sentPdus;
+    static Semaphore mutex;
+    static PduFactory pduFac;
+    static List<Pdu> sentPdus;
     byte[] buff;
     int size;
 
     @BeforeAll
     public static void setUpClass() throws IOException {
         System.out.println("SignalPdusTest");
-    }
-
-    @AfterAll
-    public static void tearDownClass() throws IOException {
-    }
-
-    @BeforeEach
-    public void setUp() throws IOException, InterruptedException {
+        
         recorder = new PduRecorder(); // default dir
         netif = recorder.getDisThreadedNetIF();
-        netif.addListener(pdu -> handleReceivedPdu(pdu));
+        lis = new DisThreadedNetIF.PduListener() {
+          @Override
+          public void incomingPdu(Pdu pdu) {
+              handleReceivedPdu(pdu);
+          }
+        };
+        netif.addListener(lis);
         
         mutex = new Semaphore(1);
         
@@ -80,21 +80,24 @@ public class SignalPdusTest {
         ((IntercomSignalPdu) pdu).setData("IntercomSignalPdu-testdata".getBytes());
         sentPdus.add(pdu);
 
-        try {
-            Thread.sleep(250l); // give receive time to spool up
-            sentPdus.forEach(p -> netif.send(p));
-            Thread.sleep(250l); // give receiver time to process
-        } catch (InterruptedException ex) {
-            fail("NetIF Send: " + ex);
-        }
+        sentPdus.forEach(p -> {
+            netif.send(p);
+            sleep(10l); // give receiver time to process
+        });
+    }
+
+    @AfterAll
+    public static void tearDownClass() throws IOException {
+    }
+
+    @BeforeEach
+    public void setUp() throws IOException, InterruptedException {
     }
 
     @AfterEach
     public void tearDown() throws IOException {
-        sentPdus.clear();
-        receivedPdus.clear();
+        netif.removeListener(lis);
         recorder.end(); // kills the netif as well
-        mutex.release();
     }
 
     @Test
@@ -102,9 +105,6 @@ public class SignalPdusTest {
     public void testRoundTripNet() {
         System.out.println("testRoundTripNet");
         
-        // Compare
-        assertEquals(sentPdus, receivedPdus, "Sent and received pdus not identical");
-
         // Let's see how these unmarshall
         receivedPdus.forEach(pdu -> {
             try {
@@ -119,6 +119,9 @@ public class SignalPdusTest {
                 Logger.getLogger(SignalPdusTest.class.getName()).log(Level.SEVERE, null, ex);
             }
         });
+        
+        // Compare
+        assertEquals(sentPdus, receivedPdus, "Sent and received pdus not identical");
     }
 
     @Test
@@ -126,7 +129,6 @@ public class SignalPdusTest {
     public void testRoundTripLog() throws IOException, InterruptedException {   
         System.out.println("testRoundTripLog");
         
-        recorder.end(); // this finishes the 2nd log file so it can be played
         mutex.acquire();
         Path path = Path.of(recorder.getLogFile()).getParent();
         
@@ -144,22 +146,27 @@ public class SignalPdusTest {
     
         mutex.acquire();
     }
+    
+    private static void sleep(long ms) {
+        try {
+            Thread.sleep(ms);
+        } catch (InterruptedException ex) {
+            fail("NetIF Send: " + ex);
+        }
+    }
 
-    private void handleReceivedPdu(Pdu pdu) {
+    private static void handleReceivedPdu(Pdu pdu) {
         receivedPdus.add(pdu);
     }
 
     public static void main(String[] args) throws IOException, InterruptedException {
         
+        setUpClass();
+        
         SignalPdusTest spt = new SignalPdusTest();
-
-        spt.setUp();
         spt.testRoundTripNet();
         spt.tearDown();
-
-        spt.setUp();
         spt.testRoundTripLog();
-        spt.tearDown();
     }
 
 }