Index: src/libcfa/concurrency/monitor.c
===================================================================
--- src/libcfa/concurrency/monitor.c	(revision 549c006f5f7e2f45d09672b9abae0dfe3809c271)
+++ src/libcfa/concurrency/monitor.c	(revision b8116cd259402042db4620fda1246d77d458bb34)
@@ -158,4 +158,8 @@
 			LIB_DEBUG_PRINT_SAFE("Kernel :  mon accepts dtor, block and signal it \n");
 
+			// Wake the thread that is waiting for this
+			__condition_criterion_t * urgent = pop( &this->signal_stack );
+			verify( urgent );
+
 			// Reset mask
 			reset_mask( this );
@@ -165,5 +169,5 @@
 
 			// Some one else has the monitor, wait for him to finish and then run
-			BlockInternal( &this->lock );
+			BlockInternal( &this->lock, urgent->owner->waiting_thread );
 
 			// Some one was waiting for us, enter
@@ -551,4 +555,5 @@
 			*mask.accepted = index;
 			if( mask.clauses[index].is_dtor ) {
+				LIB_DEBUG_PRINT_SAFE("Kernel : dtor already there\n");
 				verifyf( mask.clauses[index].size == 1        , "ERROR: Accepted dtor has more than 1 mutex parameter." );
 
