diff --git a/VersionASM b/VersionASM
index 2d157a5e1a66c61b0579f9ea1f3cc073e312583c..6f09e4c61386024e401f173b1ca8a6ea3d9bde8d 100644
--- a/VersionASM
+++ b/VersionASM
@@ -5,8 +5,8 @@
 			GBLA    Module_Version
 			GBLS	Module_MinorVersion
 			GBLS	Module_Date
-Module_MajorVersion	SETS    "4.67"
-Module_Version          SETA    467
+Module_MajorVersion	SETS    "4.68"
+Module_Version          SETA    468
 Module_MinorVersion	SETS	""
-Module_Date		SETS    "30 Oct 1998"
+Module_Date		SETS    "16 Dec 1998"
 		        END
diff --git a/VersionNum b/VersionNum
index 47025b403d1fe4950632dc84dc558416b9475a15..9e4a8657ae4ccbc4fa9e24e4e510fa0466dcfcc6 100644
--- a/VersionNum
+++ b/VersionNum
@@ -1,14 +1,14 @@
-/* (4.67)
+/* (4.68)
  *
  * This file is automatically maintained by srccommit, do not edit manually.
  *
  */
-#define Module_MajorVersion_CMHG     	4.67
+#define Module_MajorVersion_CMHG     	4.68
 #define Module_MinorVersion_CMHG	
-#define Module_Date_CMHG      		30 Oct 1998
+#define Module_Date_CMHG      		16 Dec 1998
 
-#define Module_MajorVersion     	"4.67"
-#define Module_Version                  467
+#define Module_MajorVersion     	"4.68"
+#define Module_Version                  468
 #define Module_MinorVersion		""
-#define Module_Date      		"30 Oct 1998"
+#define Module_Date      		"16 Dec 1998"
 
diff --git a/s/PMF/osbyte b/s/PMF/osbyte
index 187a33c3871ebe96197f3a2d3160048691e713b3..8ebdd8911c1f2ea6f853604176001cc0b68abc64 100644
--- a/s/PMF/osbyte
+++ b/s/PMF/osbyte
@@ -1356,42 +1356,39 @@ DoOsbyteVar
         AND     R11, R3, R2             ; Mangle it as required by the law
         EOR     R11, R11, R1            ; ................................
         MOV     R1, R3                  ; Return old value in R1
-  [ {FALSE}
         TEQ     R0, #OsbyteKeyStatus - MainVars    ; sorry - it's not pure any more.
         BEQ     DoOsbyteKeyStatus                  ; mea culpa. KJB.
-  ]
         STRB    R11, [R0, WsPtr]!       ; R0 +:= WsPtr
         LDRB    R2, [R0, #1]            ; Return contents of next loc in R2
         MyOsbyte
 
- [ {FALSE}
 ; Keyboard status (OS_Byte 202).
 ; on entry: R0 = OsbyteKeyStatus - MainVars
 ;           R1 = old value
 ;           R11 = new value
 DoOsbyteKeyStatus ROUT
-        Push    "R0-R3"
+        Push    "R0-R3,R10"
+        MOV     R10,#UpCallV            ; (Can't use OS_UpCall - it enables IRQs and we're documented as not doing so)
         MOV     R3,R11                  ; R3 = new value
         MOV     R2,R1                   ; R2 = old value
         MOV     R1,#0                   ; pre-change
         MOV     R0,#UpCall_KeyboardStatus
-        SWI     XOS_UpCall              ; go on then, interfere
-        BVS     %FT10
+        BL      CallVector              ; go on then, interfere     (Corrupts R10 & WsPtr)
 
         LDR     R0, [R13]               ; get back original R0
-        STRB    R3, [R0, WsPtr]!        ; R0 +:= WsPtr
+        STRB    R3, [R0, #OsbyteVars]!  ; R0 +:= WsPtr
         LDRB    R14, [R0, #1]           ; Return contents of next loc in R2
         STR     R14, [R13, #8]          ; by popping it on the stack
 
         TEQ     R2, R3                  ; don't bother with UpCall if it didn't change...
 
+        MOVNE   R10,#UpCallV
         MOVNE   R1,#1                   ; post-change
         MOVNE   R0,#UpCall_KeyboardStatus
-        SWINE   XOS_UpCall              ; can't do anything about it now...
-10
-        Pull    "R0-R3"
+        BLNE    CallVector              ; can't do anything about it now...
+
+        Pull    "R0-R3,R10"
         MyOsbyte
-  ]
 
         LTORG