diff --git a/kernel/src/arch/x86_64/mod.rs b/kernel/src/arch/x86_64/mod.rs
index a67a7ed..7437b1e 100644
--- a/kernel/src/arch/x86_64/mod.rs
+++ b/kernel/src/arch/x86_64/mod.rs
@@ -226,6 +226,33 @@ pub fn hardware_random_u64() -> u64 {
     }
 }
 
+pub fn hardware_random_u32() -> u32 {
+    use {log::trace, rdrand::RdRand};
+    let gen = RdRand::new();
+    match gen {
+        Ok(gen) => {
+            let ret = gen.try_next_u32().unwrap();
+            trace!("Random {}", ret);
+            return ret;
+        }
+        Err(err) => {
+            warn!("RDRand not supported.");
+            // Try rdseed
+            let gen = RdSeed::new();
+            match gen {
+                Ok(gen) => {
+                    let ret = gen.try_next_u32().unwrap();
+                    trace!("Random {}", ret);
+                    return ret;
+                }
+                Err(err) => {
+                    panic!("Neither RDRand or RDSeed are supported")
+                }
+            }
+        }
+    }
+}
+
 pub fn get_edid() {}
 
 pub fn register_dump() {
diff --git a/kernel/src/holeybytes/ecah.rs b/kernel/src/holeybytes/ecah.rs
index 5da4a8d..516ae2d 100644
--- a/kernel/src/holeybytes/ecah.rs
+++ b/kernel/src/holeybytes/ecah.rs
@@ -133,7 +133,7 @@ pub fn handler(vm: &mut Vm) {
                 }
                 // source of rng
                 4 => {
-                    vm.registers[1] = hbvm::value::Value(crate::arch::hardware_random_u64());
+                    vm.registers[1] = hbvm::value::Value(crate::arch::hardware_random_u32() as u64);
                 }
                 buffer_id => {
                     let mut buffs = IPC_BUFFERS.lock();
diff --git a/sysdata/libraries/stn/src/math.hb b/sysdata/libraries/stn/src/math.hb
index 2fd1d02..94ee78a 100644
--- a/sysdata/libraries/stn/src/math.hb
+++ b/sysdata/libraries/stn/src/math.hb
@@ -1,7 +1,14 @@
+SIZEOF_INT := 31
+
 abs := fn(x: int): int {
-	mask := x >> 31
+	mask := x >> SIZEOF_INT
 	return (x ^ mask) - mask
 }
 min := fn(a: int, b: int): int {
-	return b + (a - b & a - b >> 31)
+	c := a - b
+	return b + (c & c >> SIZEOF_INT)
+}
+max := fn(a: int, b: int): int {
+	c := a - b
+	return a - (c & c >> SIZEOF_INT)
 }
\ No newline at end of file
diff --git a/sysdata/libraries/stn/src/random.hb b/sysdata/libraries/stn/src/random.hb
index df1f297..dbff80a 100644
--- a/sysdata/libraries/stn/src/random.hb
+++ b/sysdata/libraries/stn/src/random.hb
@@ -1,5 +1,5 @@
-uint_64 := fn(min: uint, max: uint): uint {
-	rng := @eca(uint, 3, 4)
+integer := fn(min: int, max: int): int {
+	rng := @eca(int, 3, 4)
 
 	if min != 0 | max != 0 {
 		return rng % (max - min + 1) + min
diff --git a/sysdata/programs/fb_driver/src/main.hb b/sysdata/programs/fb_driver/src/main.hb
index fafa1e7..8893c76 100644
--- a/sysdata/programs/fb_driver/src/main.hb
+++ b/sysdata/programs/fb_driver/src/main.hb
@@ -1,5 +1,4 @@
-.{log, memory, string, buffer} := @use("../../../libraries/stn/src/lib.hb");
-.{front_buffer_ptr, screenidx, ColorBGRA, Point} := @use("./lib.hb")
+.{log, memory, string, buffer} := @use("../../../libraries/stn/src/lib.hb")
 
 main := fn(): int {
 	buffer_id := buffer.create("XGraphics\0")