Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 485fdcfc4ca62c5729af51ec9ae9d958a82c8fdb)
+++ src/libcfa/concurrency/kernel.c	(revision f07e037f4c08d55584f8523e8fe945f25159a08b)
@@ -457,9 +457,12 @@
 void append( simple_thread_list * this, thread * t ) {
 	assert( t->next == NULL );
+	assert(this->tail != NULL);
 	*this->tail = t;
 	this->tail = &t->next;
+	assert(this->tail != NULL);
 }
 
 thread * pop_head( simple_thread_list * this ) {
+	assert(this->tail != NULL);
 	thread * head = this->head;
 	if( head ) {
@@ -470,5 +473,5 @@
 		head->next = NULL;
 	}	
-	
+	assert(this->tail != NULL);
 	return head;
 }
Index: src/libcfa/concurrency/monitor
===================================================================
--- src/libcfa/concurrency/monitor	(revision 485fdcfc4ca62c5729af51ec9ae9d958a82c8fdb)
+++ src/libcfa/concurrency/monitor	(revision f07e037f4c08d55584f8523e8fe945f25159a08b)
@@ -0,0 +1,32 @@
+//                              -*- Mode: CFA -*-
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// monitor --
+//
+// Author           : Thierry Delisle
+// Created On       : Thd Feb 23 12:27:26 2017
+// Last Modified By : Thierry Delisle
+// Last Modified On : --
+// Update Count     : 0
+//
+
+#ifndef MONITOR_H
+#define MONITOR_H
+
+#include "assert"
+#include "invoke.h"
+
+struct monitor {
+	spinlock lock;
+	thread * holder;
+	simple_thread_list entry_queue;
+};
+
+void enter(monitor *);
+void leave(monitor *);
+
+#endif //MONITOR_H
Index: src/libcfa/concurrency/monitor.c
===================================================================
--- src/libcfa/concurrency/monitor.c	(revision 485fdcfc4ca62c5729af51ec9ae9d958a82c8fdb)
+++ src/libcfa/concurrency/monitor.c	(revision f07e037f4c08d55584f8523e8fe945f25159a08b)
@@ -0,0 +1,55 @@
+//                              -*- Mode: CFA -*-
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// monitor.c --
+//
+// Author           : Thierry Delisle
+// Created On       : Thd Feb 23 12:27:26 2017
+// Last Modified By : Thierry Delisle
+// Last Modified On : --
+// Update Count     : 0
+//
+
+#include "monitor"
+
+#include "kernel_private.h"
+
+void enter(monitor * this) {
+	lock( &this->lock );
+	thread * thrd = this_thread();
+
+	assert( this->entry_queue.tail != NULL );
+
+	if( this->holder ) {
+		append( &this->entry_queue, thrd );
+		ScheduleInternal( &this->lock );
+		return;
+	}
+	else {
+		this->holder = thrd;
+	}
+
+	assert( this->entry_queue.tail != NULL );	
+
+	unlock( &this->lock );
+}
+
+void leave(monitor * this) {
+	lock( &this->lock );
+
+	assert( this->entry_queue.tail != NULL );	
+
+	thread * thrd = this_thread();
+	assert( thrd == this->holder );
+
+	this->holder = pop_head( &this->entry_queue );
+
+	assert( this->entry_queue.tail != NULL );	
+
+	unlock( &this->lock );
+	if( this->holder ) ScheduleThread( this->holder );
+}
Index: src/libcfa/concurrency/threads
===================================================================
--- src/libcfa/concurrency/threads	(revision 485fdcfc4ca62c5729af51ec9ae9d958a82c8fdb)
+++ src/libcfa/concurrency/threads	(revision f07e037f4c08d55584f8523e8fe945f25159a08b)
@@ -9,5 +9,5 @@
 //
 // Author           : Thierry Delisle
-// Created On       : Tue Jan 17 12:27:26 2016
+// Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Thierry Delisle
 // Last Modified On : --
Index: src/libcfa/concurrency/threads.c
===================================================================
--- src/libcfa/concurrency/threads.c	(revision 485fdcfc4ca62c5729af51ec9ae9d958a82c8fdb)
+++ src/libcfa/concurrency/threads.c	(revision f07e037f4c08d55584f8523e8fe945f25159a08b)
@@ -9,5 +9,5 @@
 //
 // Author           : Thierry Delisle
-// Created On       : Tue Jan 17 12:27:26 2016
+// Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Thierry Delisle
 // Last Modified On : --
