diff --git a/TestSrc/ErrorCount,ffb b/TestSrc/ErrorCount,ffb
new file mode 100644
index 0000000000000000000000000000000000000000..67416ed54affe43f7d6da26f59bbaeac2176b027
Binary files /dev/null and b/TestSrc/ErrorCount,ffb differ
diff --git a/VersionASM b/VersionASM
index 95fd45782edd103cae0fbb72f895db361a9ad3bb..602c97e3a0dc2cd2e9954ad3594b158bbc2403ce 100644
--- a/VersionASM
+++ b/VersionASM
@@ -11,8 +11,8 @@
 Module_MajorVersion     SETS    "5.32"
 Module_Version          SETA    532
 Module_MinorVersion     SETS    ""
-Module_Date             SETS    "17 Aug 2000"
-Module_ApplicationDate2 SETS    "17-Aug-00"
-Module_ApplicationDate4 SETS    "17-Aug-2000"
+Module_Date             SETS    "18 Aug 2000"
+Module_ApplicationDate2 SETS    "18-Aug-00"
+Module_ApplicationDate4 SETS    "18-Aug-2000"
 Module_FullVersion      SETS    "5.32"
                         END
diff --git a/VersionNum b/VersionNum
index 9ad3134093e07666d6a13421f8f7b96aaa14dbaf..a6ef902e74274b5e1cdd2d35a06e0681a8016868 100644
--- a/VersionNum
+++ b/VersionNum
@@ -5,14 +5,14 @@
  */
 #define Module_MajorVersion_CMHG        5.32
 #define Module_MinorVersion_CMHG        
-#define Module_Date_CMHG                17 Aug 2000
+#define Module_Date_CMHG                18 Aug 2000
 
 #define Module_MajorVersion             "5.32"
 #define Module_Version                  532
 #define Module_MinorVersion             ""
-#define Module_Date                     "17 Aug 2000"
+#define Module_Date                     "18 Aug 2000"
 
-#define Module_ApplicationDate2         "17-Aug-00"
-#define Module_ApplicationDate4         "17-Aug-2000"
+#define Module_ApplicationDate2         "18-Aug-00"
+#define Module_ApplicationDate4         "18-Aug-2000"
 
 #define Module_FullVersion              "5.32"
diff --git a/s/MsgCode b/s/MsgCode
index 740182f8e63d7eac2ccf3eb21d499998c7caf10e..0e14087c10312676a63b6167003867446adc4ff6 100644
--- a/s/MsgCode
+++ b/s/MsgCode
@@ -27,6 +27,13 @@
 ;            returned.
 ;       V Set.
 ;
+
+        GBLL    countmsgusage
+countmsgusage SETL {FALSE}
+     [ countmsgusage
+        ! 0,    "*** WARNING: Cacheing *ALL* messages - even those with substitutions"
+     ]
+
 TranslateError_VClear  ROUT
         Push    "r4,LR"
         MOV     r4,#0
