diff --git a/VersionASM b/VersionASM
index ede294c49f6e20d235454ded87fac6acfb467d07..9160a3c31015b40e10a9994376a8e85989050dbb 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.270"
-Module_Date             SETS    "13 Jul 2015"
-Module_ApplicationDate  SETS    "13-Jul-15"
+Module_MinorVersion     SETS    "4.79.2.271"
+Module_Date             SETS    "17 Jul 2015"
+Module_ApplicationDate  SETS    "17-Jul-15"
 Module_ComponentName    SETS    "Kernel"
 Module_ComponentPath    SETS    "castle/RiscOS/Sources/Kernel"
-Module_FullVersion      SETS    "5.35 (4.79.2.270)"
-Module_HelpVersion      SETS    "5.35 (13 Jul 2015) 4.79.2.270"
+Module_FullVersion      SETS    "5.35 (4.79.2.271)"
+Module_HelpVersion      SETS    "5.35 (17 Jul 2015) 4.79.2.271"
                         END
diff --git a/VersionNum b/VersionNum
index 09e8d80a38fa8a1f9aa4b05cfa76329bfd9b65d8..a9bfebd4e4eda8934069f8b3a6aa1427c138518b 100644
--- a/VersionNum
+++ b/VersionNum
@@ -5,19 +5,19 @@
  *
  */
 #define Module_MajorVersion_CMHG        5.35
-#define Module_MinorVersion_CMHG        4.79.2.270
-#define Module_Date_CMHG                13 Jul 2015
+#define Module_MinorVersion_CMHG        4.79.2.271
+#define Module_Date_CMHG                17 Jul 2015
 
 #define Module_MajorVersion             "5.35"
 #define Module_Version                  535
-#define Module_MinorVersion             "4.79.2.270"
-#define Module_Date                     "13 Jul 2015"
+#define Module_MinorVersion             "4.79.2.271"
+#define Module_Date                     "17 Jul 2015"
 
-#define Module_ApplicationDate          "13-Jul-15"
+#define Module_ApplicationDate          "17-Jul-15"
 
 #define Module_ComponentName            "Kernel"
 #define Module_ComponentPath            "castle/RiscOS/Sources/Kernel"
 
-#define Module_FullVersion              "5.35 (4.79.2.270)"
-#define Module_HelpVersion              "5.35 (13 Jul 2015) 4.79.2.270"
+#define Module_FullVersion              "5.35 (4.79.2.271)"
+#define Module_HelpVersion              "5.35 (17 Jul 2015) 4.79.2.271"
 #define Module_LibraryVersionInfo       "5:35"
diff --git a/hdr/KernelWS b/hdr/KernelWS
index a8e1b1729ecb4fc056e0ffdfa5cdc5402df164fe..4beba73cfbec88afe09606fd42a7137f84a4593b 100644
--- a/hdr/KernelWS
+++ b/hdr/KernelWS
@@ -232,10 +232,12 @@ DANode_NodeSize   #     0
 ; The addresses below are only temporary; eventually most of them will be allocated at run time (we hope!)
 
  [ HiProcVecs
-ZeroPage            * &FFFF0000
+ProcVecs            * &FFFF0000
  |
-ZeroPage            * &00000000
+ProcVecs            * &00000000
  ]
