diff --git a/VersionASM b/VersionASM
index b63e699c237e24b236c46439c4fe25f359a62ac8..c5ffa9ec7e3cb8061d5fee1f5908609f5161a546 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.3"
-Module_Date             SETS    "06 Mar 2009"
-Module_ApplicationDate  SETS    "06-Mar-09"
+Module_MinorVersion     SETS    "4.79.2.98.2.4"
+Module_Date             SETS    "24 Apr 2009"
+Module_ApplicationDate  SETS    "24-Apr-09"
 Module_ComponentName    SETS    "Kernel"
 Module_ComponentPath    SETS    "castle/RiscOS/Sources/Kernel"
-Module_FullVersion      SETS    "5.35 (4.79.2.98.2.3)"
-Module_HelpVersion      SETS    "5.35 (06 Mar 2009) 4.79.2.98.2.3"
+Module_FullVersion      SETS    "5.35 (4.79.2.98.2.4)"
+Module_HelpVersion      SETS    "5.35 (24 Apr 2009) 4.79.2.98.2.4"
                         END
diff --git a/VersionNum b/VersionNum
index 8d7ca9d849565ec240eafd4e61fb8a6f67a8eeb9..202dee4d572fb429455617b874c5a8d153c75135 100644
--- a/VersionNum
+++ b/VersionNum
@@ -5,19 +5,19 @@
  *
  */
 #define Module_MajorVersion_CMHG        5.35
-#define Module_MinorVersion_CMHG        4.79.2.98.2.3
-#define Module_Date_CMHG                06 Mar 2009
+#define Module_MinorVersion_CMHG        4.79.2.98.2.4
+#define Module_Date_CMHG                24 Apr 2009
 
 #define Module_MajorVersion             "5.35"
 #define Module_Version                  535
-#define Module_MinorVersion             "4.79.2.98.2.3"
-#define Module_Date                     "06 Mar 2009"
+#define Module_MinorVersion             "4.79.2.98.2.4"
+#define Module_Date                     "24 Apr 2009"
 
-#define Module_ApplicationDate          "06-Mar-09"
+#define Module_ApplicationDate          "24-Apr-09"
 
 #define Module_ComponentName            "Kernel"
 #define Module_ComponentPath            "castle/RiscOS/Sources/Kernel"
 
-#define Module_FullVersion              "5.35 (4.79.2.98.2.3)"
-#define Module_HelpVersion              "5.35 (06 Mar 2009) 4.79.2.98.2.3"
+#define Module_FullVersion              "5.35 (4.79.2.98.2.4)"
+#define Module_HelpVersion              "5.35 (24 Apr 2009) 4.79.2.98.2.4"
 #define Module_LibraryVersionInfo       "5:35"
diff --git a/s/ARMops b/s/ARMops
index 63e61950b401040357783c43af9a489ca7fc4b21..95b5224bf6f8dccbaeb8f19cc6bf9eec4ff3e800 100644
--- a/s/ARMops
+++ b/s/ARMops
@@ -1852,13 +1852,13 @@ Cache_CleanAll_WB_CR7_Lx ROUT
         AND     v1, a3, #&7 ; log2(Line size)-2
         BIC     a3, a3, #&F0000007 ; Clear flags & line size
         MOV     v2, a3, LSL #19 ; Number of ways-1 in upper 10 bits
-        MOV     v3, a3, LSR #13 ; Number of sets-1 in upper 15 bits
+        MOV     v3, a3, LSR #13 ; Number of sets-1 in lower 15 bits
         ; Way number needs to be packed right up at the high end of the data word; shift it up
         CLZ     a4, v2
         MOV     v2, v2, LSL a4
-        ; Set number needs to start at log2(Line size)
-        MOV     v3, v3, LSR #15 ; Start at bit 2
-        MOV     v3, v3, LSL v1 ; Start at log2(Line size)
+        ; Set number needs to start at log2(Line size)+2
+        MOV     v3, v3, LSL #4 ; Start at bit 4
+        MOV     v3, v3, LSL v1 ; Start at log2(Line size)+2
         ; Now calculate the offset numbers we will use to increment sets & ways
         BIC     v4, v2, v2, LSL #1 ; Way increment
         BIC     v5, v3, v3, LSL #1 ; Set increment
@@ -1898,13 +1898,13 @@ Cache_CleanInvalidateAll_WB_CR7_Lx ROUT
         AND     v1, a3, #&7 ; log2(Line size)-2
         BIC     a3, a3, #&F0000007 ; Clear flags & line size
         MOV     v2, a3, LSL #19 ; Number of ways-1 in upper 10 bits
-        MOV     v3, a3, LSR #13 ; Number of sets-1 in upper 15 bits
+        MOV     v3, a3, LSR #13 ; Number of sets-1 in lower 15 bits
         ; Way number needs to be packed right up at the high end of the data word; shift it up
         CLZ     a4, v2
         MOV     v2, v2, LSL a4
