diff --git a/x86_64/bootsector.asm b/x86_64/bootsector.asm
index 806ae49ddba962768dca5f0a3a6952f7c3ede94c..11ea087e2f5b2cb764c93fd269f97ef4894d1b1f 100644
--- a/x86_64/bootsector.asm
+++ b/x86_64/bootsector.asm
@@ -12,6 +12,14 @@ boot: ; dl comes with disk
     ; initialize stack
     mov sp, 0x7C00
 
+    ; initialize CS
+    push ax
+    push word .set_cs
+    retf
+
+.set_cs:
+
+    ; save disk number
     mov [disk], dl
 
     mov si, name
@@ -45,16 +53,16 @@ boot: ; dl comes with disk
 ; TODO rewrite to (eventually) move larger parts at once
 ; if that is done increase buffer_size_sectors in startup-common to that (max 0x80000 - startup_end)
 load:
-    cmp cx, 128
+    cmp cx, 127
     jbe .good_size
 
     pusha
-    mov cx, 128
+    mov cx, 127
     call load
     popa
-    add ax, 128
-    add dx, 128 * 512 / 16
-    sub cx, 128
+    add ax, 127
+    add dx, 127 * 512 / 16
+    sub cx, 127
 
     jmp load
 .good_size:
@@ -63,31 +71,7 @@ load:
     mov [DAPACK.count], cx
     mov [DAPACK.seg], dx
 
-        mov bx, [DAPACK.addr + 2]
-        call print_num
-
-        mov bx, [DAPACK.addr]
-        call print_num
-
-        mov al, '#'
-        call print_char
-
-        mov bx, [DAPACK.count]
-        call print_num
-
-        mov al, ' '
-        call print_char
-
-        mov bx, [DAPACK.seg]
-        call print_num
-
-        mov al, ':'
-        call print_char
-
-        mov bx, [DAPACK.buf]
-        call print_num
-
-        call print_line
+    call print_dapack
 
     mov dl, [disk]
     mov si, DAPACK
@@ -108,16 +92,16 @@ load:
   ; TODO rewrite to (eventually) move larger parts at once
   ; if that is done increase buffer_size_sectors in startup-common to that (max 0x80000 - startup_end)
   store:
-      cmp cx, 128
+      cmp cx, 127
       jbe .good_size
 
       pusha
-      mov cx, 128
+      mov cx, 127
       call store
       popa
-      add ax, 128
-      add dx, 128 * 512 / 16
-      sub cx, 128
+      add ax, 127
+      add dx, 127 * 512 / 16
+      sub cx, 127
 
       jmp store
   .good_size:
@@ -126,38 +110,41 @@ load:
       mov [DAPACK.count], cx
       mov [DAPACK.seg], dx
 
-          mov bx, [DAPACK.addr + 2]
-          call print_num
+      call print_dapack
+
+      mov dl, [disk]
+      mov si, DAPACK
+      mov ah, 0x43
+      int 0x13
+      jc error
+      ret
 
-          mov bx, [DAPACK.addr]
-          call print_num
+print_dapack:
+    mov bx, [DAPACK.addr + 2]
+    call print_num
 
-          mov al, '#'
-          call print_char
+    mov bx, [DAPACK.addr]
+    call print_num
 
-          mov bx, [DAPACK.count]
-          call print_num
+    mov al, '#'
+    call print_char
 
-          mov al, ' '
-          call print_char
+    mov bx, [DAPACK.count]
+    call print_num
 
-          mov bx, [DAPACK.seg]
-          call print_num
+    mov al, ' '
+    call print_char
 
-          mov al, ':'
-          call print_char
+    mov bx, [DAPACK.seg]
+    call print_num
 
-          mov bx, [DAPACK.buf]
-          call print_num
+    mov al, ':'
+    call print_char
 
-          call print_line
+    mov bx, [DAPACK.buf]
+    call print_num
 
-      mov dl, [disk]
-      mov si, DAPACK
-      mov ah, 0x43
-      int 0x13
-      jc error
-      ret
+    jmp print_line
 
 error:
     mov bh, 0
@@ -180,7 +167,6 @@ error:
 name: db "Redox Loader - Stage One",0
 errored: db "Could not read disk",0
 finished: db "Redox Loader - Stage Two",0
-line: db 13,10,0
 
 disk: db 0
 
diff --git a/x86_64/print16.asm b/x86_64/print16.asm
index 32dc69df8c534508a8b92e647f56ccc082dda73f..c4a04e123f6b6deae912324a544f5c8ea925fe02 100644
--- a/x86_64/print16.asm
+++ b/x86_64/print16.asm
@@ -4,7 +4,7 @@ USE16
 
 
 ; a newline
-newline: db 0xD, 0xA, 0
+newline: db 13,10,0
 
 ; print a string and a newline
 ; IN
@@ -13,8 +13,7 @@ newline: db 0xD, 0xA, 0
 ;   ax
 print_line:
     mov si, newline
-    call print
-    ret
+    jmp print
 
 ; print a string
 ; IN
@@ -22,11 +21,13 @@ print_line:
 ; CLOBBER
 ;   ax
 print:
+    cld
+.loop:
     lodsb
     test al, al
     jz .done
     call print_char
-    jmp print
+    jmp .loop
 .done:
     ret
 
diff --git a/x86_64/startup-common.asm b/x86_64/startup-common.asm
index 70b9f961119630bbf9776a25dbb82f3fc4ba0985..4bb9df74727a305508732f791047dc6461e25f6e 100644
--- a/x86_64/startup-common.asm
+++ b/x86_64/startup-common.asm
@@ -14,7 +14,7 @@ startup:
 ; buffersize in multiple of sectors (512 Bytes)
 ; min 1
 ; max (0x70000 - startup_end) / 512
-buffer_size_sectors equ 128
+buffer_size_sectors equ 127
 ; buffer size in Bytes
 buffer_size_bytes equ buffer_size_sectors * 512