Index: src/libcfa/concurrency/monitor
===================================================================
--- src/libcfa/concurrency/monitor	(revision 6b0b624129f6017f7706b516a24a52e382e3a334)
+++ src/libcfa/concurrency/monitor	(revision 97e32964dc1e5125b35bd5db0234e6b6f272fe14)
@@ -23,6 +23,13 @@
 
 static inline void ?{}(monitor_desc * this) {
+	(&this->lock){};
 	this->owner = NULL;
+	(&this->entry_queue){};
+	(&this->signal_stack){};
 	this->recursion = 0;
+	this->acceptables = NULL;
+	this->acceptable_count = 0;
+	this->accepted_index = -1;
+	this->pre_accept = 0;
 }
 
@@ -38,5 +45,5 @@
 }
 
-void ?{}( monitor_guard_t * this, monitor_desc ** m, int count );
+void ?{}( monitor_guard_t * this, monitor_desc ** m, int count, void (*func)() );
 void ^?{}( monitor_guard_t * this );
 
@@ -89,11 +96,17 @@
 uintptr_t front( condition * this );
 
+//-----------------------------------------------------------------------------
+// External scheduling
+
+typedef void (*void_fptr_t)(void);
+
 struct __acceptable_t {
-	void (*func)(void);
+	void_fptr_t func;
 	unsigned short count;
-	monitor_desc * monitors[1];
+	monitor_desc ** monitors;
+	bool run_preaccept;
 };
 
-void __accept_internal( unsigned short count, __acceptable_t * acceptables, void (*func)(void) );
+int __accept_internal( unsigned short count, __acceptable_t * acceptables );
 
 // Local Variables: //