-        ; Set number needs to start at log2(Line size)
-        MOV     v3, v3, LSR #15 ; Start at bit 2
-        MOV     v3, v3, LSL v1 ; Start at log2(Line size)
+        ; Set number needs to start at log2(Line size)+2
+        MOV     v3, v3, LSL #4 ; Start at bit 4
+        MOV     v3, v3, LSL v1 ; Start at log2(Line size)+2
         ; Now calculate the offset numbers we will use to increment sets & ways
         BIC     v4, v2, v2, LSL #1 ; Way increment
         BIC     v5, v3, v3, LSL #1 ; Set increment
@@ -1945,13 +1945,13 @@ Cache_InvalidateAll_WB_CR7_Lx ROUT
         AND     v1, a3, #&7 ; log2(Line size)-2
         BIC     a3, a3, #&F0000007 ; Clear flags & line size
         MOV     v2, a3, LSL #19 ; Number of ways-1 in upper 10 bits
-        MOV     v3, a3, LSR #13 ; Number of sets-1 in upper 15 bits
+        MOV     v3, a3, LSR #13 ; Number of sets-1 in lower 15 bits
         ; Way number needs to be packed right up at the high end of the data word; shift it up
         CLZ     a4, v2
         MOV     v2, v2, LSL a4
-        ; Set number needs to start at log2(Line size)
-        MOV     v3, v3, LSR #15 ; Start at bit 2
-        MOV     v3, v3, LSL v1 ; Start at log2(Line size)
+        ; Set number needs to start at log2(Line size)+2
+        MOV     v3, v3, LSL #4 ; Start at bit 4
+        MOV     v3, v3, LSL v1 ; Start at log2(Line size)+2
         ; Now calculate the offset numbers we will use to increment sets & ways
         BIC     v4, v2, v2, LSL #1 ; Way increment
         BIC     v5, v3, v3, LSL #1 ; Set increment
@@ -2020,13 +2020,13 @@ IMB_Full_WB_CR7_Lx ROUT
         AND     v1, a3, #&7 ; log2(Line size)-2
         BIC     a3, a3, #&F0000007 ; Clear flags & line size
         MOV     v2, a3, LSL #19 ; Number of ways-1 in upper 10 bits
-        MOV     v3, a3, LSR #13 ; Number of sets-1 in upper 15 bits
+        MOV     v3, a3, LSR #13 ; Number of sets-1 in lower 15 bits
         ; Way number needs to be packed right up at the high end of the data word; shift it up
         CLZ     a4, v2
         MOV     v2, v2, LSL a4
-        ; Set number needs to start at log2(Line size)
-        MOV     v3, v3, LSR #15 ; Start at bit 2
-        MOV     v3, v3, LSL v1 ; Start at log2(Line size)
+        ; Set number needs to start at log2(Line size)+2
+        MOV     v3, v3, LSL #4 ; Start at bit 4
+        MOV     v3, v3, LSL v1 ; Start at log2(Line size)+2
         ; Now calculate the offset numbers we will use to increment sets & ways
         BIC     v4, v2, v2, LSL #1 ; Way increment
         BIC     v5, v3, v3, LSL #1 ; Set increment
diff --git a/s/HAL b/s/HAL
index 25af8ec87faa53b992c7cfcab8bd290e63c95f32..bd8addf1a4f23c27e0e21a303d4399fb27a21a65 100644
--- a/s/HAL
+++ b/s/HAL
@@ -1040,13 +1040,13 @@ HAL_InvalidateCache_ARMvF
         AND     r11, r10, #&7 ; log2(Line size)-2
         BIC     r10, r10, #&F0000007 ; Clear flags & line size
         MOV     r12, r10, LSL #19 ; Number of ways-1 in upper 10 bits
-        MOV     r10, r10, LSR #13 ; Number of sets-1 in upper 15 bits
+        MOV     r10, r10, LSR #13 ; Number of sets-1 in lower 15 bits
         ; Way number needs to be packed right up at the high end of the data word; shift it up
         CLZ     r14, r12
         MOV     r12, r12, LSL r14
-        ; Set number needs to start at log2(Line size)
-        MOV     r10, r10, LSR #15 ; Start at bit 2
-        MOV     r10, r10, LSL r11 ; Start at log2(Line size)
+        ; Set number needs to start at log2(Line size)+2
+        MOV     r10, r10, LSL #4 ; Start at bit 4
+        MOV     r10, r10, LSL r11 ; Start at log2(Line size)+2
         ; Now calculate the offset numbers we will use to increment sets & ways
         BIC     r12, r12, r12, LSL #1 ; Way increment
         BIC     r11, r10, r10, LSL #1 ; Set increment