diff --git a/elf.rs b/elf.rs
index b379bba605fbba658389d766f7d7307bb6766e61..10be116bea3607d0774171568ffb579e9be37cbf 100644
--- a/elf.rs
+++ b/elf.rs
@@ -13,7 +13,6 @@ use goblin::elf64::{header, program_header};
 use arch::externs::{memcpy, memset};
 use arch::paging::{entry, ActivePageTable, Page, VirtualAddress};
 use arch::start::usermode;
-use arch::x86::tlb;
 
 /// An ELF executable
 pub struct Elf<'a> {
@@ -63,11 +62,9 @@ impl<'a> Elf<'a> {
                 for page in Page::range_inclusive(start_page, end_page) {
                     active_table.map(page, entry::NO_EXECUTE | entry::WRITABLE);
                 }
+                active_table.flush_all();
 
                 unsafe {
-                    // Update the page table
-                    tlb::flush_all();
-
                     // Copy file data
                     memcpy(segment.p_vaddr as *mut u8,
                             (self.data.as_ptr() as usize + segment.p_offset as usize) as *const u8,
@@ -94,26 +91,20 @@ impl<'a> Elf<'a> {
                 for page in Page::range_inclusive(start_page, end_page) {
                     active_table.remap(page, flags);
                 }
-
-                unsafe {
-                    // Update the page table
-                    tlb::flush_all();
-                }
+                active_table.flush_all();
             }
         }
 
-        unsafe {
-            // Map stack
-            let start_page = Page::containing_address(VirtualAddress::new(0x80000000));
-            let end_page = Page::containing_address(VirtualAddress::new(0x80000000 + 64*1024 - 1));
+        // Map stack
+        let start_page = Page::containing_address(VirtualAddress::new(0x80000000));
+        let end_page = Page::containing_address(VirtualAddress::new(0x80000000 + 64*1024 - 1));
 
-            for page in Page::range_inclusive(start_page, end_page) {
-                active_table.map(page, entry::NO_EXECUTE | entry::WRITABLE | entry::USER_ACCESSIBLE);
-            }
-
-            // Update the page table
-            tlb::flush_all();
+        for page in Page::range_inclusive(start_page, end_page) {
+            active_table.map(page, entry::NO_EXECUTE | entry::WRITABLE | entry::USER_ACCESSIBLE);
+        }
+        active_table.flush_all();
 
+        unsafe {
             // Clear stack
             memset(0x80000000 as *mut u8, 0, 64 * 1024);
 
diff --git a/syscall/process.rs b/syscall/process.rs
index d15c239494768fc1352bc6deb561a023fa9526f9..f357d36c35a0abb3053cad447a285ff53833a9c1 100644
--- a/syscall/process.rs
+++ b/syscall/process.rs
@@ -34,6 +34,7 @@ pub fn brk(address: usize) -> Result<usize> {
             if active_table.translate_page(page).is_none() {
                 //println!("Not found - mapping");
                 active_table.map(page, entry::PRESENT | entry::WRITABLE | entry::NO_EXECUTE | entry::USER_ACCESSIBLE);
+                active_table.flush(page);
             } else {
                 //println!("Found - skipping");
             }
@@ -49,6 +50,7 @@ pub fn brk(address: usize) -> Result<usize> {
             if active_table.translate_page(page).is_some() {
                 //println!("Found - unmapping");
                 active_table.unmap(page);
+                active_table.flush(page);
             } else {
                 //println!("Not found - skipping");
             }