Index: src/libcfa/concurrency/monitor.c
===================================================================
--- src/libcfa/concurrency/monitor.c	(revision 19c43b7eb5e375d3769f89869c10265cdd9ef030)
+++ src/libcfa/concurrency/monitor.c	(revision a7d151f42d5fa3f6f5e1eb81c03b1b1daaa7b438)
@@ -23,7 +23,8 @@
 //-----------------------------------------------------------------------------
 // Forward declarations
-static inline void set_owner( monitor_desc * this, thread_desc * owner );
-static inline void set_owner( monitor_desc ** storage, short count, thread_desc * owner );
-static inline void set_mask ( monitor_desc ** storage, short count, const __waitfor_mask_t & mask );
+static inline void set_owner ( monitor_desc * this, thread_desc * owner );
+static inline void set_owner ( monitor_desc ** storage, short count, thread_desc * owner );
+static inline void set_mask  ( monitor_desc ** storage, short count, const __waitfor_mask_t & mask );
+static inline void reset_mask( monitor_desc * this );
 
 static inline thread_desc * next_thread( monitor_desc * this );
@@ -102,4 +103,7 @@
 			// Some one was waiting for us, enter
 			set_owner( this, thrd );
+
+			// Reset mask
+			reset_mask( this );
 
 			LIB_DEBUG_PRINT_SAFE("Kernel :  mon accepts \n");
@@ -420,6 +424,4 @@
 // 		block
 void __waitfor_internal( const __waitfor_mask_t & mask, int duration ) {
-	LIB_DEBUG_PRINT_SAFE("Kernel : waitfor internal \n");
-
 	// This statment doesn't have a contiguous list of monitors...
 	// Create one!
@@ -428,8 +430,5 @@
 	short actual_count = aggregate( mon_storage, mask );
 
-	if(actual_count == 0) {
-		LIB_DEBUG_PRINT_SAFE("Kernel :  nothing to wait for \n");
-		return;
-	}
+	if(actual_count == 0) return;
 
 	LIB_DEBUG_PRINT_SAFE("Kernel : waitfor internal proceeding\n");
@@ -499,4 +498,8 @@
 	set_mask( monitors, count, mask );
 
+	for(int i = 0; i < count; i++) {
+		verify( monitors[i]->owner == this_thread );
+	}
+
 	//Everything is ready to go to sleep
 	BlockInternal( locks, count );
@@ -537,4 +540,10 @@
 		storage[i]->mask = mask;
 	}
+}
+
+static inline void reset_mask( monitor_desc * this ) {
+	this->mask.accepted = NULL;
+	this->mask.clauses = NULL;
+	this->mask.size = 0;
 }
 
@@ -599,25 +608,15 @@
 
 static inline void lock_all( spinlock ** locks, unsigned short count ) {
-	LIB_DEBUG_ACQUIRE();
-	LIB_DEBUG_PRINT_NOLOCK("Kernel :   Locking");
 	for( int i = 0; i < count; i++ ) {
-		LIB_DEBUG_PRINT_NOLOCK(" %p", locks[i]);
 		lock_yield( locks[i] DEBUG_CTX2 );
 	}
-	LIB_DEBUG_PRINT_NOLOCK("\n");
-	LIB_DEBUG_RELEASE();
 }
 
 static inline void lock_all( monitor_desc ** source, spinlock ** /*out*/ locks, unsigned short count ) {
-	LIB_DEBUG_ACQUIRE();
-	LIB_DEBUG_PRINT_NOLOCK("Kernel :   Locking");
 	for( int i = 0; i < count; i++ ) {
 		spinlock * l = &source[i]->lock;
-		LIB_DEBUG_PRINT_NOLOCK(" %p", l);
 		lock_yield( l DEBUG_CTX2 );
 		if(locks) locks[i] = l;
 	}
-	LIB_DEBUG_PRINT_NOLOCK("\n");
-	LIB_DEBUG_RELEASE();
 }
 
@@ -634,5 +633,5 @@
 }
 
-static inline void save   ( monitor_desc ** ctx, short count, __attribute((unused)) spinlock ** locks, unsigned int * /*out*/ recursions, __waitfor_mask_t * /*out*/ masks ) {
+static inline void save( monitor_desc ** ctx, short count, __attribute((unused)) spinlock ** locks, unsigned int * /*out*/ recursions, __waitfor_mask_t * /*out*/ masks ) {
 	for( int i = 0; i < count; i++ ) {
 		recursions[i] = ctx[i]->recursion;
