Index: src/tests/preempt_longrun/stack.c
===================================================================
--- src/tests/preempt_longrun/stack.c	(revision c04531fcbc266fccd0a1d26c2875cce9fe45e9a8)
+++ src/tests/preempt_longrun/stack.c	(revision 2065609d54faba689bd6249eb4c159415fb8bf29)
@@ -15,8 +15,8 @@
 
 void main(worker_t * this) {
-	volatile long p = 5_021_609ul;
-	volatile long a = 326_417ul;
-	volatile long n = 1l;
-	for (volatile long i = 0; i < p; i++) {
+	volatile long long p = 5_021_609ul;
+	volatile long long a = 326_417ul;
+	volatile long long n = 1l;
+	for (volatile long long i = 0; i < p; i++) {
 		n *= a;
 		n %= p;
Index: src/tests/sched-ext.c
===================================================================
--- src/tests/sched-ext.c	(revision 2065609d54faba689bd6249eb4c159415fb8bf29)
+++ src/tests/sched-ext.c	(revision 2065609d54faba689bd6249eb4c159415fb8bf29)
@@ -0,0 +1,89 @@
+#include <fstream>
+#include <kernel>
+#include <monitor>
+#include <stdlib>
+#include <thread>
+
+#include <time.h>
+
+static const unsigned long N = 500ul;
+
+#ifndef PREEMPTION_RATE
+#define PREEMPTION_RATE 10_000ul
+#endif
+
+unsigned int default_preemption() {
+	return PREEMPTION_RATE;
+}
+
+monitor global_t {};
+
+global_t globalA;
+
+thread Acceptor {};
+thread Acceptee {};
+
+volatile bool done;
+
+unsigned rand10() {
+	return (unsigned)rand48() % 10;
+}
+
+//----------------------------------------------------------------------------------------------------
+// Acceptor
+void do_notify( global_t * mutex a );
+
+void do_wait( global_t * mutex a ) {
+	sout | "Waiting to accept" | endl;
+	yield( rand10() );
+
+	sout | "Accepting" | endl;
+
+	__acceptable_t acceptable;
+	acceptable.func          = (fptr_t)do_notify;
+	acceptable.count         = 1;
+	acceptable.monitors      = &a;
+
+	__accept_internal( 1, &acceptable );
+
+	sout | "Accepted" | endl;
+	yield( rand10() );
+}
+
+void main( Acceptor* this ) {
+	for( int i = 0; i < N; i++ ) {
+		do_wait( &globalA );
+		sout | i | endl;
+	}
+
+	done = true;
+}
+
+//----------------------------------------------------------------------------------------------------
+// Acceptee
+void do_notify( global_t * mutex a ) {
+
+}
+
+void main( Acceptee* this ) {
+	while( !done ) {
+		yield( rand10() );
+		do_notify( &globalA );
+		yield( rand10() );
+	}
+}
+
+//----------------------------------------------------------------------------------------------------
+// Main
+int main(int argc, char* argv[]) {
+	done = false;
+	rand48seed( time( NULL ) );
+	printf("%p\n", &globalA);
+	sout | "Starting" | endl;
+	{
+		Acceptor r;
+		Acceptee e[13];
+
+	}
+	sout | "Done" | endl;
+}
Index: src/tests/sched-int-disjoint.c
===================================================================
--- src/tests/sched-int-disjoint.c	(revision c04531fcbc266fccd0a1d26c2875cce9fe45e9a8)
+++ src/tests/sched-int-disjoint.c	(revision 2065609d54faba689bd6249eb4c159415fb8bf29)
@@ -3,4 +3,6 @@
 #include <monitor>
 #include <thread>
+
+#include <time.h>
 
 static const unsigned long N = 10_000ul;
@@ -107,4 +109,5 @@
 // Main loop
 int main(int argc, char* argv[]) {
+	rand48seed( time( NULL ) );
 	all_done = false;
 	processor p;
Index: src/tests/sched-int-wait.c
===================================================================
--- src/tests/sched-int-wait.c	(revision c04531fcbc266fccd0a1d26c2875cce9fe45e9a8)
+++ src/tests/sched-int-wait.c	(revision 2065609d54faba689bd6249eb4c159415fb8bf29)
@@ -5,5 +5,7 @@
 #include <thread>
 
-static const unsigned long N = 10_000ul;
+#include <time.h>
+
+static const unsigned long N = 2_500ul;
 
 #ifndef PREEMPTION_RATE
@@ -119,4 +121,5 @@
 // Main
 int main(int argc, char* argv[]) {
+	rand48seed( time( NULL ) );
 	waiter_left = 4;
 	processor p[2];
