diff --git a/NetBoot.py b/NetBoot.py
index 60faa34..5d46cbb 100755
--- a/NetBoot.py
+++ b/NetBoot.py
@@ -15,23 +15,6 @@ from snefru_hash import snefru
 
 
 
-# ; the below code might come in handy later on, when we support executable boot blocks.
-# CodeToUncorruptTheBootBlocks:
-#     move.l  (SP),A1
-#     sub.l   #8,A1                   ; What will be the start address of the boot blocks??
-
-#     lea     BigDiskImage,A0
-#     move.l  #1024,D0
-#     dc.w    0xA02E                  ; BlockMove
-
-#     sub.l   #6,(SP)                 ; Re-run the code that called us; it will be real boot blocks now!
-#     rts
-
-
-
-
-
-
 my_unique_ltoudp_id = b'El' + (os.getpid() & 0xFFFF).to_bytes(2, 'big')
 
 
@@ -95,8 +78,41 @@ getBootBlocks
 
             dc.w    $A22E                   ; _BlockMoveData
 
+; If these boot blocks are executable (from offset 2), then the 138 bytes of
+; declarative data copied by the netBOOT driver are not enough. We edit the boot
+; blocks with a stub that copies the entire 1k into place. System 7 needs this.
+
+            move.b  6(A1),D0                ; BBVersion
+            cmp.b   #$44,D0
+            beq.s   executableBB
+            and.b   #$C0,D0
+            cmp.b   #$C0,D0
+            beq.s   executableBB
+
             bra     return
 
+executableBB                                ; Need to leave bytes 6,7 intact
+            move.l  #$60000004,2(A1)        ; BB+2: BRA.W BB+8
+            move.w  #$4EB9,8(A1)            ; BB+8: JSR fixBB
+            lea     fixBB,A0
+            move.l  A0,10(A1)
+
+            move.l  A1,A0                   ; Clear the icache with a BlockMove
+            move.l  #138,D0
+            dc.w    $A02E                   ; _BlockMove
+
+            bra     return
+
+fixBB                                       ; The BB stub JSRs to here
+            move.l  (SP)+,A1
+            sub.l   #14,A1                  ; "Rewind" to the start of the BB
+
+            lea     DiskImage,A0            ; Replace stub BB with correct BB
+            move.l  #$400,D0
+            dc.w    $A02E                   ; _BlockMove
+
+            jmp     2(A1)                   ; Jump to the fixed-up BB
+
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 getSysVol
@@ -225,7 +241,10 @@ mountSysVol
             lea     gDriveNum,A0
             move.w  (A0),D3
 
-    ; Set aside the FS queue to stop MountVol jamming up
+    ; System 7 needs MountVol to return the right vRefNum
+            move.l  $366,A0         ; Steal existing PB from FSQHead
+
+    ; Set aside the FS queue to stop MountVol deadlocking
             move.w  $360,-(SP)      ; FSBusy
             move.l  $362,-(SP)      ; FSQHead
             move.l  $366,-(SP)      ; FSQTail