Index: src/libcfa/concurrency/monitor
===================================================================
--- src/libcfa/concurrency/monitor	(revision 59a0bdecc428b48723c9445329fdf464edbb9d8c)
+++ src/libcfa/concurrency/monitor	(revision 1cb934d650adf089eb2786865a4e27013e6c42e5)
@@ -34,5 +34,5 @@
 	this.recursion     = 0;
 	this.mask.accepted = NULL;
-	this.mask.clauses  = NULL;
+	this.mask.data     = NULL;
 	this.mask.size     = 0;
 	this.dtor_node     = NULL;
@@ -40,9 +40,7 @@
 
 struct monitor_guard_t {
-	monitor_desc ** m;
-	__lock_size_t   count;
-	monitor_desc ** prev_mntrs;
-	__lock_size_t   prev_count;
-	fptr_t          prev_func;
+	monitor_desc ** 	m;
+	__lock_size_t   	count;
+	__monitor_group_t prev;
 };
 
@@ -51,8 +49,6 @@
 
 struct monitor_dtor_guard_t {
-	monitor_desc * m;
-	monitor_desc ** prev_mntrs;
-	__lock_size_t   prev_count;
-	fptr_t          prev_func;
+	monitor_desc *    m;
+	__monitor_group_t prev;
 };
 
@@ -83,4 +79,8 @@
 };
 
+static inline __condition_criterion_t * & get_next( __condition_criterion_t & this ) {
+	return this.next;
+}
+
 struct __condition_node_t {
 	// Thread that needs to be woken when all criteria are met
@@ -100,8 +100,7 @@
 };
 
-struct __condition_blocked_queue_t {
-	__condition_node_t * head;
-	__condition_node_t ** tail;
-};
+static inline __condition_node_t * & get_next( __condition_node_t & this ) {
+	return this.next;
+}
 
 void ?{}(__condition_node_t & this, thread_desc * waiting_thread, __lock_size_t count, uintptr_t user_info );
@@ -109,11 +108,7 @@
 void ?{}(__condition_criterion_t & this, monitor_desc * target, __condition_node_t * owner );
 
-void ?{}( __condition_blocked_queue_t & );
-void append( __condition_blocked_queue_t &, __condition_node_t * );
-__condition_node_t * pop_head( __condition_blocked_queue_t & );
-
 struct condition {
 	// Link list which contains the blocked threads as-well as the information needed to unblock them
-	__condition_blocked_queue_t blocked;
+	__queue_t(__condition_node_t) blocked;
 
 	// Array of monitor pointers (Monitors are NOT contiguous in memory)
