diff --git a/src/cheats/genie.rs b/src/cheats/genie.rs
index 369b37e3cb74ddc8f0fbca5bf5a2d81d31173e37..3501f77000e77d71d58672db4bb3f23c9de3e72b 100644
--- a/src/cheats/genie.rs
+++ b/src/cheats/genie.rs
@@ -41,18 +41,18 @@ impl GameGenie {
         self.codes.contains_key(&addr)
     }
 
-    pub fn get_addr(&self, addr: u16) -> &GameGenieCode {
-        self.codes.get(&addr).unwrap()
+    pub fn get_addr(&self, addr: u16) -> Result<&GameGenieCode, String> {
+        match self.codes.get(&addr) {
+            Some(code) => Ok(code),
+            None => Err(format!("Invalid address: {}", addr)),
+        }
     }
 
     pub fn add_code(&mut self, code: &str) -> Result<&GameGenieCode, String> {
-        let genie_code = match GameGenieCode::from_code(code, None) {
-            Ok(genie_code) => genie_code,
-            Err(message) => return Err(message),
-        };
+        let genie_code = GameGenieCode::from_code(code, None)?;
         let addr = genie_code.addr;
         self.codes.insert(addr, genie_code);
-        Ok(self.get_addr(addr))
+        self.get_addr(addr)
     }
 }
 
diff --git a/src/cheats/shark.rs b/src/cheats/shark.rs
index 565b3b814ff96e49f644220221a155872a709001..5d19a2c788dd83bd7defc94287dffaa4edf318a5 100644
--- a/src/cheats/shark.rs
+++ b/src/cheats/shark.rs
@@ -48,18 +48,18 @@ impl GameShark {
         self.codes.clear();
     }
 
-    pub fn get_addr(&self, addr: u16) -> &GameSharkCode {
-        self.codes.get(&addr).unwrap()
+    pub fn get_addr(&self, addr: u16) -> Result<&GameSharkCode, String> {
+        match self.codes.get(&addr) {
+            Some(code) => Ok(code),
+            None => Err(format!("Invalid address: {}", addr)),
+        }
     }
 
     pub fn add_code(&mut self, code: &str) -> Result<&GameSharkCode, String> {
-        let genie_code = match GameSharkCode::from_code(code, &self.rom_type) {
-            Ok(genie_code) => genie_code,
-            Err(message) => return Err(message),
-        };
-        let addr = genie_code.addr;
-        self.codes.insert(addr, genie_code);
-        Ok(self.get_addr(addr))
+        let shark_code = GameSharkCode::from_code(code, &self.rom_type)?;
+        let addr = shark_code.addr;
+        self.codes.insert(addr, shark_code);
+        self.get_addr(addr)
     }
 
     pub fn writes(&self) -> Vec<(u16, u16, u8)> {
@@ -89,7 +89,7 @@ impl Default for GameShark {
 
 #[derive(Clone)]
 pub struct GameSharkCode {
-    /// The Game Genie code that is going to be applied to the ROM.
+    /// The GameShark code that is going to be applied to the ROM.
     code: String,
 
     /// The RAM bank that the cheat code is going to be applied to,
diff --git a/src/rom.rs b/src/rom.rs
index 1a53b4f29e3ab2384bdbcb34a2052060388d50f6..c2120006dd1c3c3e28a26c0fb72a2638f4d3fa1f 100644
--- a/src/rom.rs
+++ b/src/rom.rs
@@ -1023,7 +1023,7 @@ pub static GAME_GENIE: Mbc = Mbc {
             // retrieves the Game Genie code that matches the current address
             // keep in mind that this assumes that no more that one code is
             // registered for the same memory address
-            let genie_code = game_genie.get_addr(addr);
+            let genie_code = game_genie.get_addr(addr).unwrap();
 
             // obtains the current byte that is stored at the address using
             // the MBC, this value will probably be patched