Index: kernel/test/synch/workq-test-core.h
===================================================================
--- kernel/test/synch/workq-test-core.h	(revision 8a64e81e7083acc3dc69cd56c21cca72dd37ca13)
+++ kernel/test/synch/workq-test-core.h	(revision c79800f66d9e4a8fc017a7022699c3e34b795b26)
@@ -82,4 +82,10 @@
 }
 
+static void free_work(test_work_t *work)
+{
+	memsetb(work, sizeof(test_work_t), 0xfa);
+	free(work);
+}
+
 static void reproduce(work_t *work_item)
 {
@@ -112,12 +118,13 @@
 			if (child) {
 				if (!core_workq_enqueue(&child->work_item, reproduce))
-					free(child);
+					free_work(child);
 			}
 		}
 		
 		if (!core_workq_enqueue(work_item, reproduce)) {
-			if (!work->master) {
-				free(work);
-			}
+			if (work->master) 
+				TPRINTF("\nErr: Master work item exiting prematurely!\n");
+
+			free_work(work);
 		}
 	} else {
@@ -125,11 +132,13 @@
 		
 		if (work->master && new_wave(work)) {
-				core_workq_enqueue(work_item, reproduce);
+			if (!core_workq_enqueue(work_item, reproduce)) {
+				TPRINTF("\nErr: Master work could not start a new wave!\n");
+				free_work(work);
+			}
 		} else {
 			if (work->master)
-				TPRINTF("\nMaster work item done!\n");
+				TPRINTF("\nMaster work item done.\n");
 				
-			memsetb(work, sizeof(test_work_t), 0xfa);
-			free(work);
+			free_work(work);
 		}
 	}
@@ -180,9 +189,12 @@
 	
 	for (int i = 0; i < WAVES; ++i) {
-		if (atomic_get(&call_cnt[i]) != exp_call_cnt) {
+		if (atomic_get(&call_cnt[i]) == exp_call_cnt) {
+			TPRINTF("Ok: %u calls in wave %d, as expected.\n",
+				atomic_get(&call_cnt[i]), i);
+		} else {
 			success = false;
 			TPRINTF("Error: %u calls in wave %d, but %zu expected.\n",
 				atomic_get(&call_cnt[i]), i, exp_call_cnt);
-		}
+		} 
 	}
 	
Index: kernel/test/synch/workqueue1.c
===================================================================
--- kernel/test/synch/workqueue1.c	(revision 8a64e81e7083acc3dc69cd56c21cca72dd37ca13)
+++ kernel/test/synch/workqueue1.c	(revision c79800f66d9e4a8fc017a7022699c3e34b795b26)
@@ -36,5 +36,6 @@
 
 
-int done = 0;
+static work_t work;
+static int done = 0;
 
 static void func(work_t *work_item)
@@ -47,6 +48,5 @@
 const char *test_workqueue1(void)
 {
-	work_t work;
-
+	done = 0;
 	workq_global_enqueue(&work, func);
 	
@@ -56,5 +56,5 @@
 	}
 
-	printf("done\n");
+	printf("\ndone\n");
 
 	return NULL;
