diff --git a/VersionASM b/VersionASM
index 12366d42de76dc88f6349369e60273ab20b8783d..35355af4d58fd58755ddc7ad32d4492ab2723065 100644
--- a/VersionASM
+++ b/VersionASM
@@ -6,9 +6,9 @@
 			GBLS	Module_MinorVersion
 			GBLS	Module_Date
 			GBLS	Module_FullVersion
-Module_MajorVersion	SETS    "4.85"
-Module_Version          SETA    485
+Module_MajorVersion	SETS    "4.86"
+Module_Version          SETA    486
 Module_MinorVersion	SETS	""
-Module_Date		SETS    "24 Aug 1999"
-Module_FullVersion      SETS    "4.85"
+Module_Date		SETS    "16 Sep 1999"
+Module_FullVersion      SETS    "4.86"
                         END
diff --git a/VersionNum b/VersionNum
index b134f877b8717e6e531f52e846791275e56cafb1..09ba937a481a09c7b7116b1c35f60a96ed6f5234 100644
--- a/VersionNum
+++ b/VersionNum
@@ -1,15 +1,15 @@
-/* (4.85)
+/* (4.86)
  *
  * This file is automatically maintained by srccommit, do not edit manually.
  *
  */
-#define Module_MajorVersion_CMHG     	4.85
+#define Module_MajorVersion_CMHG     	4.86
 #define Module_MinorVersion_CMHG	
-#define Module_Date_CMHG      		24 Aug 1999
+#define Module_Date_CMHG      		16 Sep 1999
 
-#define Module_MajorVersion     	"4.85"
-#define Module_Version                  485
+#define Module_MajorVersion     	"4.86"
+#define Module_Version                  486
 #define Module_MinorVersion		""
-#define Module_Date      		"24 Aug 1999"
+#define Module_Date      		"16 Sep 1999"
 
-#define Module_FullVersion              "4.85"
+#define Module_FullVersion              "4.86"
diff --git a/s/GetAll b/s/GetAll
index d9c1466bd7cfd3f315c4de0e0960f01b6e0cef5c..c8339022101ccddb7623f0390b5da5ac488f685a 100644
--- a/s/GetAll
+++ b/s/GetAll
@@ -482,9 +482,6 @@ InterlacedPointer SETL {TRUE} :LAND: STB                ; enable code to do prop
                 GBLL    ValidateCMOS            ; Apply special CMOS-corruption detection code, and do minimal default settings.
 ValidateCMOS    SETL    {TRUE} :LAND: STB
 
-                GBLL    UseHClk
-UseHClk         SETL    {TRUE} :LAND: STB       ; Use HClk when driving TVs.
-
               [ DebugHeaps
                 ! 0, "*** WARNING *** Heap debugging assembled in"
               ]
diff --git a/s/NewReset b/s/NewReset
index e19aba23f748d0606fcbe2c47f48f9c715e0f150..28470c018cd9fd2c72473d2372ebcbfe9bd3486d 100644
--- a/s/NewReset
+++ b/s/NewReset
@@ -305,7 +305,7 @@ VIDCTAB
         & &E0000401     ; CR: FIFO load 16 words, 1 bpp, ck/1, hclk
    ]
    [ VIDCClockSource = "RCLK"
-        & &E0000402     ; CR: FIFO load 16 words, 1 bpp, ck/1, rclk
+        & &E0000406     ; CR: FIFO load 16 words, 1 bpp, ck/2, rclk
    ]
 
 ; Don't bother programming all 256 palette entries, we'll be here all night
@@ -966,6 +966,8 @@ reset_loop
 	BHI	cmos_reset
  ]
 
+ [ {FALSE}
+ ; Oh, just leave it be
 	MOV	R0, #VduCMOS
 	BL	Read
  [ IOMD_C_MonitorType = 0 :LAND: MPEGPoduleNTSCNotPALMask = 0 :LAND: IOMD_C_PALNTSCType = 0
@@ -976,6 +978,7 @@ reset_loop
 	TEQ	R0, #(Sync_Auto :OR: MonitorTypeAuto)
  ]
 	BNE	cmos_reset
+ ]
 
 ; Year should be >=1995, <=2020
 ; (2020 is arbitrary, but everything breaks soon after that)
diff --git a/s/vdu/vdudecl b/s/vdu/vdudecl
index 9e2ffd8b3efcd58bb9098b2eba908ea1bab7e08d..e5a9a26ef45f36dbb457b19e8dd88bf3e5f9fe34 100644
--- a/s/vdu/vdudecl
+++ b/s/vdu/vdudecl
@@ -77,6 +77,7 @@ VIDCDataControl         *       &F0000000
 
 ; Pseudo-registers used to return additional information to kernel
 
