diff --git a/src/gb.rs b/src/gb.rs
index b1b7533be136055b5099255f4ed7290d73504aa0..1d03e62f00d0732bc3beb2721ad701ab5e8fe1b6 100644
--- a/src/gb.rs
+++ b/src/gb.rs
@@ -1,6 +1,6 @@
 use std::{cell::RefCell, rc::Rc};
 
-use crate::{cpu::Cpu, mmu::Mmu, util::read_file};
+use crate::{cpu::Cpu, mmu::Mmu, ppu::Ppu, util::read_file};
 
 pub type SharedMut<T> = Rc<RefCell<T>>;
 
@@ -10,7 +10,8 @@ pub struct GameBoy {
 
 impl GameBoy {
     pub fn new() -> GameBoy {
-        let mmu = Mmu::new();
+        let ppu = Ppu::new();
+        let mmu = Mmu::new(ppu);
         let cpu = Cpu::new(mmu);
         GameBoy { cpu: cpu }
     }
diff --git a/src/mmu.rs b/src/mmu.rs
index 5044defd2dbcc947c1d7e112668fdaea65275e55..6666aeaee69bda1f2406616b602571e03a73ed03 100644
--- a/src/mmu.rs
+++ b/src/mmu.rs
@@ -1,16 +1,17 @@
+use crate::ppu::Ppu;
+
 pub const RAM_SIZE: usize = 8192;
-pub const VRAM_SIZE: usize = 8192;
 
 pub struct Mmu {
+    ppu: Ppu,
     ram: [u8; RAM_SIZE],
-    vram: [u8; VRAM_SIZE],
 }
 
 impl Mmu {
-    pub fn new() -> Mmu {
+    pub fn new(ppu: Ppu) -> Mmu {
         Mmu {
+            ppu: ppu,
             ram: [0u8; RAM_SIZE],
-            vram: [0u8; VRAM_SIZE],
         }
     }
 
diff --git a/src/ppu.rs b/src/ppu.rs
index 8b137891791fe96927ad78e64b0aad7bded08bdc..226a07a75cbad7b1dda6d2183db6f4ace1b88e47 100644
--- a/src/ppu.rs
+++ b/src/ppu.rs
@@ -1 +1,13 @@
+pub const VRAM_SIZE: usize = 8192;
 
+pub struct Ppu {
+    vram: [u8; VRAM_SIZE],
+}
+
+impl Ppu {
+    pub fn new() -> Ppu {
+        Ppu {
+            vram: [0u8; VRAM_SIZE],
+        }
+    }
+}