diff --git a/stage23/lib/blib.c b/stage23/lib/blib.c
index b8811a35..12e2e276 100644
--- a/stage23/lib/blib.c
+++ b/stage23/lib/blib.c
@@ -129,14 +129,13 @@ bool efi_exit_boot_services(void) {
         EFI_MEMORY_DESCRIPTOR *entry = (void *)efi_mmap + i * efi_desc_size;
 
         uint64_t base = entry->PhysicalStart;
-        uint64_t length = entry->NumberOfPages * 4096;
 
         // Find for a match in the untouched memory map
         for (size_t j = 0; j < untouched_memmap_entries; j++) {
             if (untouched_memmap[j].type != MEMMAP_USABLE)
                 continue;
 
-            if (untouched_memmap[j].base == base && untouched_memmap[j].length == length) {
+            if (untouched_memmap[j].base == base) {
                 // It's a match!
                 entry->Type = EfiConventionalMemory;
                 break;
diff --git a/stage23/lib/print.s2.c b/stage23/lib/print.s2.c
index 8f83e83e..62d4036e 100644
--- a/stage23/lib/print.s2.c
+++ b/stage23/lib/print.s2.c
@@ -121,11 +121,11 @@ void vprint(const char *fmt, va_list args) {
         // Init com1
         outb(0x3F8 + 1, 0x00);
         outb(0x3F8 + 3, 0x80);
-        outb(0x3F8 + 0, 0x01);
+        outb(0x3F8 + 0, 0x0c); // 9600 baud
         outb(0x3F8 + 1, 0x00);
         outb(0x3F8 + 3, 0x03);
-        outb(0x3F8 + 2, 0xC7);
-        outb(0x3F8 + 4, 0x0B);
+        outb(0x3F8 + 2, 0xc7);
+        outb(0x3F8 + 4, 0x0b);
 
         com_initialised = true;
     }
@@ -191,8 +191,11 @@ out:
             outb(0xe9, print_buf[i]);
         }
         if (COM_OUTPUT) {
-            if (print_buf[i] == '\n')
+            if (print_buf[i] == '\n') {
+                while ((inb(0x3f8 + 5) & 0x20) == 0);
                 outb(0x3f8, '\r');
+            }
+            while ((inb(0x3f8 + 5) & 0x20) == 0);
             outb(0x3f8, print_buf[i]);
         }
     }
diff --git a/stage23/mm/pmm.s2.c b/stage23/mm/pmm.s2.c
index c9989cf3..cb74d057 100644
--- a/stage23/mm/pmm.s2.c
+++ b/stage23/mm/pmm.s2.c
@@ -376,33 +376,18 @@ void pmm_reclaim_uefi_mem(void) {
     }
 
     struct e820_entry_t recl;
-    size_t efi_mmap_recl_begin;
-    size_t efi_mmap_entry_count = efi_mmap_size / efi_desc_size;
 
     for (size_t i = 0; ; i++) {
-        if (memmap[i].type != MEMMAP_EFI_RECLAIMABLE)
-            continue;
-
-        recl = memmap[i];
-
-        // Go through EFI memmap and find an entry that starts at our base
-        for (efi_mmap_recl_begin = 0;
-             efi_mmap_recl_begin < efi_mmap_entry_count; efi_mmap_recl_begin++) {
-            EFI_MEMORY_DESCRIPTOR *entry =
-                (void *)efi_mmap + efi_mmap_recl_begin * efi_desc_size;
-
-            if (entry->PhysicalStart != memmap[i].base)
-                continue;
-
+        if (memmap[i].type == MEMMAP_EFI_RECLAIMABLE) {
+            recl = memmap[i];
             break;
         }
-
-        break;
     }
 
     // Punch holes in our EFI reclaimable entry for every EFI area which is
     // boot services or conventional that fits within
-    for (size_t i = efi_mmap_recl_begin; i < efi_mmap_entry_count; i++) {
+    size_t efi_mmap_entry_count = efi_mmap_size / efi_desc_size;
+    for (size_t i = 0; i < efi_mmap_entry_count; i++) {
         EFI_MEMORY_DESCRIPTOR *entry = (void *)efi_mmap + i * efi_desc_size;
 
         uintptr_t base = recl.base;
@@ -426,14 +411,13 @@ void pmm_reclaim_uefi_mem(void) {
             efi_top = top;
         }
 
+        // Sanity check
         if (!(efi_base >= base && efi_base <  top
            && efi_top  >  base && efi_top  <= top))
             continue;
 
         uint32_t our_type;
         switch (entry->Type) {
-            default:
-                our_type = MEMMAP_RESERVED; break;
             case EfiBootServicesCode:
             case EfiBootServicesData:
             case EfiConventionalMemory:
@@ -442,6 +426,8 @@ void pmm_reclaim_uefi_mem(void) {
                 our_type = MEMMAP_ACPI_RECLAIMABLE; break;
             case EfiACPIMemoryNVS:
                 our_type = MEMMAP_ACPI_NVS; break;
+            default:
+                our_type = MEMMAP_RESERVED; break;
         }
 
         memmap_alloc_range(efi_base, efi_size, our_type, false, true, false, true);
diff --git a/stage23/protos/linux.32.c b/stage23/protos/linux.32.c
index ca4269cd..c5a9daaf 100644
--- a/stage23/protos/linux.32.c
+++ b/stage23/protos/linux.32.c
@@ -33,8 +33,9 @@ __attribute__((noreturn)) void linux_spinup(void *entry, void *boot_params) {
         "pushl $0x10\n\t"
         "call 1f\n\t"
         "1:\n\t"
-        "addl $5, (%%esp)\n\t"
+        "addl $2f-1b, (%%esp)\n\t"
         "lret\n\t"
+        "2:\n\t"
 
         "movl $0x18, %%eax\n\t"
         "movl %%eax, %%ds\n\t"
diff --git a/stage23/protos/linux.c b/stage23/protos/linux.c
index d8dc1038..668fdf98 100644
--- a/stage23/protos/linux.c
+++ b/stage23/protos/linux.c
@@ -498,7 +498,8 @@ void linux_load(char *config, char *cmdline) {
     if (!fb_init(&fbinfo, req_width, req_height, req_bpp))
         panic("linux: Unable to set video mode");
 
-    screen_info->capabilities   = VIDEO_CAPABILITY_64BIT_BASE;
+    screen_info->capabilities   = VIDEO_CAPABILITY_64BIT_BASE | VIDEO_CAPABILITY_SKIP_QUIRKS;
+    screen_info->flags          = VIDEO_FLAGS_NOCURSOR;
     screen_info->lfb_base       = (uint32_t)fbinfo.framebuffer_addr;
     screen_info->ext_lfb_base   = (uint32_t)(fbinfo.framebuffer_addr >> 32);
     screen_info->lfb_size       = fbinfo.framebuffer_pitch * fbinfo.framebuffer_height;
@@ -537,15 +538,11 @@ void linux_load(char *config, char *cmdline) {
 #if uefi == 1
     efi_exit_boot_services();
 
-    {
-        const char *efi_signature;
-        #if defined (__i386__)
-            efi_signature = "EL32";
-        #elif defined (__x86_64__)
-            efi_signature = "EL64";
-        #endif
-        memcpy(&boot_params->efi_info.efi_loader_signature, efi_signature, 4);
-    }
+    #if defined (__i386__)
+        memcpy(&boot_params->efi_info.efi_loader_signature, "EL32", 4);
+    #elif defined (__x86_64__)
+        memcpy(&boot_params->efi_info.efi_loader_signature, "EL64", 4);
+    #endif
 
     boot_params->efi_info.efi_systab    = (uint32_t)(uint64_t)(uintptr_t)gST;
     boot_params->efi_info.efi_systab_hi = (uint32_t)((uint64_t)(uintptr_t)gST >> 32);
diff --git a/stage23/protos/multiboot1.32.c b/stage23/protos/multiboot1.32.c
index c67337a6..45d81ce8 100644
--- a/stage23/protos/multiboot1.32.c
+++ b/stage23/protos/multiboot1.32.c
@@ -8,13 +8,12 @@ __attribute__((noreturn)) void multiboot1_spinup_32(
     asm volatile (
         "cld\n\t"
 
-        "pushfl\n\t"
         "pushl $0x18\n\t"
         "pushl %%edi\n\t"
 
         "movl $0x2BADB002, %%eax\n\t"
 
-        "iretl\n\t"
+        "lret\n\t"
         :
         : "D" (entry_point),
           "b" (multiboot1_info)