diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs
index d9abec788d2d4e14225208178ad5096d85d259a7..2c916122b4e30b75f89b4b75335f7aae23769f08 100644
--- a/examples/sdl/src/main.rs
+++ b/examples/sdl/src/main.rs
@@ -118,12 +118,18 @@ fn main() {
                 Event::KeyDown {
                     keycode: Some(keycode),
                     ..
-                } => game_boy.key_press(key_to_pad(keycode)),
+                } => match key_to_pad(keycode) {
+                    Some(key) => game_boy.key_press(key),
+                    None => (),
+                },
 
                 Event::KeyUp {
                     keycode: Some(keycode),
                     ..
-                } => game_boy.key_lift(key_to_pad(keycode)),
+                } => match key_to_pad(keycode) {
+                    Some(key) => game_boy.key_lift(key),
+                    None => (),
+                },
 
                 _ => (),
             }
@@ -160,17 +166,17 @@ fn main() {
     }
 }
 
-fn key_to_pad(keycode: Keycode) -> PadKey {
+fn key_to_pad(keycode: Keycode) -> Option<PadKey> {
     match keycode {
-        Keycode::Up => PadKey::Up,
-        Keycode::Down => PadKey::Down,
-        Keycode::Left => PadKey::Left,
-        Keycode::Right => PadKey::Right,
-        Keycode::Return => PadKey::Start,
-        Keycode::Return2 => PadKey::Start,
-        Keycode::Space => PadKey::Select,
-        Keycode::A => PadKey::A,
-        Keycode::S => PadKey::B,
-        _ => PadKey::A, //@todo this does not make sence, make it an Option
+        Keycode::Up => Some(PadKey::Up),
+        Keycode::Down => Some(PadKey::Down),
+        Keycode::Left => Some(PadKey::Left),
+        Keycode::Right => Some(PadKey::Right),
+        Keycode::Return => Some(PadKey::Start),
+        Keycode::Return2 => Some(PadKey::Start),
+        Keycode::Space => Some(PadKey::Select),
+        Keycode::A => Some(PadKey::A),
+        Keycode::S => Some(PadKey::B),
+        _ => None,
     }
 }
diff --git a/src/inst.rs b/src/inst.rs
index 4062d8d28e858d9d56e9b8e9760af52b9e4e8bca..5f4df2cfac9733508ed2485da8f8e29ed32bdff3 100644
--- a/src/inst.rs
+++ b/src/inst.rs
@@ -555,12 +555,6 @@ pub const EXTENDED: [(fn(&mut Cpu), u8, &'static str); 256] = [
 
 fn nop(_cpu: &mut Cpu) {}
 
-fn noimpl(_cpu: &mut Cpu) {
-    let ten_millis = time::Duration::from_millis(10000);
-    thread::sleep(ten_millis); // @todo remove this hack
-    todo!("Instruction not implemented");
-}
-
 fn illegal(_cpu: &mut Cpu) {
     panic!("Illegal instruction");
 }
diff --git a/src/ppu.rs b/src/ppu.rs
index 86e9f0d70a0e7c262e5845c14fdcb75e3c02e4e5..9152939bb4cafb443ae55a37a9f74ffdcf6ac542 100644
--- a/src/ppu.rs
+++ b/src/ppu.rs
@@ -58,15 +58,18 @@ impl Tile {
         self.buffer[y * TILE_WIDTH + x] = value;
     }
 
-    pub fn get_row(&self, y: usize) -> &[u8] {
-        &self.buffer[y * TILE_WIDTH..(y + 1) * TILE_WIDTH]
-    }
-
     pub fn buffer(&self) -> Vec<u8> {
         self.buffer.to_vec()
     }
 }
 
+impl Tile {
+    pub fn get_row(&self, y: usize) -> &[u8] {
+        &self.buffer[y * TILE_WIDTH..(y + 1) * TILE_WIDTH]
+    }
+}
+
+
 impl Tile {
     pub fn palette_buffer(&self, palette: Palette) -> Vec<u8> {
         self.buffer