Index: libcfa/src/concurrency/invoke.h
===================================================================
--- libcfa/src/concurrency/invoke.h	(revision 20cf96d2ae36584a53804df284c094c30c96763b)
+++ libcfa/src/concurrency/invoke.h	(revision dd46fd32b4edcf85ecf2f4f00b042e3a3852db2e)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Nov 21 17:40:24 2022
-// Update Count     : 55
+// Last Modified On : Tue Nov 29 20:42:21 2022
+// Update Count     : 56
 //
 
@@ -223,5 +223,5 @@
 		struct processor * last_proc;
 
-		PRNG_ARG_T random_state;						// fast random numbers
+		PRNG_STATE_T random_state;						// fast random numbers
 
 		#if defined( __CFA_WITH_VERIFY__ )
Index: libcfa/src/concurrency/kernel.cfa
===================================================================
--- libcfa/src/concurrency/kernel.cfa	(revision 20cf96d2ae36584a53804df284c094c30c96763b)
+++ libcfa/src/concurrency/kernel.cfa	(revision dd46fd32b4edcf85ecf2f4f00b042e3a3852db2e)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Aug 31 07:08:20 2020
-// Update Count     : 71
+// Last Modified On : Wed Nov 30 18:14:08 2022
+// Update Count     : 76
 //
 
@@ -151,5 +151,5 @@
 	// Because of a bug, we couldn't initialized the seed on construction
 	// Do it here
-	__cfaabi_tls.rand_seed ^= rdtscl();
+	PRNG_SET_SEED( __cfaabi_tls.random_state, rdtscl() );
 	__cfaabi_tls.ready_rng.fwd_seed = 25214903917_l64u * (rdtscl() ^ (uintptr_t)&runner);
 	__tls_rand_advance_bck();
Index: libcfa/src/concurrency/kernel/fwd.hfa
===================================================================
--- libcfa/src/concurrency/kernel/fwd.hfa	(revision 20cf96d2ae36584a53804df284c094c30c96763b)
+++ libcfa/src/concurrency/kernel/fwd.hfa	(revision dd46fd32b4edcf85ecf2f4f00b042e3a3852db2e)
@@ -46,9 +46,6 @@
 			} preemption_state;
 
-			#if defined(__SIZEOF_INT128__)
-				__uint128_t rand_seed;
-			#else
-				uint64_t rand_seed;
-			#endif
+			PRNG_STATE_T random_state;
+
 			struct {
 				uint64_t fwd_seed;
@@ -57,5 +54,4 @@
 
 			struct __stats_t        * volatile this_stats;
-
 
 			#ifdef __CFA_WITH_VERIFY__
@@ -76,11 +72,12 @@
 		#define publicTLS_get( member ) ((typeof(__cfaabi_tls.member))__cfatls_get( __builtin_offsetof(KernelThreadData, member) ))
 
-		static inline uint64_t __tls_rand() {
-			return
-			#if defined(__SIZEOF_INT128__)
-				lehmer64( kernelTLS().rand_seed );
-			#else
-				xorshift_13_7_17( kernelTLS().rand_seed );
-			#endif
+		static inline
+			#ifdef __x86_64__							// 64-bit architecture
+			uint64_t
+			#else										// 32-bit architecture
+			uint32_t
+			#endif // __x86_64__
+		__tls_rand() {
+			return PRNG_NAME( kernelTLS().random_state );
 		}
 
Index: libcfa/src/concurrency/kernel/startup.cfa
===================================================================
--- libcfa/src/concurrency/kernel/startup.cfa	(revision 20cf96d2ae36584a53804df284c094c30c96763b)
+++ libcfa/src/concurrency/kernel/startup.cfa	(revision dd46fd32b4edcf85ecf2f4f00b042e3a3852db2e)
@@ -108,5 +108,5 @@
 extern void __wake_proc(processor *);
 extern int cfa_main_returned;							// from interpose.cfa
-PRNG_ARG_T __global_random_prime = 4_294_967_291u;
+size_t __global_random_prime = 4_294_967_291u;
 bool __global_random_mask = false;
 
@@ -135,14 +135,14 @@
 // Global state
 __thread struct KernelThreadData __cfaabi_tls __attribute__ ((tls_model ( "initial-exec" ))) @= {
-	NULL,												// cannot use 0p
-	NULL,
-	false,
-	{ 1, false, false },
-	0,
-	{ 0, 0 },
-	NULL,
+	.this_thread : NULL,								// cannot use 0p
+	.this_processor : NULL,
+	.sched_lock : false,
+	.preemption_state : { .disable_count : 1, .enabled : false, .in_progress : false },
+	// random_state uninitialized
+	.ready_rng : { .fwd_seed : 0, .bck_seed : 0 },
+	.this_stats : NULL,
 	#ifdef __CFA_WITH_VERIFY__
-		false,
-		0,
+		.in_sched_lock : false,
+		.sched_id : 0,
 	#endif
 };
@@ -521,5 +521,5 @@
 	preferred = ready_queue_new_preferred();
 	last_proc = 0p;
-	random_state = __global_random_mask ? __global_random_prime : __global_random_prime ^ rdtscl();
+	PRNG_SET_SEED( random_state,  __global_random_mask ? __global_random_prime : __global_random_prime ^ rdtscl() );
 	#if defined( __CFA_WITH_VERIFY__ )
 		executing = 0p;
Index: libcfa/src/concurrency/thread.cfa
===================================================================
--- libcfa/src/concurrency/thread.cfa	(revision 20cf96d2ae36584a53804df284c094c30c96763b)
+++ libcfa/src/concurrency/thread.cfa	(revision dd46fd32b4edcf85ecf2f4f00b042e3a3852db2e)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Nov 22 22:18:37 2022
-// Update Count     : 81
+// Last Modified On : Wed Nov 30 18:14:07 2022
+// Update Count     : 95
 //
 
@@ -26,5 +26,6 @@
 #include "invoke.h"
 
-extern PRNG_ARG_T __global_random_seed, __global_random_prime;
+extern size_t __global_random_seed;
+extern size_t __global_random_prime;
 extern bool __global_random_mask;
 
@@ -53,5 +54,5 @@
 	preferred = ready_queue_new_preferred();
 	last_proc = 0p;
-	random_state = __global_random_mask ? __global_random_prime : __global_random_prime ^ rdtscl();
+	PRNG_SET_SEED( random_state, __global_random_mask ? __global_random_prime : __global_random_prime ^ rdtscl() );
 	#if defined( __CFA_WITH_VERIFY__ )
 		executing = 0p;
@@ -228,13 +229,14 @@
 
 void set_seed( size_t seed ) {
-	PRNG_ARG_T & state = active_thread()->random_state;
-	state = __global_random_seed = seed;
+	PRNG_STATE_T & state = active_thread()->random_state;
+	__global_random_seed = seed;
+	PRNG_SET_SEED( state, seed );
 	(void)PRNG_NAME( state );							// prime PRNG
-	__global_random_prime = state;
+	__global_random_prime = seed;
 	__global_random_mask = true;
 } // set_seed
 
 size_t prng( void ) {									// [0,UINT_MAX]
-	PRNG_ARG_T & state = active_thread()->random_state;
+	PRNG_STATE_T( & state ) = active_thread()->random_state;
 	return PRNG_NAME( state );
 } // prng
