Index: src/libcfa/concurrency/invoke.h
===================================================================
--- src/libcfa/concurrency/invoke.h	(revision e2f7bc3f75223dd833821863a884160e203bb19d)
+++ src/libcfa/concurrency/invoke.h	(revision f265042c897846bca67d9bccada8b87b9ad4daf8)
@@ -125,4 +125,5 @@
 
             static inline bool ?==?( const __monitor_group_t & lhs, const __monitor_group_t & rhs ) {
+                  if( (lhs.list != 0) != (rhs.list != 0) ) return false;
                   if( lhs.size != rhs.size ) return false;
                   if( lhs.func != rhs.func ) return false;
Index: src/libcfa/concurrency/monitor.c
===================================================================
--- src/libcfa/concurrency/monitor.c	(revision e2f7bc3f75223dd833821863a884160e203bb19d)
+++ src/libcfa/concurrency/monitor.c	(revision f265042c897846bca67d9bccada8b87b9ad4daf8)
@@ -431,4 +431,6 @@
 	short actual_count = aggregate( mon_storage, mask );
 
+	if(actual_count == 0) return;
+
 	// Create storage for monitor context
 	monitor_ctx( mon_storage, actual_count );
@@ -455,5 +457,8 @@
 
 
-	if( duration == 0 ) return -1;
+	if( duration == 0 ) {
+		unlock_all( locks, count );
+		return;
+	}
 
 
@@ -642,8 +647,8 @@
 	for(	thread_desc ** thrd_it = &entry_queue->head;
 		*thrd_it;
-		thrd_it = &(*thrd_it)->next)
-	{
+		thrd_it = &(*thrd_it)->next
+	) {
 		// For each acceptable check if it matches
-		int i;
+		int i = 0;
 		__acceptable_t * end = mask.clauses + mask.size;
 		for( __acceptable_t * it = mask.clauses; it != end; it++, i++ ) {
