diff --git a/test/validate/array.st b/test/validate/array.st
index 0ace97fccb579d155bcedecafa6b5e5ce61f480b..cbd27c27515d4c2547df087282202f9bffd91363 100644
--- a/test/validate/array.st
+++ b/test/validate/array.st
@@ -9,7 +9,7 @@ program arrayTest
 %%#include "../testSupport.h"
 
 entry {
-    testPlan(20);
+    seq_test_init(20);
 }
 
 ss array {
@@ -44,6 +44,5 @@ ss array {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/assign.st b/test/validate/assign.st
index 0265acadac088694243b9acb76cab69764112e86..28e311610dc363feeb37a46bde39fe15bd91d840 100644
--- a/test/validate/assign.st
+++ b/test/validate/assign.st
@@ -16,7 +16,7 @@ foreign pvStatERROR;
 #define NTESTS 3
 
 entry {
-    testPlan(NTESTS);
+    seq_test_init(NTESTS);
 }
 
 ss w {
@@ -46,6 +46,5 @@ ss r {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/bittypes.st b/test/validate/bittypes.st
index 86582f6d45ba65d15009fbbe245423075852a40a..f5048fe93bb71e25a116682b9ef45bba92a2b3a0 100644
--- a/test/validate/bittypes.st
+++ b/test/validate/bittypes.st
@@ -23,7 +23,7 @@ assign i32 to "ushort";
 assign ui32 to "ushort";
 
 entry {
-    testPlan(12);
+    seq_test_init(12);
 }
 
 ss test {
@@ -74,6 +74,5 @@ ss test {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/change.st b/test/validate/change.st
index 0bed670bc7c2b86be21b442a6da7f7c7ad5b4a88..01246ae72d2225d0927c897de83816bf814b9fdd 100644
--- a/test/validate/change.st
+++ b/test/validate/change.st
@@ -14,7 +14,7 @@ program changeTest
 #define MAX_TEST 50
 
 entry {
-    testPlan(MAX_TEST);
+    seq_test_init(MAX_TEST);
     /* uncomment for repeatability */
     /* srandom(12345); */
 }
@@ -72,6 +72,5 @@ ss main {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/commaOperator.st b/test/validate/commaOperator.st
index 09439b1ec90d12d636e4000d539c4c772b35f97a..e38ed81ff781fe4a253dcec72a5030fcc7ad6c56 100644
--- a/test/validate/commaOperator.st
+++ b/test/validate/commaOperator.st
@@ -9,7 +9,7 @@ program commaOperatorTest
 %%#include "../testSupport.h"
 
 entry {
-    testPlan(4);
+    seq_test_init(4);
 }
 
 ss myss {
@@ -25,6 +25,5 @@ ss myss {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/evflag.st b/test/validate/evflag.st
index 2edb147eba70f8ff1cdbcc08dd612ab980c67196..d90f21b1ffa4005d38e96db6ac15a3002c7a4ccf 100644
--- a/test/validate/evflag.st
+++ b/test/validate/evflag.st
@@ -26,7 +26,7 @@ monitor anonymous;
 sync anonymous to ef_anonymous;
 
 entry {
-    testPlan(0);
+    seq_test_init(0);
     efClear(ef_named);
 }
 
@@ -74,6 +74,5 @@ ss write {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/local.st b/test/validate/local.st
index 390ab7eed12bcc1ebd4ec3525218c0de52895272..f894ec593f25e2a7a6e25e30ce02603915424797 100644
--- a/test/validate/local.st
+++ b/test/validate/local.st
@@ -16,7 +16,7 @@ option +r;
 int i = 1;
 
 entry {
-    testPlan(5);
+    seq_test_init(5);
 }
 
 /* only state-set */
@@ -41,6 +41,5 @@ ss start {
 /* exit handler */
 exit {
     testOk(i==1, "global i==%d", i);
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/makeStCmd.pl b/test/validate/makeStCmd.pl
index 82277fb9821ba410646a98f0ca3d473a89866996..36b7210aebb92cb32f85f690e38d7779b050205f 100644
--- a/test/validate/makeStCmd.pl
+++ b/test/validate/makeStCmd.pl
@@ -2,4 +2,7 @@ print "testHarness\n";
 foreach my $x (@ARGV) {
   print "run_seq_test \&${x}Test\n"
 }
+foreach my $x (@ARGV) {
+  print "run_seq_test \&${x}Test, 1\n"
+}
 print "epicsExit\n";
diff --git a/test/validate/opttVar.st b/test/validate/opttVar.st
index d34b46fa0dff771d2d669afe778a6ebdab01d9cf..1d488c9155fc98d7464cc04d7d927ab2ba07ba16 100644
--- a/test/validate/opttVar.st
+++ b/test/validate/opttVar.st
@@ -23,7 +23,7 @@ monitor msg;
 syncq msg 40;
 
 entry {
-    testPlan(40);
+    seq_test_init(40);
 }
 
 ss low_high {
@@ -118,6 +118,5 @@ ss check {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/pvGet.st b/test/validate/pvGet.st
index a6623fa0ceb0e24c0118dd0297bfd7c9569703ba..217a13b165050c191aae7b639d962bd698137091 100644
--- a/test/validate/pvGet.st
+++ b/test/validate/pvGet.st
@@ -24,7 +24,7 @@ assign anon;
 evflag ef_read_named, ef_read_anon, ef_read_named_sync, ef_read_anon_sync;
 
 entry {
-    testPlan(MAX_GET*4*3);
+    seq_test_init(MAX_GET*4*3);
     mutex = epicsMutexMustCreate();
 }
 
@@ -205,6 +205,5 @@ ss write {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/pvPutAsync.st b/test/validate/pvPutAsync.st
index 518f08ad27e386e4367621c9e603a4fdab5c1250..296841fcd3ce2f78c67b74dcdabff0a6673c75cb 100644
--- a/test/validate/pvPutAsync.st
+++ b/test/validate/pvPutAsync.st
@@ -14,7 +14,7 @@ int x;
 assign x to "pvPutAsync1";
 
 entry {
-    testPlan(10);
+    seq_test_init(10);
 }
 
 ss test1 {
@@ -84,6 +84,5 @@ ss test2 {
 #endif
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/pvSync.st b/test/validate/pvSync.st
index e0efd3192b29d9c73ef7ed70b92a812f46097bcf..6ec1136e9ed96a74456eb0b1f229f490a98946ff 100644
--- a/test/validate/pvSync.st
+++ b/test/validate/pvSync.st
@@ -17,7 +17,7 @@ monitor x;
 evflag f;
 
 entry {
-    testPlan(5);
+    seq_test_init(5);
     pvSync(x,f);
 }
 
@@ -48,6 +48,5 @@ ss help {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/raceCommon.st b/test/validate/raceCommon.st
index a49dac14ce0d706d337dfaf97b12fcd7f8a667ef..34ef364c60c4f2d61b76884b312437766ac35789 100644
--- a/test/validate/raceCommon.st
+++ b/test/validate/raceCommon.st
@@ -21,7 +21,7 @@ foreign MAX_STRING_SIZE;
 #define MAX_TESTS 30
 
 entry {
-    testPlan(MAX_TESTS);
+    seq_test_init(MAX_TESTS);
     testDiag("This test will run for %d seconds...", MAX_TESTS);
 }
 
@@ -148,6 +148,5 @@ ss stop {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/reassign.st b/test/validate/reassign.st
index a25f01e688e2f68976a1e638b8eb8ef774cb2064..9fe6e8d416b3cfae0a52493d4c25064e20e755ff 100644
--- a/test/validate/reassign.st
+++ b/test/validate/reassign.st
@@ -20,7 +20,7 @@ foreign pvStatOK;
 #define NTESTS 30
 
 entry {
-    testPlan(NTESTS);
+    seq_test_init(NTESTS);
 }
 
 ss reassign {
@@ -93,6 +93,5 @@ ss reassign {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/safeModeNotAssigned.st b/test/validate/safeModeNotAssigned.st
index 9063cf8e71855859498247db602b1154990d458a..0ba970a83ac67f90b104fc93b13d94cd11be58cc 100644
--- a/test/validate/safeModeNotAssigned.st
+++ b/test/validate/safeModeNotAssigned.st
@@ -15,7 +15,7 @@ int v = 0;
 #define MAX_TEST 10
 
 entry {
-    testPlan(MAX_TEST*2);
+    seq_test_init(MAX_TEST*2);
 }
 
 ss ss1 {
@@ -48,6 +48,5 @@ ss ss2 {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/safeMonitor.st b/test/validate/safeMonitor.st
index 46b5d935e19c3632ccecdd3f2b05b44c39d876e7..70116db969664ba1e6a5b26238fc50d5bc4a4cef 100644
--- a/test/validate/safeMonitor.st
+++ b/test/validate/safeMonitor.st
@@ -19,7 +19,7 @@ sync cnt to ef_cnt;
 #define MAX_TEST 10
 
 entry {
-    testPlan(MAX_TEST);
+    seq_test_init(MAX_TEST);
 }
 
 ss read {
@@ -50,6 +50,5 @@ ss write {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }
diff --git a/test/validate/testSupport.c b/test/validate/testSupport.c
index a609bf91f864def87f1751829304f2bf3c6ffe44..3116653033cda4896d5e33dbf2e3ae1685dc03c2 100644
--- a/test/validate/testSupport.c
+++ b/test/validate/testSupport.c
@@ -13,8 +13,8 @@ in the file LICENSE that is included with this distribution.
 #include "../testSupport.h"
 
 static epicsEventId this_test_done;
-
 static seqProgram *prog;
+int seq_test_raise_priority;
 
 static int doit(void)
 {
@@ -22,8 +22,9 @@ static int doit(void)
     return 0;
 }
 
-void run_seq_test(seqProgram *seqProg)
+void run_seq_test(seqProgram *seqProg, int raise_priority)
 {
+    seq_test_raise_priority = raise_priority;
     if (!this_test_done) {
         this_test_done = epicsEventMustCreate(epicsEventEmpty);
     }
@@ -32,8 +33,17 @@ void run_seq_test(seqProgram *seqProg)
     epicsEventWait(this_test_done);
 }
 
+void seq_test_init(int num_tests)
+{
+    testPlan(num_tests);
+    if (seq_test_raise_priority) {
+        epicsThreadSetPriority(epicsThreadGetIdSelf(), epicsThreadPriorityHigh);
+    }
+}
+
 void seq_test_done(void)
 {
+    testDone();
 #if defined(vxWorks)
     epicsEventSignal(this_test_done);
 #else
diff --git a/test/validate/testSupport.h b/test/validate/testSupport.h
index b8c58fa7b5b316af9a2e01aac3de397e02f2bdf9..20cc0374788831f846a7dd3a35c544ff71a45cf5 100644
--- a/test/validate/testSupport.h
+++ b/test/validate/testSupport.h
@@ -11,7 +11,8 @@ in the file LICENSE that is included with this distribution.
 #include "epicsMutex.h"
 #include "epicsUnitTest.h"
 
-void run_seq_test(seqProgram *seqProg);
+void run_seq_test(seqProgram *seqProg, int raise_priority);
+void seq_test_init(int num_tests);
 void seq_test_done(void);
 
 #endif /* INCtestSupport_h */
diff --git a/test/validate/userfunc.st b/test/validate/userfunc.st
index 312a177425554032315866b5a8266da2a2d10ffc..3ea7cb8dcd0922b2e9c46e8217981c7f621e1af6 100644
--- a/test/validate/userfunc.st
+++ b/test/validate/userfunc.st
@@ -26,7 +26,7 @@ monitor i;
 foreign pVar, ssId;
 
 entry {
-    testPlan(10);
+    seq_test_init(10);
 }
 
 ss myss {
@@ -43,6 +43,5 @@ ss myss {
 }
 
 exit {
-    testDone();
     seq_test_done();
 }