diff --git a/Options/s/!Debug b/Options/s/!Debug
index 03c3d3fa50e9246a4cdf48883e89f4236e3a34e7..351a1f63c5a340a5e1bf6d486514a3df6d7f017b 100644
--- a/Options/s/!Debug
+++ b/Options/s/!Debug
@@ -92,5 +92,6 @@
 	OptionD	mjs2,      false               ; Mike's debugs 2
 	OptionD	mjs3,      false               ; Mike's debugs 3
 	OptionD	mjs4,      false               ; Mike's debugs 4 (TransferBlock)
+	OptionD autohg,    false               ; AutoHourglass
 
 	END
diff --git a/Options/s/!Default b/Options/s/!Default
index 8bd75c391041b6aff2581a1f00fb6ceb4e5ea1e9..aabf947e57cd8334a16b6623bbfca84e461d7c86 100644
--- a/Options/s/!Default
+++ b/Options/s/!Default
@@ -56,6 +56,7 @@
 	Option	IconiseButton,		false			; Windows given iconise button
 	Option	ChocolateScreen,	false			; Clean cached screen after redraw loops
 	Option	StretchErrorButtons,	true			; Stretch buttons in error box to fit text
+	Option	AutoHourglass,		false			; Hourglass automatically on between Wimp_Polls
 
 	Option	RegisterMessages,	false
 	Option	RegisterTools2D,	false
diff --git a/Options/s/Ursula b/Options/s/Ursula
index a9bceac7e2df4f5f3813857c08c631928a3f81b0..76d47f1b6c66da8187996f1347b093526d811aad 100644
--- a/Options/s/Ursula
+++ b/Options/s/Ursula
@@ -18,6 +18,7 @@
 
 	Option	IconiseButton,		true			; Windows given iconise button
 	Option	ChocolateScreen,	true			; Clean cached screen after redraw loops
+	Option	AutoHourglass,		true			; Hourglass automatically on between Wimp_Polls (requires Ursula Task Manager and Hourglass)
 
  	ASSERT	International_Help <> 0
 
diff --git a/Version b/Version
index 2bcdce8d9d6f6df4fd979591577d4615e887314a..3bad17e0b5f5063353d9fd09a62c2806ed73efaa 100644
--- a/Version
+++ b/Version
@@ -4,8 +4,8 @@
         GBLS    VString
         GBLS    Date
 
-Version SETA    393
-VString SETS    "3.93"
-Date    SETS    "11 Jun 1997"
+Version SETA    394
+VString SETS    "3.94"
+Date    SETS    "03 Jul 1997"
 
         END
diff --git a/s/Wimp01 b/s/Wimp01
index 025b0df7aef4247fb3fcf1bcc422896e05d7f609..1a58f0e5a36e5d1e88190941e7400caa7ca240e5 100644
--- a/s/Wimp01
+++ b/s/Wimp01
@@ -2433,6 +2433,10 @@ sz_scrbot2      *       0
 sz_scrbot       *       0               ; was 96 (to allow for icon bar)
 sz_scrtop       *       1024
 
+ [ AutoHourglass
+hourglass_delay	*	33		; delay before showing hourglass for "dodgy apps" in 1/100 secs
+ ]
+
 
 ; contents of task word if task is dead
 
@@ -4363,6 +4367,12 @@ mywrch
         MOV     R14,#cf_active
         STR     R14,commandflag
 
+      [ Version >= 394 :LAND: AutoHourglass
+        SWI	XHourglass_Smash	; the easy option for consistent behaviour
+        CLRV
+        Debug	autohg,"Hourglass_Smash at CommandWindow start"
+      ]
+
 ; optimisation - if first char is 22 (mode change),
 ; don't bother about window cos it'll be overwritten anyway
 
