Index: kernel/genarch/src/mm/as_pt.c
===================================================================
--- kernel/genarch/src/mm/as_pt.c	(revision 7f043c0d4fa344ed23d99c9baa9f11cdac734176)
+++ kernel/genarch/src/mm/as_pt.c	(revision 4680ef5eeda9925a3978a4a02f31a915dbdabe5f)
@@ -98,9 +98,11 @@
 	pte_t *src_ptl0, *dst_ptl0;
 	ipl_t ipl;
+	int table_size;
 
-	dst_ptl0 = (pte_t *) frame_alloc(ONE_FRAME, FRAME_KA);
+	dst_ptl0 = (pte_t *) frame_alloc(PTL0_SIZE, FRAME_KA);
+	table_size = FRAME_SIZE << PTL0_SIZE;
 
 	if (flags & FLAG_AS_KERNEL) {
-		memsetb((uintptr_t) dst_ptl0, PAGE_SIZE, 0);
+		memsetb((uintptr_t) dst_ptl0, table_size, 0);
 	} else {
 		uintptr_t src, dst;
@@ -117,6 +119,6 @@
 		dst = (uintptr_t) &dst_ptl0[PTL0_INDEX(KERNEL_ADDRESS_SPACE_START)];
 
-		memsetb((uintptr_t) dst_ptl0, PAGE_SIZE, 0);
-		memcpy((void *) dst, (void *) src, PAGE_SIZE - (src - (uintptr_t) src_ptl0));
+		memsetb((uintptr_t) dst_ptl0, table_size, 0);
+		memcpy((void *) dst, (void *) src, table_size - (src - (uintptr_t) src_ptl0));
 		mutex_unlock(&AS_KERNEL->lock);
 		interrupts_restore(ipl);
Index: kernel/genarch/src/mm/page_pt.c
===================================================================
--- kernel/genarch/src/mm/page_pt.c	(revision 7f043c0d4fa344ed23d99c9baa9f11cdac734176)
+++ kernel/genarch/src/mm/page_pt.c	(revision 4680ef5eeda9925a3978a4a02f31a915dbdabe5f)
@@ -76,6 +76,6 @@
 
 	if (GET_PTL1_FLAGS(ptl0, PTL0_INDEX(page)) & PAGE_NOT_PRESENT) {
-		newpt = (pte_t *)frame_alloc(ONE_FRAME, FRAME_KA);
-		memsetb((uintptr_t)newpt, PAGE_SIZE, 0);
+		newpt = (pte_t *)frame_alloc(PTL1_SIZE, FRAME_KA);
+		memsetb((uintptr_t)newpt, FRAME_SIZE << PTL1_SIZE, 0);
 		SET_PTL1_ADDRESS(ptl0, PTL0_INDEX(page), KA2PA(newpt));
 		SET_PTL1_FLAGS(ptl0, PTL0_INDEX(page), PAGE_PRESENT | PAGE_USER | PAGE_EXEC | PAGE_CACHEABLE | PAGE_WRITE);
@@ -85,6 +85,6 @@
 
 	if (GET_PTL2_FLAGS(ptl1, PTL1_INDEX(page)) & PAGE_NOT_PRESENT) {
-		newpt = (pte_t *)frame_alloc(ONE_FRAME, FRAME_KA);
-		memsetb((uintptr_t)newpt, PAGE_SIZE, 0);
+		newpt = (pte_t *)frame_alloc(PTL2_SIZE, FRAME_KA);
+		memsetb((uintptr_t)newpt, FRAME_SIZE << PTL2_SIZE, 0);
 		SET_PTL2_ADDRESS(ptl1, PTL1_INDEX(page), KA2PA(newpt));
 		SET_PTL2_FLAGS(ptl1, PTL1_INDEX(page), PAGE_PRESENT | PAGE_USER | PAGE_EXEC | PAGE_CACHEABLE | PAGE_WRITE);
@@ -94,6 +94,6 @@
 
 	if (GET_PTL3_FLAGS(ptl2, PTL2_INDEX(page)) & PAGE_NOT_PRESENT) {
-		newpt = (pte_t *)frame_alloc(ONE_FRAME, FRAME_KA);
-		memsetb((uintptr_t)newpt, PAGE_SIZE, 0);
+		newpt = (pte_t *)frame_alloc(PTL3_SIZE, FRAME_KA);
+		memsetb((uintptr_t)newpt, FRAME_SIZE << PTL3_SIZE, 0);
 		SET_PTL3_ADDRESS(ptl2, PTL2_INDEX(page), KA2PA(newpt));
 		SET_PTL3_FLAGS(ptl2, PTL2_INDEX(page), PAGE_PRESENT | PAGE_USER | PAGE_EXEC | PAGE_CACHEABLE | PAGE_WRITE);