+; Currently, zero page must be located at the processor vectors
+ZeroPage            * ProcVecs
 
  [ HAL
 ; Sort out 26/32 bit versions
diff --git a/hdr/OSRSI6 b/hdr/OSRSI6
index 674043e3fd135e2b7eccd9fcb999d95b8e622d32..773213fa8085061382a9982cc2dae14a2286d6c6 100644
--- a/hdr/OSRSI6
+++ b/hdr/OSRSI6
@@ -84,5 +84,7 @@ OSRSI6_FPEAnchor                               * 81
 OSRSI6_ESC_Status                              * 82
 OSRSI6_ECFYOffset                              * 83
 OSRSI6_ECFShift                                * 84
+OSRSI6_VecPtrTab                               * 85
+OSRSI6_NVECTORS                                * 86
 
         END
diff --git a/s/Kernel b/s/Kernel
index 8121f3da10b56e0a428459482b873fccc3d48f3a..feff724364cbdd77ca5775f67b3cfad1c6def29b 100644
--- a/s/Kernel
+++ b/s/Kernel
@@ -1592,10 +1592,18 @@ Issue_Service_SWI ROUT
  [ StrongARM
 ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ; SWI OS_PlatformFeatures
+;
+;     r0 = reason code:
+;          0 -> read code features
+;          1 -> read MMU features (ROL, unimplemented here)
+;          2-31 -> reserved just in case ROL have used them
+;          32 -> read processor vectors location
 
 PlatFeatSWI ROUT
         Push    lr
-        CMP     r0, #0                  ;Is it a known reason code?
+        CMP     r0, #32                 ;Is it a known reason code?
+        BEQ     %FT30
+        CMP     r0, #0
         BNE     %FT50                   ;No, so send out a service call
 
         ;Ok, it's the 'code_features' reason code.
@@ -1617,6 +1625,13 @@ platfeat_irqinsert
         MOV     r0, r0
         MOV     pc, lr
 
+30
+        ; Return processor vectors base + size
+        LDR     r0, =ProcVecs
+        MOV     r1, #256                ; Currently only 256 bytes available for FIQ handlers
+        Pull    lr
+        B       SLVK
+
 50
   [ {FALSE}
         Push    "r1-r8"
diff --git a/s/MemInfo b/s/MemInfo
index 10fa10c4d3f7041c14759e61eb25e0862cf1bb0c..56576d78352579824814eeccafee37ac196a5ff2 100644
--- a/s/MemInfo
+++ b/s/MemInfo
@@ -1080,6 +1080,10 @@ ReleasePhysAddr
 ;                               9=HAL workspace
 ;                               10=Kernel buffers
 ;                               11=HAL uncacheable workspace
+;                               12=Kernel 'ZeroPage' workspace
+;                               13=Processor vectors
+;                               14=DebuggerSpace
+;                               15=Scratch space
 ;                       16-31   reserved (set to 0)
 ;
 ;       Out:    r1 = base of area
@@ -1111,6 +1115,10 @@ MAI_TableStart
         B       MAI_HALWs
         B       MAI_Kbuffs
         B       MAI_HALWsNCNB
+        B       MAI_ZeroPage
+        B       MAI_ProcVecs
+        B       MAI_DebuggerSpace
+        B       MAI_ScratchSpace
 MAI_TableEnd
 
 70
@@ -1200,6 +1208,37 @@ MAI_Kbuffs
         LDR     r3, =(KbuffsSize + &FFF) :AND: :NOT: &FFF
         EXIT
 
+MAI_ZeroPage
+        LDR     r1, =ZeroPage
+        MOV     r2, #16*1024
+        MOV     r3, #16*1024
+        EXIT
+
+MAI_ProcVecs
+      [ ZeroPage != ProcVecs
+        LDR     r1, =ProcVecs
+        MOV     r2, #4096
+        MOV     r3, #4096
+      ]
+        EXIT
+
+MAI_DebuggerSpace
+        ; Only report if DebuggerSpace is a standalone page. The debugger module
+        ; finds DebuggerSpace via OS_ReadSysInfo 6, this call is only for the
+        ; benefit of the task manager.
+      [ DebuggerSpace_Size >= &1000
+        LDR     r1, =DebuggerSpace
+        MOV     r2, #DebuggerSpace_Size
+        MOV     r3, #DebuggerSpace_Size
+      ]
+        EXIT
+
+MAI_ScratchSpace
+        LDR     r1, =ScratchSpace
+        MOV     r2, #16*1024
+        MOV     r3, #16*1024
+        EXIT
+
 ;----------------------------------------------------------------------------------------
 ;
 ;        In:    r0 = flags
@@ -1273,6 +1312,7 @@ CheckMemoryAccess ROUT
         CMP     r1, #32*1024
         BHS     %FT10
         ; Check zero page
+        ASSERT  ProcVecs = ZeroPage
       [ ZeroPage = 0
         MOV     r3, #0
         MOV     r4, #16*1024
@@ -1485,6 +1525,7 @@ CheckMemoryAccess ROUT
         MOV     r5, #CMA_ROM
         BL      CMA_AddRange
         ; Finally, high processor vectors/relocated zero page
+        ASSERT  ProcVecs = ZeroPage
       [ ZeroPage > 0
         ASSERT  ZeroPage > ROM
         MOV     r3, r10
diff --git a/s/Middle b/s/Middle
index 3f65be41cbb038595db9168ecafb87b9df785b28..177f413c9ea29aece3bb0dfdfe54b2c1a0c48781 100644
--- a/s/Middle
+++ b/s/Middle
@@ -1892,6 +1892,8 @@ osri6_table
     DCD  ZeroPage+ESC_Status                          ;82
     DCD  ZeroPage+VduDriverWorkSpace+ECFYOffset       ;83
     DCD  ZeroPage+VduDriverWorkSpace+ECFShift         ;84
+    DCD  ZeroPage+VecPtrTab                           ;85
+    DCD  NVECTORS                                     ;86
 osri6_maxvalue * (.-4-osri6_table) :SHR: 2