diff --git a/x86_64/redoxfs.asm b/x86_64/redoxfs.asm
index 65ac2c53f1dbe82f222f5029057e9912c92f5f90..d32c725668d6eab1b92f59037927722035e35975 100644
--- a/x86_64/redoxfs.asm
+++ b/x86_64/redoxfs.asm
@@ -67,6 +67,13 @@ redoxfs:
     .file:
         times 512 db 0
 
+    .env:
+        db "REDOXFS_UUID="
+    .env.uuid:
+        db "00000000-0000-0000-0000-000000000000"
+    .env.end:
+        db 0
+
 redoxfs.open:
         mov eax, 0
         mov bx, redoxfs.header
@@ -96,27 +103,49 @@ redoxfs.open:
         mov al, ' '
         call print_char
 
+        mov di, redoxfs.env.uuid
         xor si, si
     .uuid:
         cmp si, 4
-        je .dash
+        je .uuid.dash
         cmp si, 6
-        je .dash
+        je .uuid.dash
         cmp si, 8
-        je .dash
+        je .uuid.dash
         cmp si, 10
-        je .dash
-        jmp .no_dash
-    .dash:
+        je .uuid.dash
+        jmp .uuid.no_dash
+    .uuid.dash:
         mov al, '-'
-        call print_char
-    .no_dash:
+        mov [di], al
+        inc di
+    .uuid.no_dash:
         mov bx, [redoxfs.header + Header.uuid + si]
         rol bx, 8
-        call print_hex
+
+        mov cx, 4
+    .uuid.char:
+        mov al, bh
+        shr al, 4
+
+        cmp al, 0xA
+        jb .uuid.below_0xA
+
+        add al, 'a' - 0xA - '0'
+    .uuid.below_0xA:
+        add al, '0'
+
+        mov [di], al
+        inc di
+
+        shl bx, 4
+        loop .uuid.char
+
         add si, 2
         cmp si, 16
         jb .uuid
+
+        call print
         call print_line
 
         xor ax, ax
diff --git a/x86_64/startup-common.asm b/x86_64/startup-common.asm
index 4c3bace0903b3d236511eb4f2494cac4b725259c..8aea484bcfb6b9dacf35cefcf9b740820d7995f8 100644
--- a/x86_64/startup-common.asm
+++ b/x86_64/startup-common.asm
@@ -6,6 +6,8 @@ args:
     .kernel_size dq 0
     .stack_base dq 0
     .stack_size dq 0
+    .env_base dq 0
+    .env_size dq 0
 
 startup:
     ; enable A20-Line via IO-Port 92, might not work on all motherboards
diff --git a/x86_64/startup-x86_64.asm b/x86_64/startup-x86_64.asm
index 8909c431d0c7157ef874e12d10ed019e96f4b75f..1c18163e176921f682b1e5e3e0a0040c9bacb09f 100644
--- a/x86_64/startup-x86_64.asm
+++ b/x86_64/startup-x86_64.asm
@@ -123,23 +123,48 @@ long_mode:
     mov ss, rax
 
     ; stack_base
-    mov rdx, 0xFFFFFF0000080000
-    mov [args.stack_base], rdx
+    mov rsi, 0xFFFFFF0000080000
+    mov [args.stack_base], rsi
     ; stack_size
     mov rcx, 0x1F000
     mov [args.stack_size], rcx
 
     ; set stack pointer
-    mov rsp, rdx
+    mov rsp, rsi
     add rsp, rcx
-    sub rsp, 256
+
+    ; copy env to stack
+%ifdef KERNEL
+    mov rsi, 0
+    mov rcx, 0
+%else
+    mov rsi, redoxfs.env
+    mov rcx, redoxfs.env.end - redoxfs.env
+%endif
+    mov [args.env_size], rcx
+    cmp rcx, 0
+    je .no_env
+.copy_env:
+    mov al, [rsi + rcx]
+    dec rsp
+    mov [rsp], al
+    loop .copy_env
+.no_env
+    mov [args.env_base], rsp
+
+    ; align stack
+    and rsp, 0xFFFFFFFFFFFFFFF0
 
     ; set args
     mov rdi, args
 
     ; entry point
     mov rax, [args.kernel_base]
-    jmp [rax + 0x18]
+    call [rax + 0x18]
+.halt:
+    cli
+    hlt
+    jmp .halt
 
 long_mode_ap:
     mov rax, gdt.kernel_data