Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision 6a823241f523e2ed232755b1a5401712de96e95c)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision 4708eaab5aaeda0185c6be7624a924ef7b09bc1e)
@@ -18,20 +18,20 @@
 
 // C Includes
-#include <errno.h>              // errno
+#include <errno.h>										// errno
 #include <signal.h>
-#include <string.h>             // strerror
-#include <unistd.h>             // sysconf
+#include <string.h>										// strerror
+#include <unistd.h>										// sysconf
 
 extern "C" {
-      #include <limits.h>       // PTHREAD_STACK_MIN
-	#include <unistd.h>       // syscall
-	#include <sys/eventfd.h>  // eventfd
-      #include <sys/mman.h>     // mprotect
-      #include <sys/resource.h> // getrlimit
+	#include <limits.h>									// PTHREAD_STACK_MIN
+	#include <unistd.h>									// syscall
+	#include <sys/eventfd.h>							// eventfd
+	#include <sys/mman.h>								// mprotect
+	#include <sys/resource.h>							// getrlimit
 }
 
 // CFA Includes
 #include "kernel_private.hfa"
-#include "startup.hfa"          // STARTUP_PRIORITY_XXX
+#include "startup.hfa"									// STARTUP_PRIORITY_XXX
 #include "limits.hfa"
 #include "math.hfa"
@@ -102,5 +102,5 @@
 extern void __wake_proc(processor *);
 extern int cfa_main_returned;							// from interpose.cfa
-extern uint32_t __global_random_seed;
+uint32_t __global_random_prime = 4_294_967_291u, __global_random_mask = false;
 
 //-----------------------------------------------------------------------------
@@ -490,5 +490,5 @@
 	preferred = ready_queue_new_preferred();
 	last_proc = 0p;
-	random_state = __global_random_seed;
+	random_state = __global_random_mask ? __global_random_prime : __global_random_prime ^ rdtscl();
 	#if defined( __CFA_WITH_VERIFY__ )
 		canary = 0x0D15EA5E0D15EA5Ep;
Index: libcfa/src/concurrency/thread.cfa
===================================================================
--- libcfa/src/concurrency/thread.cfa	(revision 6a823241f523e2ed232755b1a5401712de96e95c)
+++ libcfa/src/concurrency/thread.cfa	(revision 4708eaab5aaeda0185c6be7624a924ef7b09bc1e)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jan 15 14:34:58 2022
-// Update Count     : 45
+// Last Modified On : Sat Feb 12 08:45:33 2022
+// Update Count     : 65
 //
 
@@ -25,5 +25,5 @@
 #include "invoke.h"
 
-extern uint32_t __global_random_seed;
+extern uint32_t __global_random_seed, __global_random_prime, __global_random_mask;
 
 //-----------------------------------------------------------------------------
@@ -45,5 +45,5 @@
 	preferred = ready_queue_new_preferred();
 	last_proc = 0p;
-	random_state = __global_random_seed;
+	random_state = __global_random_mask ? __global_random_prime : __global_random_prime ^ rdtscl();
 	#if defined( __CFA_WITH_VERIFY__ )
 		canary = 0x0D15EA5E0D15EA5Ep;
@@ -178,4 +178,6 @@
  	active_thread()->random_state = __global_random_seed = seed;
 	GENERATOR( active_thread()->random_state );
+	__global_random_prime = active_thread()->random_state;
+	__global_random_mask = true;
 } // set_seed
 
Index: libcfa/src/concurrency/thread.hfa
===================================================================
--- libcfa/src/concurrency/thread.hfa	(revision 6a823241f523e2ed232755b1a5401712de96e95c)
+++ libcfa/src/concurrency/thread.hfa	(revision 4708eaab5aaeda0185c6be7624a924ef7b09bc1e)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb  9 22:10:14 2022
-// Update Count     : 14
+// Last Modified On : Fri Feb 11 16:34:07 2022
+// Update Count     : 20
 //
 
@@ -131,9 +131,15 @@
 
 //----------
+// prng
 static inline {
 	uint32_t prng( thread$ & th ) __attribute__(( warn_unused_result )) { return LCG( th.random_state ); } // [0,UINT_MAX]
 	uint32_t prng( thread$ & th, uint32_t u ) __attribute__(( warn_unused_result )) { return prng( th ) % u; } // [0,u)
 	uint32_t prng( thread$ & th, uint32_t l, uint32_t u ) __attribute__(( warn_unused_result )) { return prng( th, u - l + 1 ) + l; } // [l,u]
-} // prng
+	forall( T & | is_thread(T) ) {
+		uint32_t prng( T & th ) __attribute__(( warn_unused_result )) { return prng( (thread &)th ); } // [0,UINT_MAX]
+		uint32_t prng( T & th, uint32_t u ) __attribute__(( warn_unused_result )) { return prng( th ) % u; } // [0,u)
+		uint32_t prng( T & th, uint32_t l, uint32_t u ) __attribute__(( warn_unused_result )) { return prng( th, u - l + 1 ) + l; } // [l,u]
+	} // distribution
+} // distribution
 
 // Local Variables: //
