Index: libcfa/src/concurrency/kernel/cluster.cfa
===================================================================
--- libcfa/src/concurrency/kernel/cluster.cfa	(revision 71cf6305f0408a73c444ac82879e08008308a5e6)
+++ libcfa/src/concurrency/kernel/cluster.cfa	(revision cd3fc46637821f740cdb83c3afaf218deb572dc4)
@@ -110,5 +110,5 @@
 //=======================================================================
 // Lock-Free registering/unregistering of threads
-unsigned register_proc_id( void ) with(__scheduler_lock->lock) {
+unsigned register_proc_id( void ) with(__scheduler_lock.lock) {
 	__kernel_rseq_register();
 
@@ -132,9 +132,9 @@
 	}
 
-	if(max <= alloc) abort("Trying to create more than %ud processors", __scheduler_lock->lock.max);
+	if(max <= alloc) abort("Trying to create more than %ud processors", __scheduler_lock.lock.max);
 
 	// Step - 2 : F&A to get a new spot in the array.
 	uint_fast32_t n = __atomic_fetch_add(&alloc, 1, __ATOMIC_SEQ_CST);
-	if(max <= n) abort("Trying to create more than %ud processors", __scheduler_lock->lock.max);
+	if(max <= n) abort("Trying to create more than %ud processors", __scheduler_lock.lock.max);
 
 	// Step - 3 : Mark space as used and then publish it.
@@ -154,5 +154,5 @@
 }
 
-void unregister_proc_id( unsigned id ) with(__scheduler_lock->lock) {
+void unregister_proc_id( unsigned id ) with(__scheduler_lock.lock) {
 	/* paranoid */ verify(id < ready);
 	/* paranoid */ verify(id == kernelTLS().sched_id);
@@ -169,5 +169,5 @@
 // Writer side : acquire when changing the ready queue, e.g. adding more
 //  queues or removing them.
-uint_fast32_t ready_mutate_lock( void ) with(__scheduler_lock->lock) {
+uint_fast32_t ready_mutate_lock( void ) with(__scheduler_lock.lock) {
 	/* paranoid */ verify( ! __preemption_enabled() );
 
@@ -196,5 +196,5 @@
 }
 
-void ready_mutate_unlock( uint_fast32_t last_s ) with(__scheduler_lock->lock) {
+void ready_mutate_unlock( uint_fast32_t last_s ) with(__scheduler_lock.lock) {
 	/* paranoid */ verify( ! __preemption_enabled() );
 
Index: libcfa/src/concurrency/kernel/private.hfa
===================================================================
--- libcfa/src/concurrency/kernel/private.hfa	(revision 71cf6305f0408a73c444ac82879e08008308a5e6)
+++ libcfa/src/concurrency/kernel/private.hfa	(revision cd3fc46637821f740cdb83c3afaf218deb572dc4)
@@ -186,6 +186,8 @@
 union __attribute__((aligned(64))) __scheduler_RWLock_t {
 	struct {
+		__attribute__((aligned(64))) char padding;
+
 		// total cachelines allocated
-		unsigned int max;
+		__attribute__((aligned(64))) unsigned int max;
 
 		// cachelines currently in use
@@ -208,10 +210,10 @@
 void ^?{}(__scheduler_RWLock_t & this);
 
-extern __scheduler_RWLock_t * __scheduler_lock;
+extern __scheduler_RWLock_t __scheduler_lock;
 
 //-----------------------------------------------------------------------
 // Reader side : acquire when using the ready queue to schedule but not
 //  creating/destroying queues
-static inline void ready_schedule_lock(void) with(__scheduler_lock->lock) {
+static inline void ready_schedule_lock(void) with(__scheduler_lock.lock) {
 	/* paranoid */ verify( ! __preemption_enabled() );
 	/* paranoid */ verify( ! kernelTLS().in_sched_lock );
@@ -238,5 +240,5 @@
 }
 
-static inline void ready_schedule_unlock(void) with(__scheduler_lock->lock) {
+static inline void ready_schedule_unlock(void) with(__scheduler_lock.lock) {
 	/* paranoid */ verify( ! __preemption_enabled() );
 	/* paranoid */ verify( data[kernelTLS().sched_id] == &kernelTLS().sched_lock );
@@ -259,5 +261,5 @@
 
 	static inline bool ready_mutate_islocked() {
-		return __scheduler_lock->lock.write_lock;
+		return __scheduler_lock.lock.write_lock;
 	}
 #endif
Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision 71cf6305f0408a73c444ac82879e08008308a5e6)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision cd3fc46637821f740cdb83c3afaf218deb572dc4)
@@ -113,5 +113,5 @@
 KERNEL_STORAGE(thread$,	             mainThread);
 KERNEL_STORAGE(__stack_t,            mainThreadCtx);
-KERNEL_STORAGE(__scheduler_RWLock_t, __scheduler_lock);
+// KERNEL_STORAGE(__scheduler_RWLock_t, __scheduler_lock);
 KERNEL_STORAGE(eventfd_t,            mainIdleEventFd);
 KERNEL_STORAGE(io_future_t,          mainIdleFuture);
@@ -123,5 +123,4 @@
 processor            * mainProcessor;
 thread$              * mainThread;
-__scheduler_RWLock_t * __scheduler_lock;
 
 extern "C" {
@@ -148,4 +147,6 @@
 };
 
+__scheduler_RWLock_t __scheduler_lock @= { 0 };
+
 #if   defined(CFA_HAVE_LINUX_LIBRSEQ)
 	// No data needed
@@ -198,6 +199,6 @@
 
 	// Initialize the global scheduler lock
-	__scheduler_lock = (__scheduler_RWLock_t*)&storage___scheduler_lock;
-	(*__scheduler_lock){};
+	// __scheduler_lock = (__scheduler_RWLock_t*)&storage___scheduler_lock;
+	(__scheduler_lock){};
 
 	// Initialize the main cluster
@@ -336,5 +337,5 @@
 	^(*mainCluster){};
 
-	^(*__scheduler_lock){};
+	^(__scheduler_lock){};
 
 	^(__cfa_dbg_global_clusters.list){};
