Index: libcfa/src/concurrency/thread.cfa
===================================================================
--- libcfa/src/concurrency/thread.cfa	(revision 250583e1d4182a47696d102674000af3f44b3644)
+++ libcfa/src/concurrency/thread.cfa	(revision 12b5e94a9df5bfc0037b0fe7eb823f658a9b0d9d)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jan 13 20:11:55 2022
-// Update Count     : 42
+// Last Modified On : Sat Jan 15 14:34:58 2022
+// Update Count     : 45
 //
 
@@ -179,5 +179,9 @@
 	GENERATOR( active_thread()->random_state );
 } // set_seed
-uint32_t prng( void ) { return GENERATOR( active_thread()->random_state ); } // [0,UINT_MAX]
+
+uint32_t prng( void ) {									// [0,UINT_MAX]
+	uint32_t & state = active_thread()->random_state;
+	return GENERATOR( state );
+} // prng
 
 // Local Variables: //
Index: libcfa/src/concurrency/thread.hfa
===================================================================
--- libcfa/src/concurrency/thread.hfa	(revision 250583e1d4182a47696d102674000af3f44b3644)
+++ libcfa/src/concurrency/thread.hfa	(revision 12b5e94a9df5bfc0037b0fe7eb823f658a9b0d9d)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jan  6 16:40:16 2022
-// Update Count     : 7
+// Last Modified On : Wed Feb  9 22:10:14 2022
+// Update Count     : 14
 //
 
@@ -130,4 +130,11 @@
 T & join( T & this );
 
+//----------
+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
+
 // Local Variables: //
 // mode: c //
Index: libcfa/src/stdlib.cfa
===================================================================
--- libcfa/src/stdlib.cfa	(revision 250583e1d4182a47696d102674000af3f44b3644)
+++ libcfa/src/stdlib.cfa	(revision 12b5e94a9df5bfc0037b0fe7eb823f658a9b0d9d)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:10:29 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jan 13 21:38:30 2022
-// Update Count     : 593
+// Last Modified On : Sat Jan 15 14:33:21 2022
+// Update Count     : 595
 //
 
@@ -226,8 +226,7 @@
 
 uint32_t __global_random_seed;							// sequential/concurrent
-uint32_t __global_random_state;						// sequential only
+uint32_t __global_random_state;							// sequential only
 
 void set_seed( PRNG & prng, uint32_t seed_ ) with( prng ) { state = seed = seed_; GENERATOR( state ); } // set seed
-uint32_t prng( PRNG & prng ) with( prng ) { callcnt += 1; return GENERATOR( state ); }
 
 void set_seed( uint32_t seed ) { __global_random_seed = seed; GENERATOR( __global_random_state ); }
Index: libcfa/src/stdlib.hfa
===================================================================
--- libcfa/src/stdlib.hfa	(revision 250583e1d4182a47696d102674000af3f44b3644)
+++ libcfa/src/stdlib.hfa	(revision 12b5e94a9df5bfc0037b0fe7eb823f658a9b0d9d)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jan 13 21:34:46 2022
-// Update Count     : 636
+// Last Modified On : Sat Jan 15 09:57:28 2022
+// Update Count     : 640
 //
 
@@ -18,4 +18,5 @@
 #include "bits/defs.hfa"								// OPTIONAL_THREAD
 #include "bits/align.hfa"								// libAlign
+#include "bits/random.hfa"								// prng
 
 #include <stdlib.h>										// *alloc, strto*, ato*
@@ -410,6 +411,6 @@
 
 void set_seed( PRNG & prng, uint32_t seed_ );
-uint32_t prng( PRNG & prng ) __attribute__(( warn_unused_result )); // [0,UINT_MAX]
 static inline {
+	uint32_t prng( PRNG & prng ) __attribute__(( warn_unused_result )) with( prng ) { callcnt += 1; return LCG( state ); } // [0,UINT_MAX]
 	void ?{}( PRNG & prng ) { set_seed( prng, rdtscl() ); }	// random seed
 	void ?{}( PRNG & prng, uint32_t seed ) { set_seed( prng, seed ); } // fixed seed
