Index: genarch/include/mm/page_ht.h
===================================================================
--- genarch/include/mm/page_ht.h	(revision d87c3f3d6ecce3cef508faa5142aa822aa7ad387)
+++ genarch/include/mm/page_ht.h	(revision f76fed4ce9ef078664208e11cf713b1e09aa3a72)
@@ -52,5 +52,9 @@
 	__address page;		/**< Virtual memory page. */
 	__address frame;	/**< Physical memory frame. */
-	int flags;
+	unsigned g : 1;		/**< Global page. */
+	unsigned x : 1;		/**< Execute. */
+	unsigned w : 1;		/**< Writable. */
+	unsigned k : 1;		/**< Kernel privileges required. */
+	unsigned c : 1;		/**< Cacheable. */
 	unsigned a : 1;		/**< Accessed. */
 	unsigned d : 1;		/**< Dirty. */
Index: genarch/src/mm/page_ht.c
===================================================================
--- genarch/src/mm/page_ht.c	(revision d87c3f3d6ecce3cef508faa5142aa822aa7ad387)
+++ genarch/src/mm/page_ht.c	(revision f76fed4ce9ef078664208e11cf713b1e09aa3a72)
@@ -172,5 +172,16 @@
 		t = (pte_t *) malloc(sizeof(pte_t), FRAME_ATOMIC);
 		ASSERT(t != NULL);
-	
+
+		t->g = (flags & PAGE_GLOBAL) != 0;
+		t->x = (flags & PAGE_EXEC) != 0;
+		t->w = (flags & PAGE_WRITE) != 0;
+		t->k = !(flags & PAGE_USER);
+		t->c = (flags & PAGE_CACHEABLE) != 0;
+		t->p = !(flags & PAGE_NOT_PRESENT);
+
+		t->as = as;
+		t->page = page;
+		t->frame = frame;
+
 		hash_table_insert(&page_ht, key, &t->link);
 	}