+PseudoRegister_HClockSpeed *    &FB000000       ; used to indicate VIDC hclock speed (and use it)
 PseudoRegister_ClockSpeed *     &FC000000       ; used to indicate real VIDC rclock speed
 PseudoRegister_DPMSState *      &FD000000       ; used to return desired DPMS state
  [ ChrontelSupport
diff --git a/s/vdu/vdudriver b/s/vdu/vdudriver
index 842322b61b9c802d79b9e2479445442abdf1206b..75fd7fce536eae10bcb52a25a81fdda04b13d5bc 100644
--- a/s/vdu/vdudriver
+++ b/s/vdu/vdudriver
@@ -2104,7 +2104,7 @@ ProcessControlListItem ENTRY
         &       ProcessControlListDACControl            ; 6 - DAC control
         &       ProcessControlListRGBPedestals          ; 7 - RGB pedestal enables
         &       ProcessControlListExternalRegister      ; 8 - External register
-        &       ProcessControlListNOP                   ; 9 - HClk select/specify
+        &       ProcessControlListHClockSelect          ; 9 - HClk select/specify
         &       ProcessControlListNOP                   ; 10 - RClk frequency
         &       ProcessControlListDPMSState             ; 11 - DPMS state
 
@@ -2217,9 +2217,13 @@ ProcessControlListLCDOffsetRegister1
         MOV     r0, #LCDOffsetRegister1
         B       %BT20
 
+ProcessControlListHClockSelect
+        MOV     r0, #PseudoRegister_HClockSpeed ; pseudo-register holding HClock speed
+        B       %FT40
+
 ProcessControlListDPMSState
         MOV     r0, #PseudoRegister_DPMSState   ; pseudo-register holding DPMS state
-        ORR     r2, r2, r0                      ; form combined value
+40      ORR     r2, r2, r0                      ; form combined value
         STR     r2, [r9, r0, LSR #22]           ; store in register
         EXIT
 
@@ -2230,6 +2234,7 @@ ProcessControlListDPMSState
 ;
 ; in:   r0 = desired frequency (kHz)
 ;       r1 = rclk frequency (kHz) (normally 24000)
+;       r9 -> VIDC table
 ;
 ; out:  r0 = bits to put in bits 0..15 of Frequency Synthesizer Register
 ;       r1 = bits to put in bits 0..4 of Control Register
@@ -2252,28 +2257,17 @@ BestRangeError          #       4
 ComputeModuliStack      *       :INDEX: @
 
 ComputeModuli ENTRY "r2-r12", ComputeModuliStack
- [ ChrontelSupport
-	MOV	r1, #CR_HCLK :OR: ((1-1) :SHL: CR_PixelDivShift)	; use divide by 1
-	LDR	r0, =(63 :SHL: FSyn_RShift) :OR: (1 :SHL: FSyn_VShift)	; minimum V, maximum R
-	EXIT
- |
-  [ UseHClk :LAND: STB
-
-; TMD 09-Oct-96: Only check monitor lead type if there is the hardware, otherwise assume just TV
-   [ IOMD_C_MonitorType <> 0
-	BL	TranslateMonitorLeadType	; -> r3=mode, r4=monitor, r5=sync
-	CMP	r4, #3
-	BEQ	%FT05
-   ]
-
-; Use HClk
-	LDR	r1, =12500		; if desired pixel clock
-	CMP	r0, r1
-	MOVCC	r1, #CR_HCLK :OR: ((2-1) :SHL: CR_PixelDivShift)	; if < 12.5MHz, use divide by 2
-	MOVCS	r1, #CR_HCLK :OR: ((1-1) :SHL: CR_PixelDivShift)	; else use divide by 1
-	LDR	r0, =63 :OR: (1 :SHL: FSyn_VShift) ; minimum V, maximum R
-	EXIT
-  ]
+        LDR     r1, [r9, #PseudoRegister_HClockSpeed:SHR:22]            ; are we using HCLK?
+        CMP     r1, #-1
+        BEQ     %FT05                                                   ; -1 => no, use VCLK/RCLK
+
+        BIC     r1, r1, #&FF000000                                      ; r1 = HCLK frequency
+        SUB     r1, r1, r1, LSR #2                                      ; r1 = HCLK * 3/4
+        CMP     r0, r1
+        MOVLO   r1, #CR_HCLK :OR: ((2-1) :SHL: CR_PixelDivShift)        ; if < 3/4 HCLK, use divide by 2
+        MOVHS   r1, #CR_HCLK :OR: ((1-1) :SHL: CR_PixelDivShift)        ; else use divide by 1
+        LDR     r0, =(63 :SHL: FSyn_RShift) :OR: (1 :SHL: FSyn_VShift)  ; minimum V, maximum R
+        EXIT
 
 ; Use VCLK/RCLK
 05
@@ -2356,9 +2350,11 @@ ComputeModuli ENTRY "r2-r12", ComputeModuliStack
         STR     r8, BestVInOrOutOfRange
         STR     r14, BestRangeError
 50
+  [ :LNOT: DontUseVCO                   ; If we don't use the VCO, R has to be 1
         ADD     r4, r4, #1
         CMP     r4, #16                 ; R goes from 2 to 16 (was 2 to 64)
         BLS     %BT15
+  ]
 
         ADD     r3, r3, #1
         CMP     r3, #8                  ; D goes from 1 to 8
@@ -2393,7 +2389,6 @@ ComputeModuli ENTRY "r2-r12", ComputeModuliStack
         ORREQ   r1, r1, #CR_RCLK        ; if using VCO then set for VCLK, else RCLK
 
         EXIT
- ] ; ChrontelSupport
  ] ; VIDCListType3
 
 ; *****************************************************************************