diff --git a/s/Wimp02 b/s/Wimp02
index 14c2315d5e41334f5b84af45014c3236686afce5..51d9fea733a4200709dffdfad08c67a1e6640bf3 100644
--- a/s/Wimp02
+++ b/s/Wimp02
@@ -191,6 +191,15 @@ SWIWimp_Initialise
 initfirsttask
 
         Push    "R0-R3"
+      [ Version >= 394 :LAND: AutoHourglass
+        Push	"R0"
+        BL	pointeron
+        MOV	R0,#1
+        SWI	XHourglass_Start
+        CLRV
+        Pull	"R0"
+        Debug	autohg,"Hourglass_Start at initfirsttask"
+      ]
 ;
         [ true
         LDR     R0,currentmode
@@ -1955,6 +1964,14 @@ closelast
         ADRL    R1,UpCallCode
         BL      release
 ;
+      [ Version >= 394 :LAND: AutoHourglass
+        Push	"R0"
+        SWI	XHourglass_Smash
+        CLRV
+        Pull	"R0"
+        Debug	autohg,"Hourglass_Smash at closelast"
+      ]
+
     [ Version >= 317
         [ mousecache
         MOV     R0,#TickerV             ; tidy the mouse handler
diff --git a/s/Wimp03 b/s/Wimp03
index f7171dad8915def9aa13c554af8e72e1671f51fa..5c6aa84dcd6561a9a9fefce52c7bcb68bfba7f4c 100644
--- a/s/Wimp03
+++ b/s/Wimp03
@@ -290,6 +290,18 @@ SWIWimp_Poll
 
 01
         MyEntry "Poll"
+      [ Version >= 394 :LAND: AutoHourglass
+        Push	"R0"
+        SWI	XHourglass_Off
+        CLRV
+        Pull	"R0"
+      [ debugautohg
+	Push	"handle"
+	LDR	handle,taskhandle
+        Debug	autohg,"Hourglass_Off at Wimp_Poll start, taskhandle =",handle
+        Pull	"handle"
+      ]
+      ]
 ;
 ; remember task number, to allow optimisation of return to caller
 ;
diff --git a/s/Wimp07 b/s/Wimp07
index 13325af568445c3be95eeaa214acb86deee60d4f..c4a8cce84f8c9e3c8152018b647d2ef12ea0ded0 100644
--- a/s/Wimp07
+++ b/s/Wimp07
@@ -821,6 +821,19 @@ SWIWimp_StartTask
 runthetask
         MOV     R1,R0                   ; close down the task !!!
         SWI     Wimp_CloseDown
+      [ Version >= 394 :LAND: AutoHourglass
+        MOV	R0,PC                   ; \
+        AND	R0,R0,#3		;  > just in case we're not in USR mode...
+        EOR	R0,R0,#SVC_mode         ; /
+        SWI	XOS_EnterOS		; because we need a stack
+        Push	"R0"
+        SWI	XHourglass_Off
+        CLRV
+        Pull	"R0"
+        Debug	autohg,"Hourglass_Off at Wimp_StartTask child task entry point"
+        TEQP	R0,PC                   ; return to original processor mode
+        NOP
+      ]
         MOV     R0,R1
         SWI     OS_CLI                  ; R0 --> OS_CLI command
         SWI     OS_Exit                 ; exit back to Wimp
@@ -1102,6 +1115,19 @@ returnerror
         CMP     R0,#-1
         BEQ     repollwimp              ; if it claimed then just re-poll
 01
+      [ Version >= 394 :LAND: AutoHourglass
+        Push	"R0"
+        MOV	R0,#hourglass_delay
+        SWI	XHourglass_Start
+        CLRV
+        Pull	"R0"
+      [ debugautohg
+	Push	"handle"
+	LDR	handle,taskhandle
+        Debug	autohg,"Hourglass_On  at Wimp_Poll end, taskhandle =",handle
+        Pull	"handle"
+      ]
+      ]
         BL      DeletePollTask          ; Delete task from polltask list
 
 ; don't need to do callback if this is the same task