diff --git a/src/scheme/memory.rs b/src/scheme/memory.rs
index b837f56bd50304fb4ddab16b079bbeabb4a9edb6..f9f7496fc47f90c773cfdbd6596334a77eb4c37c 100644
--- a/src/scheme/memory.rs
+++ b/src/scheme/memory.rs
@@ -5,7 +5,7 @@ use crate::paging::VirtualAddress;
 use crate::paging::entry::EntryFlags;
 use crate::syscall::data::{Map, StatVfs};
 use crate::syscall::error::*;
-use crate::syscall::flag::{ProtFlags, PROT_EXEC, PROT_READ, PROT_WRITE};
+use crate::syscall::flag::{PROT_EXEC, PROT_READ, PROT_WRITE};
 use crate::syscall::scheme::Scheme;
 
 pub struct MemoryScheme;
@@ -47,13 +47,13 @@ impl Scheme for MemoryScheme {
             let mut to_address = crate::USER_GRANT_OFFSET;
 
             let mut entry_flags = EntryFlags::PRESENT | EntryFlags::USER_ACCESSIBLE;
-            if map.flags & PROT_EXEC == ProtFlags::empty() {
+            if !map.flags.contains(PROT_EXEC) {
                 entry_flags |= EntryFlags::NO_EXECUTE;
             }
-            if map.flags & PROT_READ != ProtFlags::empty() {
+            if map.flags.contains(PROT_READ) {
                 //TODO: PROT_READ
             }
-            if map.flags & PROT_WRITE != ProtFlags::empty() {
+            if map.flags.contains(PROT_WRITE) {
                 entry_flags |= EntryFlags::WRITABLE;
             }
 
diff --git a/src/scheme/user.rs b/src/scheme/user.rs
index 547c123db8732af0eae479213fc939e42c4dea72..91f2d6fcffee63c876e9fe71d6ef1594ac337f1e 100644
--- a/src/scheme/user.rs
+++ b/src/scheme/user.rs
@@ -16,7 +16,7 @@ use crate::scheme::{AtomicSchemeId, ATOMIC_SCHEMEID_INIT, SchemeId};
 use crate::sync::{WaitQueue, WaitMap};
 use crate::syscall::data::{Map, Packet, Stat, StatVfs, TimeSpec};
 use crate::syscall::error::*;
-use crate::syscall::flag::{EventFlags, EVENT_READ, O_NONBLOCK, ProtFlags, PROT_EXEC, PROT_READ, PROT_WRITE};
+use crate::syscall::flag::{EventFlags, EVENT_READ, O_NONBLOCK, MapFlags, PROT_EXEC, PROT_READ, PROT_WRITE};
 use crate::syscall::number::*;
 use crate::syscall::scheme::Scheme;
 
@@ -108,7 +108,7 @@ impl UserInner {
         UserInner::capture_inner(&self.context, buf.as_mut_ptr() as usize, buf.len(), PROT_WRITE, None)
     }
 
-    fn capture_inner(context_weak: &Weak<RwLock<Context>>, address: usize, size: usize, flags: ProtFlags, desc_opt: Option<FileDescriptor>) -> Result<usize> {
+    fn capture_inner(context_weak: &Weak<RwLock<Context>>, address: usize, size: usize, flags: MapFlags, desc_opt: Option<FileDescriptor>) -> Result<usize> {
         //TODO: Abstract with other grant creation
         if size == 0 {
             Ok(0)
diff --git a/src/syscall/debug.rs b/src/syscall/debug.rs
index 3596efbbf4a0638d3dfa98861d0321fcaf2d70b3..270453ce15d67542d799588639517eb4773643c1 100644
--- a/src/syscall/debug.rs
+++ b/src/syscall/debug.rs
@@ -259,7 +259,7 @@ pub fn format_call(a: usize, b: usize, c: usize, d: usize, e: usize, f: usize) -
             "mprotect({:#X}, {}, {:?})",
             b,
             c,
-            ProtFlags::from_bits(d)
+            MapFlags::from_bits(d)
         ),
         SYS_NANOSLEEP => format!(
             "nanosleep({:?}, ({}, {}))",
diff --git a/src/syscall/mod.rs b/src/syscall/mod.rs
index 50cacdcb628139151929ed89686a7abc25fe6ba1..de4014a0bccf6130ec6725ffd567d77b8506fe2e 100644
--- a/src/syscall/mod.rs
+++ b/src/syscall/mod.rs
@@ -16,7 +16,7 @@ pub use self::validate::*;
 
 use self::data::{SigAction, TimeSpec};
 use self::error::{Error, Result, ENOSYS};
-use self::flag::{CloneFlags, PhysmapFlags, ProtFlags, WaitFlags};
+use self::flag::{CloneFlags, MapFlags, PhysmapFlags, WaitFlags};
 use self::number::*;
 
 use crate::context::ContextId;
@@ -116,7 +116,7 @@ pub fn syscall(a: usize, b: usize, c: usize, d: usize, e: usize, f: usize, bp: u
                 SYS_GETGID => getgid(),
                 SYS_GETNS => getns(),
                 SYS_GETUID => getuid(),
-                SYS_MPROTECT => mprotect(b, c, ProtFlags::from_bits_truncate(d)),
+                SYS_MPROTECT => mprotect(b, c, MapFlags::from_bits_truncate(d)),
                 SYS_MKNS => mkns(validate_slice(b as *const [usize; 2], c)?),
                 SYS_SETPGID => setpgid(ContextId::from(b), ContextId::from(c)),
                 SYS_SETREUID => setreuid(b as u32, c as u32),
diff --git a/src/syscall/process.rs b/src/syscall/process.rs
index 4f80b77511bd2a99b24603c7d3b042d48fa973fd..646db9a1a1300cbed5966aea78abdb3fc3c36cf4 100644
--- a/src/syscall/process.rs
+++ b/src/syscall/process.rs
@@ -24,7 +24,7 @@ use crate::start::usermode;
 use crate::syscall::data::{PtraceEvent, SigAction, Stat};
 use crate::syscall::error::*;
 use crate::syscall::flag::{CloneFlags, CLONE_VFORK, CLONE_VM, CLONE_FS, CLONE_FILES, CLONE_SIGHAND,
-                           CLONE_STACK, ProtFlags, PROT_EXEC, PROT_READ, PROT_WRITE, PTRACE_EVENT_CLONE,
+                           CLONE_STACK, MapFlags, PROT_EXEC, PROT_READ, PROT_WRITE, PTRACE_EVENT_CLONE,
                            SigActionFlags, SIG_DFL, SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK, SIGCONT, SIGTERM,
                            WaitFlags, WCONTINUED, WNOHANG, WUNTRACED, wifcontinued, wifstopped};
 use crate::syscall::ptrace_event;
@@ -1290,7 +1290,7 @@ pub fn kill(pid: ContextId, sig: usize) -> Result<usize> {
     }
 }
 
-pub fn mprotect(address: usize, size: usize, flags: ProtFlags) -> Result<usize> {
+pub fn mprotect(address: usize, size: usize, flags: MapFlags) -> Result<usize> {
     println!("mprotect {:#X}, {}, {:#X}", address, size, flags);
 
     let end_offset = size.checked_sub(1).ok_or(Error::new(EFAULT))?;
diff --git a/syscall b/syscall
index 9a7bd554d57f78214b70f9f0fb0b961e20a6dff7..51f0ef2826ef2b0369766c8f23c8069ae0a56846 160000
--- a/syscall
+++ b/syscall
@@ -1 +1 @@
-Subproject commit 9a7bd554d57f78214b70f9f0fb0b961e20a6dff7
+Subproject commit 51f0ef2826ef2b0369766c8f23c8069ae0a56846