diff --git a/src/system/kernel/vm/vm_page.c b/src/system/kernel/vm/vm_page.c
index a17debe301..bd5654cc44 100644
--- a/src/system/kernel/vm/vm_page.c
+++ b/src/system/kernel/vm/vm_page.c
@@ -364,14 +364,16 @@ vm_page_init(kernel_args *ka)
 
 	// calculate the size of memory by looking at the physical_memory_range array
 	{
-		unsigned int last_phys_page = 0;
+		unsigned int physicalPagesEnd = 0;
 
 		physical_page_offset = ka->physical_memory_range[0].start / B_PAGE_SIZE;
 		for (i = 0; i<ka->num_physical_memory_ranges; i++) {
-			last_phys_page = (ka->physical_memory_range[i].start + ka->physical_memory_range[i].size) / B_PAGE_SIZE - 1;
+			physicalPagesEnd = (ka->physical_memory_range[i].start
+				+ ka->physical_memory_range[i].size) / B_PAGE_SIZE;
 		}
-		TRACE(("first phys page = 0x%lx, last 0x%x\n", physical_page_offset, last_phys_page));
-		num_pages = last_phys_page - physical_page_offset;
+		TRACE(("first phys page = 0x%lx, end 0x%x\n", physical_page_offset,
+			physicalPagesEnd));
+		num_pages = physicalPagesEnd - physical_page_offset;
 	}
 
 	// map in the new free page table
@@ -382,7 +384,7 @@ vm_page_init(kernel_args *ka)
 		all_pages, num_pages, (unsigned int)(num_pages * sizeof(vm_page))));
 
 	// initialize the free page table
-	for (i = 0; i < num_pages - 1; i++) {
+	for (i = 0; i < num_pages; i++) {
 		all_pages[i].physical_page_number = physical_page_offset + i;
 		all_pages[i].type = PAGE_TYPE_PHYSICAL;
 		all_pages[i].state = PAGE_STATE_FREE;
@@ -540,7 +542,7 @@ vm_mark_page_range_inuse(addr_t start_page, addr_t length)
 		return B_BAD_VALUE;
 	}
 	start_page -= physical_page_offset;
-	if (start_page + length >= num_pages) {
+	if (start_page + length > num_pages) {
 		dprintf("vm_mark_page_range_inuse: range would extend past free list\n");
 		return B_BAD_VALUE;
 	}
@@ -726,7 +728,7 @@ vm_page_allocate_page_run(int page_state, addr_t len)
 
 	for (;;) {
 		bool foundit = true;
-		if (start + len >= num_pages)
+		if (start + len > num_pages)
 			break;
 
 		for (i = 0; i < len; i++) {
@@ -745,10 +747,6 @@ vm_page_allocate_page_run(int page_state, addr_t len)
 			break;
 		} else {
 			start += i;
-			if (start >= num_pages) {
-				// no more pages to look through
-				break;
-			}
 		}
 	}
 	release_spinlock(&page_lock);
@@ -1035,12 +1033,14 @@ vm_alloc_virtual_from_kernel_args(kernel_args *ka, size_t size)
 	size = PAGE_ALIGN(size);
 	// find a slot in the virtual allocation addr range
 	for (i = 1; i < ka->num_virtual_allocated_ranges; i++) {
+		addr_t previousRangeEnd = ka->virtual_allocated_range[i-1].start
+			+ ka->virtual_allocated_range[i-1].size;
 		last_valloc_entry = i;
 		// check to see if the space between this one and the last is big enough
-		if (ka->virtual_allocated_range[i].start 
-			- (ka->virtual_allocated_range[i-1].start 
-				+ ka->virtual_allocated_range[i-1].size) >= size) {
-			spot = ka->virtual_allocated_range[i-1].start + ka->virtual_allocated_range[i-1].size;
+		if (previousRangeEnd >= KERNEL_BASE
+			&& ka->virtual_allocated_range[i].start
+				- previousRangeEnd >= size) {
+			spot = previousRangeEnd;
 			ka->virtual_allocated_range[i-1].size += size;
 			goto out;
 		}
@@ -1095,9 +1095,11 @@ vm_alloc_physical_page_from_kernel_args(kernel_args *ka)
 	for (i = 0; i < ka->num_physical_allocated_ranges; i++) {
 		addr_t next_page;
 
-		next_page = ka->physical_allocated_range[i].start + ka->physical_allocated_range[i].size;
+		next_page = ka->physical_allocated_range[i].start
+			+ ka->physical_allocated_range[i].size;
 		// see if the page after the next allocated paddr run can be allocated
-		if (i + 1 < ka->num_physical_allocated_ranges && ka->physical_allocated_range[i+1].size != 0) {
+		if (i + 1 < ka->num_physical_allocated_ranges
+			&& ka->physical_allocated_range[i+1].size != 0) {
 			// see if the next page will collide with the next allocated range
 			if (next_page >= ka->physical_allocated_range[i+1].start)
 				continue;
@@ -1106,7 +1108,7 @@ vm_alloc_physical_page_from_kernel_args(kernel_args *ka)
 		if (is_page_in_phys_range(ka, next_page)) {
 			// we got one!
 			ka->physical_allocated_range[i].size += B_PAGE_SIZE;
-			return ((ka->physical_allocated_range[i].start + ka->physical_allocated_range[i].size - B_PAGE_SIZE) / B_PAGE_SIZE);
+			return (next_page / B_PAGE_SIZE);
 		}
 	}