diff --git a/feat-core/RandomBigInt.ml b/feat-core/RandomBigInt.ml
index 70fdb21739ccc04776cb2eb0cccfa015b66c11ee..4b88ce9d4f1902f2bfe693446b4bb42e50433eff 100644
--- a/feat-core/RandomBigInt.ml
+++ b/feat-core/RandomBigInt.ml
@@ -11,8 +11,8 @@
 (* Uniform random generation of large integers. Copied and adapted from Jane
    Street's bignum library. *)
 
-(* [random state range] chooses a [depth] and generates random values using
-   [R.bits state], called [1 lsl depth] times and concatenated. The
+(* [random range] chooses a [depth] and generates random values using
+   [R.bits()], called [1 lsl depth] times and concatenated. The
    preliminary result [n] therefore satisfies [0 <= n < 1 lsl (30 lsl depth)].
 
    In order for the random choice to be uniform between [0] and [range-1],
@@ -40,39 +40,36 @@ let rec choose_bit_depth_for_range_from range depth =
 let choose_bit_depth_for_range (range : Z.t) : int =
   choose_bit_depth_for_range_from range 0
 
-let rec random_bigint_at_depth (state : R.State.t) depth : Z.t =
+let rec random_bigint_at_depth depth : Z.t =
   if depth = 0 then
-    Z.of_int (R.State.bits state)
+    Z.of_int (R.bits())
   else
     let depth = depth - 1 in
-    let prefix = random_bigint_at_depth state depth in
-    let suffix = random_bigint_at_depth state depth in
+    let prefix = random_bigint_at_depth depth in
+    let suffix = random_bigint_at_depth depth in
     Z.(prefix lsl (bits_at_depth depth) lor suffix)
 
 let random_value_is_uniform_in_range range depth n =
   let k = Z.(range_at_depth depth / range) in
   Z.lt n Z.(k * range)
 
-let rec large_random_at_depth state range depth =
-  let result = random_bigint_at_depth state depth in
+let rec large_random_at_depth range depth =
+  let result = random_bigint_at_depth depth in
   if random_value_is_uniform_in_range range depth result
   then Z.(result mod range)
-  else large_random_at_depth state range depth
+  else large_random_at_depth range depth
 
-let large_random state range =
+let large_random range =
   let tolerance_factor = Z.of_int 1000 in
   let depth = choose_bit_depth_for_range Z.(range * tolerance_factor) in
-  large_random_at_depth state range depth
+  large_random_at_depth range depth
 
-let random state range =
+let random range =
   if Z.leq range Z.zero then
     invalid_arg (sprintf "random: %s is not positive" (Z.to_string range))
   else if Z.lt range Z.(one lsl 30) then
-    Z.of_int (R.State.int state (Z.to_int range))
+    Z.of_int (R.int (Z.to_int range))
   else
-    large_random state range
-
-let random range =
-  random (R.get_state ()) range
+    large_random range
 
 end
diff --git a/feat-core/RandomSig.ml b/feat-core/RandomSig.ml
index 2ba634e65a2a0b5b8a3dd81f3b2db089143987e7..2ba43042b6f1773d2fe7a18b259057a001d605c8 100644
--- a/feat-core/RandomSig.ml
+++ b/feat-core/RandomSig.ml
@@ -11,22 +11,12 @@
 (** A subset of the signature of the module {!Stdlib.Random}. *)
 module type S = sig
 
-  module State : sig
+  (** [bits s] returns 30 random bits in a nonnegative integer. *)
+  val bits : unit -> int
 
-    (** The state of the random number generator. *)
-    type t
-
-    (** [bits s] returns 30 random bits in a nonnegative integer. *)
-    val bits : t -> int
-
-    (** [int bound] returns a random integer comprised between 0 (inclusive)
-        and [bound] (exclusive). [bound] must be greater than 0 and less than
-        2{^30}. *)
-    val int : t -> int -> int
-
-  end
-
-  (** [get_state()] returns the current state of the generator. *)
-  val get_state : unit -> State.t
+  (** [int bound] returns a random integer comprised between 0 (inclusive)
+      and [bound] (exclusive). [bound] must be greater than 0 and less than
+      2{^30}. *)
+  val int : int -> int
 
 end