Index: libcfa/src/concurrency/invoke.h
===================================================================
--- libcfa/src/concurrency/invoke.h	(revision 26544f91e0ffc7c7785fad9b83dda0e613a2a34b)
+++ libcfa/src/concurrency/invoke.h	(revision 0348fd8041753ad3a2b4b4442a5b639a0aa201d4)
@@ -215,7 +215,4 @@
 		struct __thread_user_link cltr_link;
 
-		// used to store state between clh lock/unlock
-		volatile bool * clh_prev;
-
 		// used to point to this thd's current clh node
 		volatile bool * clh_node;
Index: libcfa/src/concurrency/locks.hfa
===================================================================
--- libcfa/src/concurrency/locks.hfa	(revision 26544f91e0ffc7c7785fad9b83dda0e613a2a34b)
+++ libcfa/src/concurrency/locks.hfa	(revision 0348fd8041753ad3a2b4b4442a5b639a0aa201d4)
@@ -228,4 +228,5 @@
 struct clh_lock {
 	volatile bool * volatile tail;
+    volatile bool * volatile head;
 };
 
@@ -237,12 +238,11 @@
 	*(curr_thd->clh_node) = false;
 	volatile bool * prev = __atomic_exchange_n((bool **)(&l.tail), (bool *)(curr_thd->clh_node), __ATOMIC_SEQ_CST);
-	while(!__atomic_load_n(prev, __ATOMIC_ACQUIRE)) Pause();
-	curr_thd->clh_prev = prev;
+	while(!__atomic_load_n(prev, __ATOMIC_SEQ_CST)) Pause();
+    __atomic_store_n((bool **)(&l.head), (bool *)curr_thd->clh_node, __ATOMIC_SEQ_CST);
+    curr_thd->clh_node = prev;
 }
 
 static inline void unlock(clh_lock & l) {
-	thread$ * curr_thd = active_thread();
-	__atomic_store_n(curr_thd->clh_node, true, __ATOMIC_RELEASE);
-	curr_thd->clh_node = curr_thd->clh_prev;
+	__atomic_store_n((bool *)(l.head), true, __ATOMIC_SEQ_CST);
 }
 
