diff --git a/src/context/memory.rs b/src/context/memory.rs
index 0931e5c5161bb9c7d0a584369c8e4aa8fdcf9231..c4a17592d7d6b4c3a5b0e4a8db039e90d19b2f69 100644
--- a/src/context/memory.rs
+++ b/src/context/memory.rs
@@ -406,14 +406,14 @@ impl Grant {
 
         let mut flush_all = MapperFlushAll::new();
 
-        let start_page = Page::containing_address(self.region.start);
-        let end_page = Page::containing_address(VirtualAddress::new(self.region.start.get() + self.region.size - 1));
+        let start_page = Page::containing_address(self.start_address());
+        let end_page = Page::containing_address(self.final_address());
         for page in Page::range_inclusive(start_page, end_page) {
             //TODO: One function to do both?
             let flags = active_table.translate_page_flags(page).expect("grant references unmapped memory");
             let frame = active_table.translate_page(page).expect("grant references unmapped memory");
 
-            let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.region.start.get() + new_start.get()));
+            let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.start_address().get() + new_start.get()));
             if self.owned {
                 let result = active_table.map(new_page, EntryFlags::PRESENT | EntryFlags::WRITABLE | EntryFlags::NO_EXECUTE);
                 flush_all.consume(result);
@@ -427,7 +427,7 @@ impl Grant {
 
         if self.owned {
             unsafe {
-                intrinsics::copy(self.region.start.get() as *const u8, new_start.get() as *mut u8, self.region.size);
+                intrinsics::copy(self.start_address().get() as *const u8, new_start.get() as *mut u8, self.size());
             }
 
             let mut flush_all = MapperFlushAll::new();
@@ -436,7 +436,7 @@ impl Grant {
                 //TODO: One function to do both?
                 let flags = active_table.translate_page_flags(page).expect("grant references unmapped memory");
 
-                let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.region.start.get() + new_start.get()));
+                let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.start_address().get() + new_start.get()));
                 let result = active_table.remap(new_page, flags);
                 flush_all.consume(result);
             }
@@ -447,7 +447,7 @@ impl Grant {
         Grant {
             region: Region {
                 start: new_start,
-                size: self.region.size,
+                size: self.size(),
             },
             flags: self.flags,
             mapped: true,
@@ -463,8 +463,8 @@ impl Grant {
 
         let mut flush_all = MapperFlushAll::new();
 
-        let start_page = Page::containing_address(self.region.start);
-        let end_page = Page::containing_address(VirtualAddress::new(self.region.start.get() + self.region.size - 1));
+        let start_page = Page::containing_address(self.start_address());
+        let end_page = Page::containing_address(self.final_address());
         for page in Page::range_inclusive(start_page, end_page) {
             //TODO: One function to do both?
             let flags = active_table.translate_page_flags(page).expect("grant references unmapped memory");
@@ -472,7 +472,7 @@ impl Grant {
             flush_all.consume(result);
 
             active_table.with(new_table, temporary_page, |mapper| {
-                let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.region.start.get() + new_start.get()));
+                let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.start_address().get() + new_start.get()));
                 let result = mapper.map_to(new_page, frame, flags);
                 // Ignore result due to mapping on inactive table
                 unsafe { result.ignore(); }
@@ -481,7 +481,9 @@ impl Grant {
 
         flush_all.flush(&mut active_table);
 
-        self.region.start = new_start;
+        unsafe {
+            self.region_mut().set_start_address(new_start);
+        }
     }
 
     pub fn flags(&self) -> EntryFlags {