diff --git a/examples/benchmark/src/main.rs b/examples/benchmark/src/main.rs
index fa8ed161a3a739b8037fe2581a43965e12ea7ab1..dd9a40f8f80dc30de7ecce71913d973fb6c744ea 100644
--- a/examples/benchmark/src/main.rs
+++ b/examples/benchmark/src/main.rs
@@ -1,5 +1,4 @@
-use chip_ahoyto::chip8::Chip8;
-use std::{fs::File, io::Read};
+use chip_ahoyto::{chip8::Chip8, util::read_file};
 use time::Instant;
 
 const CYCLE_COUNT: u64 = 10_000_000_000;
@@ -27,10 +26,3 @@ fn main() {
 
     println!("Took {} seconds or {:.2} MHz CPU", duration_s, mega_second);
 }
-
-fn read_file(path: &str) -> Vec<u8> {
-    let mut file = File::open(path).unwrap();
-    let mut data = Vec::new();
-    file.read_to_end(&mut data).unwrap();
-    data
-}
diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs
index 95893e83703c2cf868cda6e340f9b41e3f37922b..a6efd460abb28af260fd906388014b0ad4329e5e 100644
--- a/examples/sdl/src/main.rs
+++ b/examples/sdl/src/main.rs
@@ -1,10 +1,12 @@
-use chip_ahoyto::chip8::{Chip8, SCREEN_PIXEL_HEIGHT, SCREEN_PIXEL_WIDTH};
+use chip_ahoyto::{
+    chip8::Chip8, chip8::SCREEN_PIXEL_HEIGHT, chip8::SCREEN_PIXEL_WIDTH, util::read_file,
+};
 use sdl2::{
     audio::AudioCallback, audio::AudioSpecDesired, event::Event, image::LoadSurface,
     keyboard::Keycode, pixels::Color, pixels::PixelFormatEnum, rect::Rect, render::TextureQuery,
     surface::Surface, ttf::Hinting,
 };
-use std::{fs::File, io::Read, path::Path};
+use std::path::Path;
 
 // handle the annoying Rect i32
 macro_rules! rect(
@@ -378,10 +380,3 @@ fn key_to_btn(keycode: Keycode) -> Option<u8> {
         _ => None,
     }
 }
-
-fn read_file(path: &str) -> Vec<u8> {
-    let mut file = File::open(path).unwrap();
-    let mut data = Vec::new();
-    file.read_to_end(&mut data).unwrap();
-    data
-}
diff --git a/src/chip8.rs b/src/chip8.rs
index da224220c57838230e04f969b893feb68e28fe19..74b547f77c9749034384a8352bf80caa7d827aef 100644
--- a/src/chip8.rs
+++ b/src/chip8.rs
@@ -250,7 +250,7 @@ impl Chip8 {
         self.registers[0xf] = (self.registers[x] > self.registers[y]) as u8;
         self.registers[x].saturating_sub(self.registers[y])
     }
-    
+
     #[inline(always)]
     fn call_subroutine(&mut self, addr: u16) {
         self.stack[self.sp as usize] = self.pc;
diff --git a/src/chip8_neo.rs b/src/chip8_neo.rs
index bf8c882785fc6c14f07e9a33a97cd179791c9118..3698867260ccfdfd2a37c38ff88aea3589b6d467 100644
--- a/src/chip8_neo.rs
+++ b/src/chip8_neo.rs
@@ -1,3 +1,3 @@
-pub struct Chip8Neo {
-    vram: [u8]
-}
+pub struct Chip8Neo {
+    vram: [u8],
+}
diff --git a/src/lib.rs b/src/lib.rs
index c61f1c19ae3b822a5864093f149c400e760757f9..906a030a2ea6efafe48d498e6e7fd56ed8e45ebf 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,2 +1,3 @@
 pub mod chip8;
 pub mod chip8_neo;
+pub mod util;
diff --git a/src/util.rs b/src/util.rs
new file mode 100644
index 0000000000000000000000000000000000000000..e99bac46ae2c3da5d3d3f017e6efae4736baa1e2
--- /dev/null
+++ b/src/util.rs
@@ -0,0 +1,8 @@
+use std::{fs::File, io::Read};
+
+pub fn read_file(path: &str) -> Vec<u8> {
+    let mut file = File::open(path).unwrap();
+    let mut data = Vec::new();
+    file.read_to_end(&mut data).unwrap();
+    data
+}