Index: src/tests/.expect/concurrent/sched-int-multi.txt
===================================================================
--- src/tests/.expect/concurrent/sched-int-multi.txt	(revision f80ab4529dbe82f7a1088d3ef8ae7991c99ff14f)
+++ src/tests/.expect/concurrent/sched-int-multi.txt	(revision f80ab4529dbe82f7a1088d3ef8ae7991c99ff14f)
@@ -0,0 +1,7 @@
+Waiting All
+Entering A
+Entering A & B
+Signal
+Leaving  A & B
+Leaving  A
+Done waiting
Index: src/tests/.expect/concurrent/sched-int.txt
===================================================================
--- src/tests/.expect/concurrent/sched-int.txt	(revision f80ab4529dbe82f7a1088d3ef8ae7991c99ff14f)
+++ src/tests/.expect/concurrent/sched-int.txt	(revision f80ab4529dbe82f7a1088d3ef8ae7991c99ff14f)
@@ -0,0 +1,3 @@
+Step 1
+Step 2
+Step 3
Index: src/tests/sched-int-multi.c
===================================================================
--- src/tests/sched-int-multi.c	(revision f80ab4529dbe82f7a1088d3ef8ae7991c99ff14f)
+++ src/tests/sched-int-multi.c	(revision f80ab4529dbe82f7a1088d3ef8ae7991c99ff14f)
@@ -0,0 +1,53 @@
+#include <fstream>
+#include <kernel>
+#include <monitor>
+#include <thread>
+
+monitor global_t {};
+
+global_t globalB;
+global_t globalA;
+
+condition cond;
+
+thread Signalee {};
+thread Signaler {};
+
+void signalee_action( global_t * mutex a, global_t * mutex b ) {
+	sout | "Waiting All" | endl;
+	wait( &cond );
+	sout | "Done waiting" | endl;
+}
+
+void main( Signalee* this ) {
+	signalee_action( &globalA, &globalB );
+}
+
+void signaler_action_inner( global_t * mutex a, global_t * mutex b ) {
+	sout | "Entering A & B" | endl;
+	sout | "Signal" | endl;
+	signal( &cond );
+	sout | "Leaving  A & B" | endl;
+}
+
+void signaler_action( global_t * mutex a, global_t * b ) {
+	sout | "Entering A" | endl;
+	signaler_action_inner( a, b );
+	sout | "Leaving  A" | endl;
+}
+
+void main( Signaler* this ) {
+	for(int i = 0; i < 10_000; i++) {
+		asm volatile ("" : : : "memory");
+	}
+
+	signaler_action( &globalA, &globalB );
+}
+
+int main(int argc, char* argv[]) {
+	processor p;
+	{
+		Signalee a;
+		Signaler b;
+	}
+}
Index: src/tests/sched-int.c
===================================================================
--- src/tests/sched-int.c	(revision f80ab4529dbe82f7a1088d3ef8ae7991c99ff14f)
+++ src/tests/sched-int.c	(revision f80ab4529dbe82f7a1088d3ef8ae7991c99ff14f)
@@ -0,0 +1,60 @@
+#include <fstream>
+#include <kernel>
+#include <monitor>
+#include <thread>
+
+monitor global_t {
+	int value;
+};
+
+global_t global;
+
+condition cond;
+
+thread Signalee {};
+thread Signaler {};
+
+void step1( global_t * mutex this ) {
+	sout | "Step 1" | endl;
+	this->value = 1;
+	wait( &cond );
+}
+
+void step2( global_t * mutex this ) {
+	if( this->value != 1) abort();
+
+	sout | "Step 2" | endl;
+	this->value = 2;
+	signal( &cond );
+}
+
+void step3( global_t * mutex this ) {
+	if( this->value != 2) abort();
+
+	sout | "Step 3" | endl;
+	this->value = 3;
+	signal( &cond );
+}
+
+void main( Signalee* this ) {
+	step1( &global );
+	step3( &global );
+}
+
+void main( Signaler* this ) {
+	for(int i = 0; i < 10_000; i++) {
+		asm volatile ("" : : : "memory");
+	}
+
+	step2( &global );
+}
+
+int main(int argc, char* argv[]) {
+	assert( global.__mon.entry_queue.tail != NULL );
+	processor p;
+	{
+		Signalee a;
+		Signaler b;
+	}
+	if( global.value != 3) abort();
+}
Index: c/tests/sched_internal.c
===================================================================
--- src/tests/sched_internal.c	(revision 0c78741a61dd850124b501f52f3c3551c949c60d)
+++ 	(revision )
@@ -1,56 +1,0 @@
-#include <kernel>
-#include <monitor>
-#include <thread>
-
-monitor global_t {
-	int value;
-};
-
-global_t global;
-
-condition cond;
-
-thread Signalee {};
-thread Signaler {};
-
-void step1( global_t * mutex this ) {
-	this->value = 1;
-	wait( &cond );
-}
-
-void step2( global_t * mutex this ) {
-	if( this->value != 1) abort();
-
-	this->value = 2;
-	signal( &cond );
-}
-
-void step3( global_t * mutex this ) {
-	if( this->value != 2) abort();
-
-	this->value = 2;
-	signal( &cond );
-}
-
-void main( Signalee* this ) {
-	step1( &global );
-	step3( &global );
-}
-
-void main( Signaler* this ) {
-	for(int i = 0; i < 10_000; i++) {
-		asm volatile ("" : : : "memory");
-	}
-
-	step2( &global );
-}
-
-int main(int argc, char* argv[]) {
-	assert( global.__mon.entry_queue.tail != NULL );
-	processor p;
-	{
-		Signalee a;
-		Signaler b;
-	}
-	if( global.value != 3) abort();
-}
