Index: src/benchmark/Makefile.am
===================================================================
--- src/benchmark/Makefile.am	(revision f54a0abcaaf8eadcebe1c9d1f9bfb8ba7387cc35)
+++ src/benchmark/Makefile.am	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -73,5 +73,5 @@
 
 creation-cfa_coroutine$(EXEEXT):
-	${CC}        creation/cfa_cor.c   -DBENCH_N=500000000 ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+	${CC}        creation/cfa_cor.c   -DBENCH_N=10000000  ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
 
 creation-cfa_thread$(EXEEXT):
@@ -115,4 +115,42 @@
 
 ## =========================================================================================================
+signal$(EXEEXT) :\
+	signal-upp.run		\
+	signal-cfa1.run		\
+	signal-cfa2.run		\
+	signal-cfa4.run
+
+signal-upp$(EXEEXT):
+	u++          schedint/upp.cc     -DBENCH_N=50000000  ${AM_CFLAGS} ${CFLAGS} ${ccflags} -I. -nodebug -lrt -quiet
+
+signal-cfa1$(EXEEXT):
+	${CC}        schedint/cfa1.c     -DBENCH_N=500000    ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+
+signal-cfa2$(EXEEXT):
+	${CC}        schedint/cfa2.c     -DBENCH_N=500000    ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+
+signal-cfa4$(EXEEXT):
+	${CC}        schedint/cfa4.c     -DBENCH_N=500000    ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+
+## =========================================================================================================
+waitfor$(EXEEXT) :\
+	waitfor-upp.run		\
+	waitfor-cfa1.run		\
+	waitfor-cfa2.run		\
+	waitfor-cfa4.run
+
+waitfor-upp$(EXEEXT):
+	u++          schedext/upp.cc     -DBENCH_N=5000000   ${AM_CFLAGS} ${CFLAGS} ${ccflags} -I. -nodebug -lrt -quiet
+
+waitfor-cfa1$(EXEEXT):
+	${CC}        schedext/cfa1.c     -DBENCH_N=500000    ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+
+waitfor-cfa2$(EXEEXT):
+	${CC}        schedext/cfa2.c     -DBENCH_N=500000    ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+
+waitfor-cfa4$(EXEEXT):
+	${CC}        schedext/cfa4.c     -DBENCH_N=500000    ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+
+## =========================================================================================================
 sched-int$(EXEEXT):
 	${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=50000000 SchedInt.c
Index: src/benchmark/Makefile.in
===================================================================
--- src/benchmark/Makefile.in	(revision f54a0abcaaf8eadcebe1c9d1f9bfb8ba7387cc35)
+++ src/benchmark/Makefile.in	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -487,5 +487,5 @@
 
 creation-cfa_coroutine$(EXEEXT):
-	${CC}        creation/cfa_cor.c   -DBENCH_N=500000000 ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+	${CC}        creation/cfa_cor.c   -DBENCH_N=10000000  ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
 
 creation-cfa_thread$(EXEEXT):
@@ -526,4 +526,40 @@
 mutex-cfa4$(EXEEXT):
 	${CC}        mutex/cfa4.c     -DBENCH_N=5000000   ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+
+signal$(EXEEXT) :\
+	signal-upp.run		\
+	signal-cfa1.run		\
+	signal-cfa2.run		\
+	signal-cfa4.run
+
+signal-upp$(EXEEXT):
+	u++          schedint/upp.cc     -DBENCH_N=50000000  ${AM_CFLAGS} ${CFLAGS} ${ccflags} -I. -nodebug -lrt -quiet
+
+signal-cfa1$(EXEEXT):
+	${CC}        schedint/cfa1.c     -DBENCH_N=500000    ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+
+signal-cfa2$(EXEEXT):
+	${CC}        schedint/cfa2.c     -DBENCH_N=500000    ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+
+signal-cfa4$(EXEEXT):
+	${CC}        schedint/cfa4.c     -DBENCH_N=500000    ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+
+waitfor$(EXEEXT) :\
+	waitfor-upp.run		\
+	waitfor-cfa1.run		\
+	waitfor-cfa2.run		\
+	waitfor-cfa4.run
+
+waitfor-upp$(EXEEXT):
+	u++          schedext/upp.cc     -DBENCH_N=5000000   ${AM_CFLAGS} ${CFLAGS} ${ccflags} -I. -nodebug -lrt -quiet
+
+waitfor-cfa1$(EXEEXT):
+	${CC}        schedext/cfa1.c     -DBENCH_N=500000    ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+
+waitfor-cfa2$(EXEEXT):
+	${CC}        schedext/cfa2.c     -DBENCH_N=500000    ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
+
+waitfor-cfa4$(EXEEXT):
+	${CC}        schedext/cfa4.c     -DBENCH_N=500000    ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -I. -nodebug -lrt -quiet
 
 sched-int$(EXEEXT):
Index: src/benchmark/creation/cfa_cor.c
===================================================================
--- src/benchmark/creation/cfa_cor.c	(revision f54a0abcaaf8eadcebe1c9d1f9bfb8ba7387cc35)
+++ src/benchmark/creation/cfa_cor.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -5,5 +5,6 @@
 
 coroutine MyCoroutine {};
-void main(MyCoroutine * this) {}
+void ?{} (MyCoroutine & this) { prime(this); }
+void main(MyCoroutine & this) {}
 
 int main(int argc, char* argv[]) {
Index: src/benchmark/mutex/cfa1.c
===================================================================
--- src/benchmark/mutex/cfa1.c	(revision f54a0abcaaf8eadcebe1c9d1f9bfb8ba7387cc35)
+++ src/benchmark/mutex/cfa1.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -4,11 +4,6 @@
 #include "bench.h"
 
-volatile unsigned long int counter = 0;
-
 monitor M {};
-
-void __attribute__((noinline)) call( M & mutex m ) {
-	counter++;
-}
+void __attribute__((noinline)) call( M & mutex m ) {}
 
 int main(int argc, char* argv[]) {
Index: src/benchmark/mutex/cfa2.c
===================================================================
--- src/benchmark/mutex/cfa2.c	(revision f54a0abcaaf8eadcebe1c9d1f9bfb8ba7387cc35)
+++ src/benchmark/mutex/cfa2.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -4,11 +4,6 @@
 #include "bench.h"
 
-volatile unsigned long int counter = 0;
-
 monitor M {};
-
-void __attribute__((noinline)) call( M & mutex m1, M & mutex m2 ) {
-	counter++;
-}
+void __attribute__((noinline)) call( M & mutex m1, M & mutex m2 ) {}
 
 int main(int argc, char* argv[]) {
Index: src/benchmark/mutex/cfa4.c
===================================================================
--- src/benchmark/mutex/cfa4.c	(revision f54a0abcaaf8eadcebe1c9d1f9bfb8ba7387cc35)
+++ src/benchmark/mutex/cfa4.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -4,11 +4,7 @@
 #include "bench.h"
 
-volatile unsigned long int counter = 0;
 
 monitor M {};
-
-void __attribute__((noinline)) call( M & mutex m1, M & mutex m2, M & mutex m3, M & mutex m4 ) {
-	counter++;
-}
+void __attribute__((noinline)) call( M & mutex m1, M & mutex m2, M & mutex m3, M & mutex m4 ) {}
 
 int main(int argc, char* argv[]) {
Index: src/benchmark/mutex/function.c
===================================================================
--- src/benchmark/mutex/function.c	(revision f54a0abcaaf8eadcebe1c9d1f9bfb8ba7387cc35)
+++ src/benchmark/mutex/function.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -3,9 +3,5 @@
 #include "bench.h"
 
-volatile unsigned long int counter = 0;
-
-void __attribute__((noinline)) call() {
-	counter++;
-}
+void __attribute__((noinline)) call() {}
 
 int main(int argc, char* argv[]) {
Index: src/benchmark/mutex/pthreads.c
===================================================================
--- src/benchmark/mutex/pthreads.c	(revision f54a0abcaaf8eadcebe1c9d1f9bfb8ba7387cc35)
+++ src/benchmark/mutex/pthreads.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -4,11 +4,8 @@
 #include "bench.h"
 
-volatile unsigned long int counter = 0;
-
 pthread_mutex_t mutex;
 
 void __attribute__((noinline)) call() {
 	 pthread_mutex_lock  (&mutex);
-	 counter++;
 	 pthread_mutex_unlock(&mutex);
 }
Index: src/benchmark/mutex/upp.cc
===================================================================
--- src/benchmark/mutex/upp.cc	(revision f54a0abcaaf8eadcebe1c9d1f9bfb8ba7387cc35)
+++ src/benchmark/mutex/upp.cc	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -3,11 +3,7 @@
 #include "bench.h"
 
-volatile unsigned long int counter = 0;
-
 _Monitor MyMonitor {
 public:
-	void __attribute__((noinline)) call() {
-		counter++;
-	}
+	void __attribute__((noinline)) call() {}
 };
 
Index: src/benchmark/schedext/cfa1.c
===================================================================
--- src/benchmark/schedext/cfa1.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
+++ src/benchmark/schedext/cfa1.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -0,0 +1,45 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+monitor M {};
+M m1;
+
+void __attribute__((noinline)) call( M & mutex a1 ) {}
+
+int  __attribute__((noinline)) wait( M & mutex a1 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			waitfor(call, a1);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	processor p;
+	T t;
+	return wait(m1);
+}
Index: src/benchmark/schedext/cfa2.c
===================================================================
--- src/benchmark/schedext/cfa2.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
+++ src/benchmark/schedext/cfa2.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -0,0 +1,45 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+monitor M {};
+M m1, m2;
+
+void __attribute__((noinline)) call( M & mutex a1, M & mutex a2 ) {}
+
+int  __attribute__((noinline)) wait( M & mutex a1, M & mutex a2 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			waitfor(call, a1, a2);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1, m2); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	processor p;
+	T t;
+	return wait(m1, m2);
+}
Index: src/benchmark/schedext/cfa4.c
===================================================================
--- src/benchmark/schedext/cfa4.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
+++ src/benchmark/schedext/cfa4.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -0,0 +1,45 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+monitor M {};
+M m1, m2, m3, m4;
+
+void __attribute__((noinline)) call( M & mutex a1, M & mutex a2, M & mutex a3, M & mutex a4 ) {}
+
+int  __attribute__((noinline)) wait( M & mutex a1, M & mutex a2, M & mutex a3, M & mutex a4 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			waitfor(call, a1, a2, a3, a4);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1, m2, m3, m4); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	processor p;
+	T t;
+	return wait(m1, m2, m3, m4);
+}
Index: src/benchmark/schedext/upp.cc
===================================================================
--- src/benchmark/schedext/upp.cc	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
+++ src/benchmark/schedext/upp.cc	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -0,0 +1,44 @@
+#include <cstdio>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+_Monitor M {
+public:
+	void __attribute__((noinline)) call() {}
+
+	int __attribute__((noinline)) wait() {
+		go = 1;
+		BENCH(
+			for (size_t i = 0; i < n; i++) {
+				_Accept(call);
+			},
+			result
+		)
+
+		printf("%llu\n", result);
+		go = 0;
+		return 0;
+	}
+};
+
+M m;
+
+_Task T {
+	void main() {
+		while(go == 0) { yield(); }
+		while(go == 1) { m.call(); }
+
+	}
+};
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	uProcessor p;
+	T t;
+	return m.wait();
+}
Index: src/benchmark/schedint/cfa1.c
===================================================================
--- src/benchmark/schedint/cfa1.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
+++ src/benchmark/schedint/cfa1.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -0,0 +1,48 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+condition c;
+monitor M {};
+M m1;
+
+void __attribute__((noinline)) call( M & mutex a1 ) {
+	signal(&c);
+}
+
+int  __attribute__((noinline)) wait( M & mutex a1 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			wait(&c);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	processor p;
+	T t;
+	return wait(m1);
+}
Index: src/benchmark/schedint/cfa2.c
===================================================================
--- src/benchmark/schedint/cfa2.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
+++ src/benchmark/schedint/cfa2.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -0,0 +1,48 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+condition c;
+monitor M {};
+M m1, m2;
+
+void __attribute__((noinline)) call( M & mutex a1, M & mutex a2 ) {
+	signal(&c);
+}
+
+int  __attribute__((noinline)) wait( M & mutex a1, M & mutex a2 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			wait(&c);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1, m2); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	processor p;
+	T t;
+	return wait(m1, m2);
+}
Index: src/benchmark/schedint/cfa4.c
===================================================================
--- src/benchmark/schedint/cfa4.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
+++ src/benchmark/schedint/cfa4.c	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -0,0 +1,48 @@
+#include <kernel>
+#include <monitor>
+#include <thread>
+#include <stdio.h>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+condition c;
+monitor M {};
+M m1, m2, m3, m4;
+
+void __attribute__((noinline)) call( M & mutex a1, M & mutex a2, M & mutex a3, M & mutex a4 ) {
+	signal(&c);
+}
+
+int  __attribute__((noinline)) wait( M & mutex a1, M & mutex a2, M & mutex a3, M & mutex a4 ) {
+	go = 1;
+	BENCH(
+		for (size_t i = 0; i < n; i++) {
+			wait(&c);
+		},
+		result
+	)
+
+	printf("%llu\n", result);
+	go = 0;
+	return 0;
+}
+
+thread T {};
+void ^?{}( T & mutex this ) {}
+void main( T & this ) {
+	while(go == 0) { yield(); }
+	while(go == 1) { call(m1, m2, m3, m4); }
+
+}
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	processor p;
+	T t;
+	return wait(m1, m2, m3, m4);
+}
Index: src/benchmark/schedint/upp.cc
===================================================================
--- src/benchmark/schedint/upp.cc	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
+++ src/benchmark/schedint/upp.cc	(revision 9f0b975c56f63828c0654bdcb93739755b3f66aa)
@@ -0,0 +1,47 @@
+#include <cstdio>
+
+#include "bench.h"
+
+int argc;
+char** argv;
+volatile int go = 0;
+
+_Monitor M {
+	uCondition cond;
+public:
+	void __attribute__((noinline)) call() {
+		cond.signal();
+	}
+
+	int __attribute__((noinline)) wait() {
+		go = 1;
+		BENCH(
+			for (size_t i = 0; i < n; i++) {
+				cond.wait();
+			},
+			result
+		)
+
+		printf("%llu\n", result);
+		go = 0;
+		return 0;
+	}
+};
+
+M m;
+
+_Task T {
+	void main() {
+		while(go == 0) { yield(); }
+		while(go == 1) { m.call(); }
+
+	}
+};
+
+int main(int margc, char* margv[]) {
+	argc = margc;
+	argv = margv;
+	uProcessor p;
+	T t;
+	return m.wait();
+}
