diff --git a/x86_64/bootsector.asm b/x86_64/bootsector.asm
index f1b463ef56954ba9dbb643fb7c9e437fd56402a9..80e40e834f28e0db13a7c9e812b0a1e1c04bdb5a 100644
--- a/x86_64/bootsector.asm
+++ b/x86_64/bootsector.asm
@@ -27,11 +27,11 @@ boot: ; dl comes with disk
     call print_line
 
     mov bx, (startup_start - boot) / 512
-    call print_num
+    call print_hex
     call print_line
 
     mov bx, startup_start
-    call print_num
+    call print_hex
     call print_line
 
     mov eax, (startup_start - boot) / 512
@@ -130,28 +130,28 @@ print_dapack:
     call print_char
 
     mov bx, [DAPACK.addr + 2]
-    call print_num
+    call print_hex
 
     mov bx, [DAPACK.addr]
-    call print_num
+    call print_hex
 
     mov al, '#'
     call print_char
 
     mov bx, [DAPACK.count]
-    call print_num
+    call print_hex
 
     mov al, ' '
     call print_char
 
     mov bx, [DAPACK.seg]
-    call print_num
+    call print_hex
 
     mov al, ':'
     call print_char
 
     mov bx, [DAPACK.buf]
-    call print_num
+    call print_hex
 
     ret
 
@@ -160,7 +160,7 @@ error:
 
     mov bh, 0
     mov bl, ah
-    call print_num
+    call print_hex
 
     mov al, ' '
     call print_char
@@ -173,7 +173,7 @@ error:
     hlt
     jmp .halt
 
-%include "print16.asm"
+%include "print.asm"
 
 name: db "Redox Loader - Stage One",0
 errored: db "Could not read disk",0
diff --git a/x86_64/print16.asm b/x86_64/print.asm
similarity index 89%
rename from x86_64/print16.asm
rename to x86_64/print.asm
index 06b9fb120cc69e426a333bc18b3558404416d54d..a2340d9133407cb902a3fe71150cab06b7ff5f55 100644
--- a/x86_64/print16.asm
+++ b/x86_64/print.asm
@@ -15,8 +15,9 @@ print_line:
 ; IN
 ;   si: points at zero-terminated String
 ; CLOBBER
-;   ax
+;   si, ax
 print:
+    pushf
     cld
 .loop:
     lodsb
@@ -25,24 +26,26 @@ print:
     call print_char
     jmp .loop
 .done:
+    popf
     ret
 
 ; print a character
 ; IN
 ;   al: character to print
-; CLOBBER
-;   ah
 print_char:
+    pusha
+    mov bx, 7
     mov ah, 0x0e
     int 0x10
+    popa
     ret
 
 ; print a number in hex
 ; IN
 ;   bx: the number
 ; CLOBBER
-;   cx, ax
-print_num:
+;   al, cx
+print_hex:
     mov cx, 4
 .lp:
     mov al, bh
diff --git a/x86_64/redoxfs.asm b/x86_64/redoxfs.asm
index b9a26da30ed8237b8fbd1f94ee5ce35613140f70..65ac2c53f1dbe82f222f5029057e9912c92f5f90 100644
--- a/x86_64/redoxfs.asm
+++ b/x86_64/redoxfs.asm
@@ -92,7 +92,31 @@ redoxfs.open:
         jl .ver
 
         lea si, [redoxfs.header + Header.signature]
-        call printrm
+        call print
+        mov al, ' '
+        call print_char
+
+        xor si, si
+    .uuid:
+        cmp si, 4
+        je .dash
+        cmp si, 6
+        je .dash
+        cmp si, 8
+        je .dash
+        cmp si, 10
+        je .dash
+        jmp .no_dash
+    .dash:
+        mov al, '-'
+        call print_char
+    .no_dash:
+        mov bx, [redoxfs.header + Header.uuid + si]
+        rol bx, 8
+        call print_hex
+        add si, 2
+        cmp si, 16
+        jb .uuid
         call print_line
 
         xor ax, ax
@@ -104,20 +128,20 @@ redoxfs.open:
 
     .sig_err:
         mov si, .err_msg
-        call printrm
+        call print
 
         mov si, .sig_err_msg
-        call printrm
+        call print
 
         mov ax, 1
         ret
 
     .ver_err:
         mov si, .err_msg
-        call printrm
+        call print
 
         mov si, .ver_err_msg
-        call printrm
+        call print
 
         mov ax, 1
         ret
@@ -128,7 +152,7 @@ redoxfs.open:
 
 redoxfs.root:
         lea si, [redoxfs.dir + Node.name]
-        call printrm
+        call print
         call print_line
 
     .lp:
@@ -197,10 +221,10 @@ redoxfs.root:
 
     .no_kernel:
         mov si, .no_kernel_msg
-        call printrm
+        call print
 
         mov si, .kernel_name
-        call printrm
+        call print
 
         call print_line
 
@@ -212,10 +236,10 @@ redoxfs.root:
 
 redoxfs.kernel:
         lea si, [redoxfs.file + Node.name]
-        call printrm
+        call print
         call print_line
 
-        mov edi, [kernel_base]
+        mov edi, [args.kernel_base]
     .lp:
         mov bx, 0
     .ext:
@@ -264,8 +288,8 @@ redoxfs.kernel:
         jmp .lp
 
     .done:
-        sub edi, [kernel_base]
-        mov [kernel_size], edi
+        sub edi, [args.kernel_base]
+        mov [args.kernel_size], edi
 
         xor eax, eax
         ret