@@ -101,10 +108,121 @@ TranslateError_UseR4
   [ CacheCommonErrors
    ; This block MUST not be empty
 CommonErrorAddresses
-        &       ErrorBlock_BadNumb
-        &       ErrorBlock_BuffOverflow
+    [ countmsgusage
+        &       ErrorBlock_RCExc
+        &       ErrorBlock_RCNegative
+        &       ErrorBlock_BadString
+        &       ErrorBlock_VarCantFind
+        &       ErrorBlock_BadVarType
+        &       ErrorBlock_BadVarNam
+        &       ErrorBlock_VarTooLong
+        &       ErrorBlock_BadMacVal
+        &       ErrorBlock_VarNoRoom
+        &       ErrorBlock_BadBra
+        &       ErrorBlock_StkOFlo
+        &       ErrorBlock_MissOpn
+        &       ErrorBlock_MissOpr
+        &       ErrorBlock_BadInt
+        &       ErrorBlock_StrOFlo
+        &       ErrorBlock_NaffItm
+        &       ErrorBlock_DivZero
+        &       ErrorBlock_BadBase
+        &       ErrorBlock_NumbTooBig
+        &       ErrorBlock_BadClaimNum
+        &       ErrorBlock_SysHeapFull
+        &       ErrorBlock_BadDynamicArea
+        &       ErrorBlock_AreaAlreadyExists
+        &       ErrorBlock_AreaNotOnPageBdy
+        &       ErrorBlock_OverlappingAreas
+        &       ErrorBlock_CantAllocateArea
+        &       ErrorBlock_CantAllocateLevel2
+        &       ErrorBlock_UnknownAreaHandler
+        &       ErrorBlock_CantGetPhysMem
+        &       ErrorBlock_AplWSpaceInUse
+        &       ErrorBlock_ChDynamCAO
+        &       ErrorBlock_RAMFsUnchangeable
+        &       ErrorBlock_HeapBadReason
+        &       ErrorBlock_HeapFail_Init
+        &       ErrorBlock_HeapFail_BadDesc
+        &       ErrorBlock_HeapFail_BadLink
+        &       ErrorBlock_HeapFail_Alloc
+        &       ErrorBlock_HeapFail_NotABlock
+        &       ErrorBlock_HeapFail_BadExtend
+        &       ErrorBlock_HeapFail_ExcessiveShrink
+        &       ErrorBlock_NoSuchSWI1
+        &       ErrorBlock_NoSuchSWI
+        &       ErrorBlock_UndefinedInstruction
+        &       ErrorBlock_InstructionAbort
+        &       ErrorBlock_DataAbort
+        &       ErrorBlock_AddressException
+        &       ErrorBlock_BranchThrough0
+        &       ErrorBlock_BadEnvNumber
+        &       ErrorBlock_BadReadSysInfo
+        &       ErrorBlock_BadModuleReason
+        &       ErrorBlock_NoMoreModules
+        &       ErrorBlock_NoMoreIncarnations
+        &       ErrorBlock_PostfixNeeded
+        &       ErrorBlock_IncarnationExists
+        &       ErrorBlock_ChunkNotRM
+        &       ErrorBlock_MHNoRoom
+        &       ErrorBlock_ModulePostfix
+        &       ErrorBlock_NotMod
+        &       ErrorBlock_BadRMHeaderField
+        &       ErrorBlock_CantKill
+        &       ErrorBlock_RMNotFound
+        &       ErrorBlock_IncarnationNotFound
+        &       ErrorBlock_RMNotFoundInROM
+        &       ErrorBlock_ModuleTooOld
+        &       ErrorBlock_BadParameters
+        &       ErrorBlock_ArgRepeated
+        &       ErrorBlock_NaffDevNo
+        &       ErrorBlock_BadDevVecRel
+        &       ErrorBlock_RedirectFail
+        &       ErrorBlock_StackFull
+        &       ErrorBlock_OscliLongLine
+        &       ErrorBlock_NoOscliSpecials
+        &       ErrorBlock_OscliTooHard
+        &       ErrorBlock_BadParmString
+        &       ErrorBlock_CoreNotWriteable
+        &       ErrorBlock_CoreNotReadable
+        &       ErrorBlock_BadCommand
+        &       ErrorBlock_NoSuchSWI2
+        &       ErrorBlock_TooManyParms
+        &       ErrorBlock_BadKey
+        &       ErrorBlock_BadAddress
+        &       ErrorBlock_OutsideFile
+        &       ErrorBlock_Escape
+        &       ErrorBlock_BadTime
+        &       ErrorBlock_BadMODE
+        &       ErrorBlock_ModeNotAvailable
+        &       ErrorBlock_BadPixelDepth
+        &       ErrorBlock_Sprite_BadDPI
+        &       ErrorBlock_BadMSFlags
+        &       SpriteErr_NoWorkSpace
+        &       SpriteErr_NoRoom
+        &       SpriteErr_DoesntExist
+        &       SpriteErr_NoSprites
+        &       SpriteErr_NotGraphics
+        &       SpriteErr_NotEnoughRoom
+        &       SpriteErr_BadSpriteFile
+        &       SpriteErr_NoRoomToMerge
+        &       SpriteErr_Bad2ndPtr
+        &       SpriteErr_InvalidRowOrCol
+        &       SpriteErr_InvalidHeight
+        &       SpriteErr_InvalidWidth
+        &       SpriteErr_NoRoomToInsert
+        &       SpriteErr_SpriteAlreadyExists
+        &       SpriteErr_InvalidSpriteMode
+        &       SpriteErr_BadReasonCode
+        &       SpriteErr_CantInTeletext
+        &       SpriteErr_InvalidSaveArea
+        &       SpriteErr_SpriteIsCurrentDest
+        &       SpriteErr_NoMaskOrPaletteAllowedInThisDepth
+     ]
         &       ErrorBlock_ChDynamNotAllMoved
         &       ErrorBlock_NaffRelease
+        &       ErrorBlock_BuffOverflow
+        &       ErrorBlock_BadNumb
 EndCommonErrorAddresses
 
         GBLA    ECEACount
@@ -113,15 +231,20 @@ ECEACount SETA  (EndCommonErrorAddresses-CommonErrorAddresses)/4
 
         ! 0, "Requiring ":CC:(:STR:(ECEACount*256)):CC:" bytes for error cache"
         ! 0, "Cached error block pointer at ":CC::STR:CachedErrorBlocks
+        ! 0, "Cacheing ":CC:(:STR:ECEACount):CC:" error messages"
 
 ; This routine exits with Z clear if it can supply a cached translation; else must set Z
 ; so that the TranslateError_UseR4 routine continues to function and set R9 to the cache
 ; block to use for the result (or set R9 to zero to indicate no cacheing for this error)
 CheckCommonErrorCache ROUT
         Entry   "r1-r3"
+    [ countmsgusage
+        MOV     r4, #0                      ; prevents substitutions
+    |
         CMP     r4, #1                      ; is R4 = 0?  If so, clear C for next instruction
         SBCS    r9, r4, r4                  ; R9=0,Z set - if R4 was >0, else R9=-1, Z clear
         EXIT    EQ
+    ]
         LDR     r9, [r4, #KernelMessagesBlock] ; R4 guaranteed zero from above
         TEQ     r9, #0
         EXIT    EQ                          ; not initialised messages yet!  Exit R9=0, Z set
@@ -143,6 +266,12 @@ CheckCommonErrorCache ROUT
         MOVS    r9, #0
         EXIT
 20
+    [ countmsgusage
+        ADD     r3, r9, #ECEACount*256
+        LDR     r1, [r3, r2, LSL #2]
+        ADD     r1, r1, #1
+        STR     r1, [r3, r2, LSL #2]
+    ]
         ; Read the cached error number (0 = we don't have this cached or we have uncached it)
         ; Update R9 to point to the actual error buffer at the same time.
         LDR     r1, [r9, r2, LSL #8]!
@@ -158,7 +287,11 @@ CommonErrorCacheInit ROUT
         Entry   "r0-r8"
         MOVS    r2, r9                          ; copy R9 to R2 - only claim memory if it was 0
         BNE     %FT10
+    [ countmsgusage
+        LDR     r3, =ECEACount*260              ; size of block required
+    |
         LDR     r3, =ECEACount*256              ; size of block required
+    ]
         BL      ClaimSysHeapNode
         MOVS    r9, #0                          ; set Z for STREQ below and for return
         EXIT    VS
@@ -168,10 +301,18 @@ CommonErrorCacheInit ROUT
 
         GBLA    CECLoop
 CECLoop SETA    0
+     [ countmsgusage
+        LDR     r4, =ECEACount*260
+90
+        SUBS    r4, r4, #4
+        STR     r3, [r2, r4]
+        BNE     %BT90
+     |
         WHILE CECLoop < ECEACount
           STR   r3, [r2, #CECLoop * 256]
 CECLoop SETA    CECLoop+1
         WEND
+     ]
 
         MOVS    r9, r2                          ; set up R9; clear Z
         EXIT