diff --git a/src/arch/x86_64/paging/table.rs b/src/arch/x86_64/paging/table.rs
index 67845607386d0b0074456c273de55ece1537e0dc..2f979f745b8158dfa3d37edf8e480689f55bc22e 100644
--- a/src/arch/x86_64/paging/table.rs
+++ b/src/arch/x86_64/paging/table.rs
@@ -9,7 +9,7 @@ use memory::allocate_frames;
 use super::entry::{EntryFlags, Entry};
 use super::ENTRY_COUNT;
 
-pub const P4: *mut Table<Level4> = 0xffff_ffff_ffff_f000 as *mut _;
+pub const P4: *mut Table<Level4> = (::RECURSIVE_PAGE_OFFSET | 0x7ffffff000) as *mut _;
 
 pub trait TableLevel {}
 
diff --git a/src/context/memory.rs b/src/context/memory.rs
index 7ec1f809760a739be8eb112c271f845464d5fdaa..1fc68b7256c6fc1f67dd1b09f48a17b421b34f26 100644
--- a/src/context/memory.rs
+++ b/src/context/memory.rs
@@ -3,6 +3,7 @@ use alloc::collections::VecDeque;
 use core::intrinsics;
 use spin::Mutex;
 
+use arch::paging::PAGE_SIZE;
 use ipi::{ipi, IpiKind, IpiTarget};
 use memory::Frame;
 use paging::{ActivePageTable, InactivePageTable, Page, PageIter, PhysicalAddress, VirtualAddress};
@@ -67,7 +68,7 @@ impl Grant {
     pub fn map_inactive(from: VirtualAddress, to: VirtualAddress, size: usize, flags: EntryFlags, new_table: &mut InactivePageTable, temporary_page: &mut TemporaryPage) -> Grant {
         let mut active_table = unsafe { ActivePageTable::new() };
 
-        let mut frames = VecDeque::new();
+        let mut frames = VecDeque::with_capacity(size/PAGE_SIZE);
 
         let start_page = Page::containing_address(from);
         let end_page = Page::containing_address(VirtualAddress::new(from.get() + size - 1));