diff --git a/x86_64/startup-common.asm b/x86_64/startup-common.asm
index 06641cd2500ed499cd02d1d6623f6fa4255adc01..4c3bace0903b3d236511eb4f2494cac4b725259c 100644
--- a/x86_64/startup-common.asm
+++ b/x86_64/startup-common.asm
@@ -1,8 +1,11 @@
 SECTION .text
 USE16
 
-kernel_base dq 0x100000
-kernel_size dq 0
+args:
+    .kernel_base dq 0x100000
+    .kernel_size dq 0
+    .stack_base dq 0
+    .stack_size dq 0
 
 startup:
     ; enable A20-Line via IO-Port 92, might not work on all motherboards
@@ -11,9 +14,9 @@ startup:
     out 0x92, al
 
     %ifdef KERNEL
-        mov edi, [kernel_base]
+        mov edi, [args.kernel_base]
         mov ecx, (kernel_file.end - kernel_file)
-        mov [kernel_size], ecx
+        mov [args.kernel_size], ecx
 
         mov eax, (kernel_file - boot)/512
         add ecx, 511
@@ -31,15 +34,15 @@ startup:
     call vesa
 
     mov si, init_fpu_msg
-    call printrm
+    call print
     call initialize.fpu
 
     mov si, init_sse_msg
-    call printrm
+    call print
     call initialize.sse
 
     mov si, startup_arch_msg
-    call printrm
+    call print
 
     jmp startup_arch
 
diff --git a/x86_64/startup-x86_64.asm b/x86_64/startup-x86_64.asm
index 17883cd20cfdf97d1fccd69f424bc689faaf0d7d..8909c431d0c7157ef874e12d10ed019e96f4b75f 100644
--- a/x86_64/startup-x86_64.asm
+++ b/x86_64/startup-x86_64.asm
@@ -122,23 +122,24 @@ long_mode:
     mov gs, rax
     mov ss, rax
 
-    ; kernel_base
-    mov rdi, [kernel_base]
-    ; kernel_size
-    mov rsi, [kernel_size]
     ; stack_base
     mov rdx, 0xFFFFFF0000080000
+    mov [args.stack_base], rdx
     ; stack_size
     mov rcx, 0x1F000
+    mov [args.stack_size], rcx
 
     ; set stack pointer
     mov rsp, rdx
     add rsp, rcx
     sub rsp, 256
 
+    ; set args
+    mov rdi, args
+
     ; entry point
-    mov rax, [rdi + 0x18]
-    jmp rax
+    mov rax, [args.kernel_base]
+    jmp [rax + 0x18]
 
 long_mode_ap:
     mov rax, gdt.kernel_data
@@ -148,13 +149,11 @@ long_mode_ap:
     mov gs, rax
     mov ss, rax
 
-    mov rdi, [trampoline.cpu_id]
-    mov rsi, [trampoline.page_table]
-    mov rdx, [trampoline.stack_start]
     mov rcx, [trampoline.stack_end]
-
     lea rsp, [rcx - 256]
 
+    mov rdi, trampoline.cpu_id
+
     mov rax, [trampoline.code]
     mov qword [trampoline.ready], 1
     jmp rax
diff --git a/x86_64/vesa.asm b/x86_64/vesa.asm
index 4fe03e8f4ebd304b35c5635b2795b92a1fe38a9e..367b2c210e7bb2b42b6c2fa3534440c0e08b77f6 100644
--- a/x86_64/vesa.asm
+++ b/x86_64/vesa.asm
@@ -69,26 +69,26 @@ vesa:
     jb .searchmodes
 .testgood:
     mov al, 13
-    call charrm
+    call print_char
     mov cx, [.currentmode]
     mov [.goodmode], cx
     push esi
-    ; call decshowrm
+    ; call print_dec
     ; mov al, ':'
-    ; call charrm
+    ; call print_char
     mov cx, [VBEModeInfo.xresolution]
-    call decshowrm
+    call print_dec
     mov al, 'x'
-    call charrm
+    call print_char
     mov cx, [VBEModeInfo.yresolution]
-    call decshowrm
+    call print_dec
     mov al, '@'
-    call charrm
+    call print_char
     xor ch, ch
     mov cl, [VBEModeInfo.bitsperpixel]
-    call decshowrm
+    call print_dec
     mov si, .modeok
-    call printrm
+    call print
     xor ax, ax
     int 0x16
     pop esi
@@ -128,7 +128,12 @@ vesa:
 .currentmode dw 0
 ;useful functions
 
-decshowrm:
+; print a number in decimal
+; IN
+;   cx: the number
+; CLOBBER
+;   al, cx, si
+print_dec:
     mov si, .number
 .clear:
     mov al, "0"
@@ -137,7 +142,7 @@ decshowrm:
     cmp si, .numberend
     jb .clear
     dec si
-    call convertrm
+    call convert_dec
     mov si, .number
 .lp:
     lodsb
@@ -147,13 +152,13 @@ decshowrm:
     jbe .lp
 .end:
     dec si
-    call printrm
+    call print
     ret
 
 .number times 7 db 0
 .numberend db 0
 
-convertrm:
+convert_dec:
     dec si
     mov bx, si        ;place to convert into must be in si, number to convert must be in cx
 .cnvrt:
@@ -191,19 +196,3 @@ convertrm:
     jmp .cnvrt
 .return:
     ret
-
-printrm:
-    mov al, [si]
-    test al, al
-    jz .return
-    call charrm
-    inc si
-    jmp printrm
-.return:
-    ret
-
-charrm:             ;char must be in al
-    mov bx, 7
-    mov ah, 0xE
-    int 10h
-    ret