diff --git a/VersionASM b/VersionASM
index cc5bcc4372dc59c8f6bfeca1b881fb946d48a5c9..c9f2267738b642c4addb8980135cb255c753b727 100644
--- a/VersionASM
+++ b/VersionASM
@@ -13,11 +13,11 @@
                         GBLS    Module_ComponentPath
 Module_MajorVersion     SETS    "5.35"
 Module_Version          SETA    535
-Module_MinorVersion     SETS    "4.79.2.98.2.23"
-Module_Date             SETS    "20 Feb 2010"
-Module_ApplicationDate  SETS    "20-Feb-10"
+Module_MinorVersion     SETS    "4.79.2.98.2.24"
+Module_Date             SETS    "28 Feb 2010"
+Module_ApplicationDate  SETS    "28-Feb-10"
 Module_ComponentName    SETS    "Kernel"
 Module_ComponentPath    SETS    "castle/RiscOS/Sources/Kernel"
-Module_FullVersion      SETS    "5.35 (4.79.2.98.2.23)"
-Module_HelpVersion      SETS    "5.35 (20 Feb 2010) 4.79.2.98.2.23"
+Module_FullVersion      SETS    "5.35 (4.79.2.98.2.24)"
+Module_HelpVersion      SETS    "5.35 (28 Feb 2010) 4.79.2.98.2.24"
                         END
diff --git a/VersionNum b/VersionNum
index 7925c65c648e049f92faa40bbdabf71c626005ab..8bce507ca5d97e37f2b01ffc842faf43e3656ee0 100644
--- a/VersionNum
+++ b/VersionNum
@@ -5,19 +5,19 @@
  *
  */
 #define Module_MajorVersion_CMHG        5.35
-#define Module_MinorVersion_CMHG        4.79.2.98.2.23
-#define Module_Date_CMHG                20 Feb 2010
+#define Module_MinorVersion_CMHG        4.79.2.98.2.24
+#define Module_Date_CMHG                28 Feb 2010
 
 #define Module_MajorVersion             "5.35"
 #define Module_Version                  535
-#define Module_MinorVersion             "4.79.2.98.2.23"
-#define Module_Date                     "20 Feb 2010"
+#define Module_MinorVersion             "4.79.2.98.2.24"
+#define Module_Date                     "28 Feb 2010"
 
-#define Module_ApplicationDate          "20-Feb-10"
+#define Module_ApplicationDate          "28-Feb-10"
 
 #define Module_ComponentName            "Kernel"
 #define Module_ComponentPath            "castle/RiscOS/Sources/Kernel"
 
-#define Module_FullVersion              "5.35 (4.79.2.98.2.23)"
-#define Module_HelpVersion              "5.35 (20 Feb 2010) 4.79.2.98.2.23"
+#define Module_FullVersion              "5.35 (4.79.2.98.2.24)"
+#define Module_HelpVersion              "5.35 (28 Feb 2010) 4.79.2.98.2.24"
 #define Module_LibraryVersionInfo       "5:35"
diff --git a/hdr/VideoDevice b/hdr/VideoDevice
index e0b0197897d6109c05e2d51961a488ded6430b98..f055bce4571bec99b6dc9e7be9d4b2f936fb52b4 100644
--- a/hdr/VideoDevice
+++ b/hdr/VideoDevice
@@ -26,12 +26,10 @@ Included_Hdr_VideoDevice SETL {TRUE}
 
 ; Device for VDU video devices
 
-                                ^       0
-                                #       HALDeviceSize
-HALDevice_VDUAddress2           #       4
-HALDevice_VDUDevice2            #       4
-HALDevice_VDUDeviceSpecificField #      4
-HALDevice_VDU_Size              *       :INDEX: @
+                                 ^       0
+                                 #       HALDeviceSize
+HALDevice_VDUDeviceSpecificField #       4
+HALDevice_VDU_Size               *       :INDEX: @
 
  ]
 
diff --git a/s/VMSAv6 b/s/VMSAv6
index dfffc458a2f60290d5f6fc16ab4ce392a0f6854c..42d17f3eee7bb7af561cbc5b606e0fc111d77739 100644
--- a/s/VMSAv6
+++ b/s/VMSAv6
@@ -552,15 +552,30 @@ DAbPreVeneer    ROUT
 
         SUB     r11, r2, #8*4                   ; r11 -> register bank
         STR     r4, [sp, #7*4]                  ; store aborter's PC in user register bank
-
-      [ {TRUE}
-        ; For now, don't attempt any fixup on ARMv6+, since we'll get it wrong
-        B       %FT90
-      ]
+; B %FT90
 
         TST     r0, #T32_bit                    ; were they in Thumb mode? if so, give up now
         BNE     %FT90
 
+ [ {TRUE}
+        ; For now, the only fixup we do is for MVA-based cache/TLB ops, which can abort on ARMv7 if the specified MVA doesn't have a mapping.
+        ; MVA cache ops have the form coproc=p15, CRn=c7, opc1=0, opc2=1
+        ; MVA TLB ops have the form coproc=p15, CRn=c8, opc=0, opc2=1
+        ; Note that some non-MVA ops also follow the above rules - at the moment we make no attempt to filter those false-positives out
+        ; This code is also written from the perspective of running on an ARMv7 CPU - behaviour under ARMv6 hasn't been checked!
+        LDR     r10, [r4, #-8]                  ; Get aborting instruction
+        CMP     r10, #&F0000000
+        BHS     %FT90                           ; Ignore cc=NV, which is MCR2 encoding
+        LDR     r9, =&0FFF0FF0                  ; Mask of interesting bits
+        AND     r10,r10,r9
+        LDR     r9, =&0E000F30                  ; Desired value, minus CRn
+        EOR     r10,r10,r9
+        CMP     r10, #&70000                    ; CRn=c7?
+        CMPNE   r10, #&80000                    ; CRn=c8?
+        BEQ     %FT70                           ; It's an MVA-based op. Ignore the abort and resume execution
+        B       %FT90                           ; Else skip the old & broken LDR/STR fixup code and go straight to the exception handler,
+ ]
+
 ;ARM 810 or StrongARM allow signed byte load or half-word load/stores - not supported at present
 ;***KJB - need to think about LDRH family
         LDR     r10, [r4, #-8]!                 ; r10 = actual instruction that aborted, and r4 points to it
diff --git a/s/vdu/vdudriver b/s/vdu/vdudriver
index ed82277809a59c8e694a6b2c7f488f0f4b403469..20bebb677b29b55c5d5e9233640f79a9c3c63b40 100644
--- a/s/vdu/vdudriver
+++ b/s/vdu/vdudriver
@@ -803,6 +803,8 @@ mchsub_3
 
 ; try to extend the amount of screen memory
 
+        ! 0, "Need to fix ModeChangeSub to not leave CursorAddr, etc. pointing to unmapped pages during DA resize. Causes bad stuff should an abort occur/screen output be attempted!" ; Note that even enlarging the DA can leave the pointers in a bad state, due to the way the screen DA handler shuffles down/unmaps the lower mapping of VRAM before the higher copy is enlarged
+
         MOV     R0, #2                  ; expand screen memory
         SWI     XOS_ChangeDynamicArea
         BVC     %FT08