Index: src/libcfa/concurrency/kernel
===================================================================
--- src/libcfa/concurrency/kernel	(revision 75f3522eb95aed7401634be95556b2b6f1ae5d97)
+++ src/libcfa/concurrency/kernel	(revision ee897e4b569553fa2a4e77d3de048d5fbfcba4fb)
@@ -27,8 +27,20 @@
 
 //-----------------------------------------------------------------------------
+// Locks
+// void lock( simple_lock * );
+// void lock( simple_lock *, spinlock * );
+// void unlock( simple_lock * );
+
+void lock( spinlock * );
+void unlock( spinlock * );
+
+void wait( signal_once * );
+void signal( signal_once * );
+
+//-----------------------------------------------------------------------------
 // Cluster
 struct cluster {
 	simple_thread_list ready_queue;
-	// pthread_spinlock_t lock;
+	spinlock lock;
 };
 
@@ -38,8 +50,16 @@
 //-----------------------------------------------------------------------------
 // Processor
-enum ProcessorAction { 
-	Reschedule,
-	NoAction
+enum FinishOpCode { No_Action, Release, Schedule, Release_Schedule };
+struct FinishAction {
+	FinishOpCode action_code;
+	thread * thrd;
+	spinlock * lock;
 };
+static inline void ?{}(FinishAction * this) { 
+	this->action_code = No_Action;
+	this->thrd = NULL;
+	this->lock = NULL;
+}
+static inline void ^?{}(FinishAction * this) {}
 
 struct processor {
@@ -49,7 +69,9 @@
 	thread * current_thread;
 	pthread_t kernel_thread;
-	simple_lock lock;
-	volatile bool terminated;
-	ProcessorAction thread_action;
+	
+	signal_once terminated;
+	volatile bool is_terminated;
+
+	struct FinishAction finish;
 };
 
@@ -57,13 +79,4 @@
 void ?{}(processor * this, cluster * cltr);
 void ^?{}(processor * this);
-
-//-----------------------------------------------------------------------------
-// Locks
-
-void ?{}(simple_lock * this);
-void ^?{}(simple_lock * this);
-
-void lock( simple_lock * );
-void unlock( simple_lock * );
 
 #endif //KERNEL_H
