diff --git a/VersionASM b/VersionASM
index 1a5765f2a6cae9c358cadbc674b4236873fd0d5a..328adcd0cae405dad6e1e1a043a0d8090562acdd 100644
--- a/VersionASM
+++ b/VersionASM
@@ -6,9 +6,9 @@
                         GBLS    Module_MinorVersion
                         GBLS    Module_Date
                         GBLS    Module_FullVersion
-Module_MajorVersion     SETS    "4.42"
-Module_Version          SETA    442
+Module_MajorVersion     SETS    "4.43"
+Module_Version          SETA    443
 Module_MinorVersion     SETS    ""
-Module_Date             SETS    "29 Mar 2000"
-Module_FullVersion      SETS    "4.42"
+Module_Date             SETS    "30 Mar 2000"
+Module_FullVersion      SETS    "4.43"
                         END
diff --git a/VersionNum b/VersionNum
index b748ee24add260e55c4e5fb7e61ea41d7878632b..f7524a85c9162e1562538763c7b8653b0aeded13 100644
--- a/VersionNum
+++ b/VersionNum
@@ -1,15 +1,15 @@
-/* (4.42)
+/* (4.43)
  *
  * This file is automatically maintained by srccommit, do not edit manually.
  *
  */
-#define Module_MajorVersion_CMHG        4.42
+#define Module_MajorVersion_CMHG        4.43
 #define Module_MinorVersion_CMHG        
-#define Module_Date_CMHG                29 Mar 2000
+#define Module_Date_CMHG                30 Mar 2000
 
-#define Module_MajorVersion             "4.42"
-#define Module_Version                  442
+#define Module_MajorVersion             "4.43"
+#define Module_Version                  443
 #define Module_MinorVersion             ""
-#define Module_Date                     "29 Mar 2000"
+#define Module_Date                     "30 Mar 2000"
 
-#define Module_FullVersion              "4.42"
+#define Module_FullVersion              "4.43"
diff --git a/s/Iconbar b/s/Iconbar
index db24c02bf6b0de71a3eb39c14f819a85b03caf57..f84d308df13e0f616c1bfc99fcb8e55d8500a5e2 100644
--- a/s/Iconbar
+++ b/s/Iconbar
@@ -274,10 +274,12 @@ createsystemp
         Debug   systmpl,"Loading template to",userblk
 
         BLVC    int_load_template
+        MOVVC   R14, #0                 ; created window will be 'owned' by Wimp
+        STRVC   R14, createwindowtaskhandle
         BLVC    int_create_window       ; R0,handle = window handles (if V clr)
+        MOV     R14, #1                 ; subsequent windows are 'owned' by their creators
+        STR     R14, createwindowtaskhandle
 
-        MOVVC   R14,#0
-        STRVC   R14,[handle,#w_taskhandle]      ; 'owned' by Wimp
         MOVVC   R14,#1
         STRVC   R14,[handle,#w_areaCBptr]       ; use common sprite pool
 98
diff --git a/s/Wimp01 b/s/Wimp01
index ae54436e28550541e8e443499ec9d963307b56ad..c7316be5a708cddfdd7cb623093d9d972e520b76 100644
--- a/s/Wimp01
+++ b/s/Wimp01
@@ -943,6 +943,7 @@ polltaskhandle  #       4               ; task handle on entry to Wimp_Poll
 menutaskhandle  #       4               ; task handle of menu owner
 nulltaskhandle  #       4               ; for cycling null events
 singletaskhandle   #    4               ; single = taskhandle if 1-tasking
+createwindowtaskhandle # 4              ; if <= 0, this is used to fill in w_taskhandle (else current taskhandle is used)
 inithandle      #       4               ; "owner" slot if [freepool] = -1
 taskcount       #       4               ; number of active tasks
 tasknumber      #       4               ; global task number (monotonic)
diff --git a/s/Wimp02 b/s/Wimp02
index 7fd83a3aa1b02a8b60270241fe750eca9a0f916b..dd02dd4a7283a7cec0125553b725d7cd77e65771 100644
--- a/s/Wimp02
+++ b/s/Wimp02
@@ -3617,8 +3617,10 @@ crw5    LDR     R0,[R14],#4
         BLO     crw5
 crw5e
 
-        LDR     R14,taskhandle
-        STR     R14,[handle,#w_taskhandle]
+        LDR     R14, createwindowtaskhandle
+        CMP     R14, #0
+        LDRGT   R14, taskhandle
+        STR     R14, [handle, #w_taskhandle]
 
       [ ChildWindows
         ASSERT  lh_forwards=0 :LAND: lh_indicator=4 :LAND: lh_backwards=8
@@ -3747,7 +3749,7 @@ bodgewindowflags
         LDRNE   R14,[handle,#w_flags]           ; ... cancel all border bits
         BNE     %FT01
 
-        LDR     R14,taskhandle                  ; but only if task doesn't know about Wimp 3.80
+        LDR     R14,[handle,#w_taskhandle]      ; but only if task doesn't know about Wimp 3.80
         CMP     R14,#0
         MOVLE   R14,#380                        ; treat the system task as knowing what to do
         LDRGT   R14,[wsptr,R14]
diff --git a/s/Wimp05 b/s/Wimp05
index fc53d688e886e335c31967d93775b0e21e47cf4e..296af4ca4300ea3283c218e0e5b6c2d748df613b 100644
--- a/s/Wimp05
+++ b/s/Wimp05
@@ -3476,7 +3476,11 @@ int_create_menu_withscroll
 
 createsubmenu TraceL sc
         ADRL    userblk,menuwindow      ; window 'template'
+        MOV     R14, #-1                ; created window will be 'owned' by the Wimp
+        STR     R14, createwindowtaskhandle
         BL      int_create_window
+        MOV     R14, #1                 ; subsequent windows are 'owned' by their creators
+        STR     R14, createwindowtaskhandle
         STRVC   R0,menuhandle
         [       debug :LAND: debugmenuw
         BVS     createsubmenu_continue1
@@ -3486,9 +3490,6 @@ createsubmenu_continue1
         Trace   menuw, "not storing task handle -1 at w_taskhandle of window ", X, R0
 createsubmenu_continue2
         ]
-        MOVVC   R14,#-1                 ; menus have task handle -1
-        BIC     R0, R0, #3 ;make sure R0 is word aligned ; }
-        STRVC   R14, [R0, #w_taskhandle]                 ; } was STRVC   R14, [handle, #w_taskhandle]
 
 exitcrmenu
         Pull    "R1-R4,userblk,PC",VS   ; error