diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs
index 3782eb14ccb4bd98b6052c7530a522202f842ce0..ad4324cbf8273ae3f074ce4210f51d1d541d9046 100644
--- a/examples/sdl/src/main.rs
+++ b/examples/sdl/src/main.rs
@@ -161,11 +161,11 @@ fn main() {
     //let rom = game_boy.load_rom_file("../../res/roms.prop/super_mario.gb");
     //let rom = game_boy.load_rom_file("../../res/roms.prop/super_mario_2.gb");
 
-    //let rom = game_boy.load_rom_file("../../res/roms/firstwhite.gb");
+    let rom = game_boy.load_rom_file("../../res/roms/firstwhite.gb");
     //let rom = game_boy.load_rom_file("../../res/roms/opus5.gb");
 
     //let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/cpu_instrs.gb"); // PASSED
-    let rom = game_boy.load_rom_file("../../res/roms/paradius/interrupt_time/interrupt_time.gb"); // FAILED
+    //let rom = game_boy.load_rom_file("../../res/roms/paradius/interrupt_time/interrupt_time.gb"); // FAILED
     //let rom = game_boy.load_rom_file("../../res/roms/paradius/instr_timing/instr_timing.gb"); // PASSED
     //let rom = game_boy.load_rom_file("../../res/roms/paradius/mem_timing/mem_timing.gb"); // FAILED
     //let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/01-special.gb"); // PASSED
diff --git a/src/cpu.rs b/src/cpu.rs
index fda81cf99d0f95461ae7149f1c8df9288e9e8706..0d60d5c1ac056129d86637bfee80485abd8cb2e2 100644
--- a/src/cpu.rs
+++ b/src/cpu.rs
@@ -118,7 +118,7 @@ impl Cpu {
                     self.halted = false;
                 }
 
-                return 20;
+                return 24;
             }
             // @todo aggregate the handling of these interrupts
             else if (self.mmu.ie & 0x02 == 0x02) && self.mmu.ppu().int_stat() {
@@ -138,7 +138,7 @@ impl Cpu {
                     self.halted = false;
                 }
 
-                return 20;
+                return 24;
             }
             // @todo aggregate the handling of these interrupts
             else if (self.mmu.ie & 0x04 == 0x04) && self.mmu.timer().int_tima() {
@@ -158,7 +158,7 @@ impl Cpu {
                     self.halted = false;
                 }
 
-                return 20;
+                return 24;
             }
             // @todo aggregate the handling of these interrupts
             else if (self.mmu.ie & 0x10 == 0x10) && self.mmu.pad().int_pad() {
@@ -178,7 +178,7 @@ impl Cpu {
                     self.halted = false;
                 }
 
-                return 20;
+                return 24;
             }
         }
 
diff --git a/src/ppu.rs b/src/ppu.rs
index 85f1d2789fb9c182485043cba7f52930c6ff3990..6e1d418cb32fac402bdab97aeb36052025d308cf 100644
--- a/src/ppu.rs
+++ b/src/ppu.rs
@@ -334,6 +334,12 @@ impl Ppu {
     }
 
     pub fn clock(&mut self, cycles: u8) {
+        // in case the LCD is currently off then we skip the current
+        // clock operation the PPU should not work
+        if !self.switch_lcd {
+            return;
+        }
+
         // increments the current mode clock by the provided amount
         // of CPU cycles (probably coming from a previous CPU clock)
         self.mode_clock += cycles as u16;
@@ -444,6 +450,13 @@ impl Ppu {
                 // to clear the screen, this is the expected
                 // behaviour for this specific situation
                 if !self.switch_lcd {
+                    self.mode = PpuMode::HBlank;
+                    self.mode_clock = 0;
+                    self.ly = 0;
+                    self.int_vblank = false;
+                    self.int_stat = false;
+                    self.clear_frame_buffer();
+                } else {
                     self.clear_frame_buffer();
                 }
             }
@@ -617,9 +630,6 @@ impl Ppu {
     }
 
     fn render_line(&mut self) {
-        if !self.switch_lcd {
-            return;
-        }
         if self.switch_bg {
             self.render_map(self.bg_map, self.scx, self.scy, 0, 0);
         }