Index: kernel/arch/amd64/src/boot/boot.S
===================================================================
--- kernel/arch/amd64/src/boot/boot.S	(revision ac88c93e54a03010f4e42edfccfda35af3482f3e)
+++ kernel/arch/amd64/src/boot/boot.S	(revision e5dbbe53ed99eb1b5d72f9e95e0c690994a56ffb)
@@ -441,4 +441,6 @@
 	movw %cx, %fs
 	movw %cx, %gs
+	
+	movl $START_STACK, %esp			# initialize stack pointer
 	
 	jmpl $gdtselector(KTEXT32_DES), $vesa_meeting_point
Index: kernel/arch/amd64/src/mm/page.c
===================================================================
--- kernel/arch/amd64/src/mm/page.c	(revision ac88c93e54a03010f4e42edfccfda35af3482f3e)
+++ kernel/arch/amd64/src/mm/page.c	(revision e5dbbe53ed99eb1b5d72f9e95e0c690994a56ffb)
@@ -84,5 +84,5 @@
 	uintptr_t cur;
 	int i;
-	int identity_flags = PAGE_CACHEABLE | PAGE_EXEC | PAGE_GLOBAL;
+	int identity_flags = PAGE_CACHEABLE | PAGE_EXEC | PAGE_GLOBAL | PAGE_WRITE;
 
 	if (config.cpu_active == 1) {
@@ -113,8 +113,6 @@
 		exc_register(14, "page_fault", (iroutine) page_fault);
 		write_cr3((uintptr_t) AS_KERNEL->genarch.page_table);
-	}
-	else {
+	} else 
 		write_cr3((uintptr_t) AS_KERNEL->genarch.page_table);
-	}
 }
 
@@ -209,5 +207,5 @@
 	pfn_t i;
 	for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++)
-		page_mapping_insert(AS_KERNEL, virtaddr + PFN2ADDR(i), physaddr + PFN2ADDR(i), PAGE_NOT_CACHEABLE);
+		page_mapping_insert(AS_KERNEL, virtaddr + PFN2ADDR(i), physaddr + PFN2ADDR(i), PAGE_NOT_CACHEABLE | PAGE_WRITE);
 	
 	last_frame = ALIGN_UP(last_frame + size, FRAME_SIZE);
