Index: libcfa/src/concurrency/clib/cfathread.cfa
===================================================================
--- libcfa/src/concurrency/clib/cfathread.cfa	(revision 145dcd5639a55333a3a239964505a9543d512d44)
+++ libcfa/src/concurrency/clib/cfathread.cfa	(revision c90db2db871a3e57c7c5f98cc53831bb1ca50d84)
@@ -22,4 +22,5 @@
 #include "thread.hfa"
 #include "time.hfa"
+#include "stdlib.hfa"
 
 #include "cfathread.h"
@@ -195,5 +196,5 @@
 				eevent.data.u64 = (uint64_t)active_thread();
 
-				int id = thread_rand() % poller_cnt;
+				int id = prng() % poller_cnt;
 				if(0 != epoll_ctl(poller_fds[id], EPOLL_CTL_ADD, fd, &eevent))
 				{
Index: libcfa/src/concurrency/kernel/fwd.hfa
===================================================================
--- libcfa/src/concurrency/kernel/fwd.hfa	(revision 145dcd5639a55333a3a239964505a9543d512d44)
+++ libcfa/src/concurrency/kernel/fwd.hfa	(revision c90db2db871a3e57c7c5f98cc53831bb1ca50d84)
@@ -79,32 +79,17 @@
 			return
 			#if defined(__SIZEOF_INT128__)
-				__lehmer64( kernelTLS().rand_seed );
+				lehmer64( kernelTLS().rand_seed );
 			#else
-				__xorshift64( kernelTLS().rand_seed );
+				xorshift_13_7_17( kernelTLS().rand_seed );
 			#endif
 		}
 
-		#define M  (1_l64u << 48_l64u)
-		#define A  (25214903917_l64u)
-		#define AI (18446708753438544741_l64u)
-		#define C  (11_l64u)
-		#define D  (16_l64u)
-
 		static inline unsigned __tls_rand_fwd() {
-			kernelTLS().ready_rng.fwd_seed = (A * kernelTLS().ready_rng.fwd_seed + C) & (M - 1);
-			return kernelTLS().ready_rng.fwd_seed >> D;
+			return LCGBI_fwd( kernelTLS().ready_rng.fwd_seed );
 		}
 
 		static inline unsigned __tls_rand_bck() {
-			unsigned int r = kernelTLS().ready_rng.bck_seed >> D;
-			kernelTLS().ready_rng.bck_seed = AI * (kernelTLS().ready_rng.bck_seed - C) & (M - 1);
-			return r;
-		}
-
-		#undef M
-		#undef A
-		#undef AI
-		#undef C
-		#undef D
+			return LCGBI_bck( kernelTLS().ready_rng.bck_seed );
+		}
 
 		static inline void __tls_rand_advance_bck(void) {
@@ -140,6 +125,4 @@
 			}
 		}
-
-		extern uint64_t thread_rand();
 
 		// Semaphore which only supports a single thread
Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision 145dcd5639a55333a3a239964505a9543d512d44)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision c90db2db871a3e57c7c5f98cc53831bb1ca50d84)
@@ -102,4 +102,5 @@
 extern void __wake_proc(processor *);
 extern int cfa_main_returned;							// from interpose.cfa
+extern uint32_t __global_random_seed;
 
 //-----------------------------------------------------------------------------
@@ -175,5 +176,4 @@
 	this.context = &storage_mainThreadCtx;
 }
-
 
 
@@ -490,4 +490,5 @@
 	preferred = ready_queue_new_preferred();
 	last_proc = 0p;
+	random_state = __global_random_seed;
 	#if defined( __CFA_WITH_VERIFY__ )
 		canary = 0x0D15EA5E0D15EA5Ep;
Index: libcfa/src/concurrency/thread.cfa
===================================================================
--- libcfa/src/concurrency/thread.cfa	(revision 145dcd5639a55333a3a239964505a9543d512d44)
+++ libcfa/src/concurrency/thread.cfa	(revision c90db2db871a3e57c7c5f98cc53831bb1ca50d84)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jan 10 17:05:35 2022
-// Update Count     : 28
+// Last Modified On : Thu Jan 13 20:11:55 2022
+// Update Count     : 42
 //
 
@@ -25,7 +25,5 @@
 #include "invoke.h"
 
-uint64_t thread_rand();
-
-extern uint32_t __thread_seed;							// global thread seed
+extern uint32_t __global_random_seed;
 
 //-----------------------------------------------------------------------------
@@ -41,5 +39,4 @@
 	self_mon.owner = &this;
 	self_mon.recursion = 1;
-	random_state = __thread_seed;
 	self_mon_p = &self_mon;
 	curr_cluster = &cl;
@@ -48,4 +45,5 @@
 	preferred = ready_queue_new_preferred();
 	last_proc = 0p;
+	random_state = __global_random_seed;
 	#if defined( __CFA_WITH_VERIFY__ )
 		canary = 0x0D15EA5E0D15EA5Ep;
@@ -174,25 +172,11 @@
 }
 
-uint64_t thread_rand() {
-	disable_interrupts();
-	uint64_t ret = __tls_rand();
-	enable_interrupts();
-	return ret;
-}
-
+//-----------------------------------------------------------------------------
 #define GENERATOR LCG
 
-inline uint32_t MarsagliaXor( uint32_t & state ) {
-	state ^= state << 6;
-	state ^= state >> 21;
-	state ^= state << 7;
-	return state;
-} // MarsagliaXor
-
-inline uint32_t LCG( uint32_t & state ) {				// linear congruential generator
-	return state = 36969 * (state & 65535) + (state >> 16); // 36969 is NOT prime!
-} // LCG
-
-void set_seed( uint32_t seed ) { active_thread()->random_state = seed; __thread_seed = seed; }
+void set_seed( uint32_t seed ) {
+ 	active_thread()->random_state = __global_random_seed = seed;
+	GENERATOR( active_thread()->random_state );
+} // set_seed
 uint32_t prng( void ) { return GENERATOR( active_thread()->random_state ); } // [0,UINT_MAX]
 
