diff --git a/externals/footils/knob/knob.c b/externals/footils/knob/knob.c
index 1916ca4a589278e0c12151a669aaa22819f65d1a..b3c0c2ca10818ee367cfbf3c618d1f45b27ce360 100644
--- a/externals/footils/knob/knob.c
+++ b/externals/footils/knob/knob.c
@@ -606,17 +606,11 @@ static void knob_steady(t_knob *x, t_floatarg f)
     x->x_steady = (f==0.0)?0:1;
 }
 
-static void knob_loadbang(t_knob *x)
+#define LB_LOAD 0 /* from g_canvas.h */
+
+static void knob_loadbang(t_knob *x, t_floatarg action)
 {
-  /* WARNING: this is a kludge to get this object building on
-     Windows. Currently, the linker fails on the symbol
-     "sys_noloadbang".  <hans@at.or.at>
-   */
-#ifdef _WIN32
-    if(x->x_gui.x_isa.x_loadinit)
-#else
-    if(!sys_noloadbang && x->x_gui.x_isa.x_loadinit)
-#endif
+    if (action == LB_LOAD && x->x_gui.x_isa.x_loadinit)
     {
 	(*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
 	knob_bang(x);
@@ -756,7 +750,8 @@ void knob_setup(void)
 		    A_FLOAT, A_FLOAT, 0);
     class_addmethod(knob_class, (t_method)knob_dialog, gensym("dialog"),
 		    A_GIMME, 0);
-    class_addmethod(knob_class, (t_method)knob_loadbang, gensym("loadbang"), 0);
+    class_addmethod(knob_class, (t_method)knob_loadbang, gensym("loadbang"),
+        A_DEFFLOAT, 0);
     class_addmethod(knob_class, (t_method)knob_set, gensym("set"), A_FLOAT, 0);
     class_addmethod(knob_class, (t_method)knob_size, gensym("size"), A_GIMME, 0);
     class_addmethod(knob_class, (t_method)knob_delta, gensym("delta"), A_GIMME, 0);
diff --git a/externals/iem/iemgui/src/sym_dial.c b/externals/iem/iemgui/src/sym_dial.c
index 132f6b03d2b941e71f05c18e2c38efd9cd1a3e27..c24e95c2d44f6208c5683779b1c1496a42680d2d 100644
--- a/externals/iem/iemgui/src/sym_dial.c
+++ b/externals/iem/iemgui/src/sym_dial.c
@@ -570,9 +570,11 @@ static void sym_dial_init(t_sym_dial *x, t_floatarg f)
   x->x_gui.x_isa.x_loadinit = (f==0.0)?0:1;
 }
 
-static void sym_dial_loadbang(t_sym_dial *x)
+#define LB_LOAD 0 /* from g_canvas.h */
+
+static void sym_dial_loadbang(t_sym_dial *x, t_floatarg action)
 {
-  if(!sys_noloadbang && x->x_gui.x_isa.x_loadinit)
+  if (action == LB_LOAD && x->x_gui.x_isa.x_loadinit)
   {
     (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
     sym_dial_bang(x);
@@ -919,7 +921,8 @@ void sym_dial_setup(void)
     A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, A_FLOAT, 0);
   class_addmethod(sym_dial_class, (t_method)sym_dial_dialog, gensym("dialog"),
     A_GIMME, 0);
-  class_addmethod(sym_dial_class, (t_method)sym_dial_loadbang, gensym("loadbang"), 0);
+  class_addmethod(sym_dial_class, (t_method)sym_dial_loadbang,
+    gensym("loadbang"), A_DEFFLOAT, 0);
   class_addmethod(sym_dial_class, (t_method)sym_dial_set, gensym("set"), A_GIMME, 0);
   class_addmethod(sym_dial_class, (t_method)sym_dial_size, gensym("size"), A_GIMME, 0);
   class_addmethod(sym_dial_class, (t_method)sym_dial_delta, gensym("delta"), A_GIMME, 0);
diff --git a/externals/iem/iemxmlrpc/main.cpp b/externals/iem/iemxmlrpc/main.cpp
index 0faf8a2498956bfd4a78511a3fe97dca7bfd8422..56af50cfa9179b7f3160be116c3885fd0b9fcaa3 100644
--- a/externals/iem/iemxmlrpc/main.cpp
+++ b/externals/iem/iemxmlrpc/main.cpp
@@ -472,7 +472,7 @@ void RPCServer::Method_Load(XmlRpc::XmlRpcValue &params, XmlRpc::XmlRpcValue &re
         pd_vmess(x, gensym("pop"), "i", 1);
 
         // issue load bang
-        pd_vmess(x, gensym("loadbang"), "");
+        pd_vmess(x, gensym("loadbang"), "f", 0);
 
         // save created canvas object
         canvas = x;
diff --git a/externals/iemlib/iemlib2/src/init.c b/externals/iemlib/iemlib2/src/init.c
index 58e66df8e6d8cd7354344ca3c6d170dd52c3e222..70fb99959ccb269fc238f05d28fee786cb3ce4b3 100644
--- a/externals/iemlib/iemlib2/src/init.c
+++ b/externals/iemlib/iemlib2/src/init.c
@@ -38,9 +38,11 @@ static void init_bang(t_init *x)
     outlet_pointer(x->x_obj.ob_outlet, (t_gpointer *)x->x_at->a_w.w_gpointer);
 }
 
-static void init_loadbang(t_init *x)
+#define LB_LOAD 0 /* from g_canvas.h */
+
+static void init_loadbang(t_init *x, t_floatarg action)
 {
-  if(!sys_noloadbang)
+  if (action == LB_LOAD)
     init_bang(x);
 }
 
@@ -185,7 +187,8 @@ void init_setup(void)
   init_class = class_new(gensym("init"), (t_newmethod)init_new,
     (t_method)init_free, sizeof(t_init), 0, A_GIMME, 0);
   class_addcreator((t_newmethod)init_new, gensym("ii"), A_GIMME, 0);
-  class_addmethod(init_class, (t_method)init_loadbang, gensym("loadbang"), 0);
+  class_addmethod(init_class, (t_method)init_loadbang, gensym("loadbang"),
+    A_DEFFLOAT, 0);
   class_addbang(init_class, (t_method)init_bang);
   class_addanything(init_class, init_anything);
   class_addlist(init_class, init_list);
diff --git a/externals/miXed/cyclone/hammer/loadmess.c b/externals/miXed/cyclone/hammer/loadmess.c
index 87bbf30bb667870641a3bf60ef93c3f8c22ea788..2f387f098b6c01a5a12a1bfa022e2d47bcf2c376 100644
--- a/externals/miXed/cyclone/hammer/loadmess.c
+++ b/externals/miXed/cyclone/hammer/loadmess.c
@@ -55,10 +55,12 @@ static void loadmess_bang(t_loadmess *x)
     outlet_pointer(x->x_obj.ob_outlet, (t_gpointer *)x->x_at->a_w.w_gpointer);
 }
 
-static void loadmess_loadbang(t_loadmess *x)
+#define LB_LOAD 0 /* from g_canvas.h */
+
+static void loadmess_loadbang(t_loadmess *x, t_floatarg action)
 {
-  if(!sys_noloadbang) {
-    if(!x->defer)
+  if (action == LB_LOAD) {
+    if (!x->defer)
       loadmess_bang(x);
     else clock_delay(x->x_clock, x->defer);
   }
@@ -238,7 +240,8 @@ void loadmess_setup(void)
 {
   loadmess_class = class_new(gensym("loadmess"), (t_newmethod)loadmess_new,
 			     (t_method)loadmess_free, sizeof(t_loadmess), 0, A_GIMME, 0);
-  class_addmethod(loadmess_class, (t_method)loadmess_loadbang, gensym("loadbang"), 0);
+  class_addmethod(loadmess_class, (t_method)loadmess_loadbang,
+    gensym("loadbang"), A_DEFFLOAT, 0);
   class_addmethod(loadmess_class, (t_method)loadmess_set, gensym("set"),A_GIMME,0);
   class_addbang(loadmess_class, (t_method)loadmess_bang);
   class_addmethod(loadmess_class, (t_method)loadmess_click, gensym("click"),
diff --git a/externals/moonlib/gamme.c b/externals/moonlib/gamme.c
index 3df8d524f7bc6194b1627fb889ccd2d01cc036e9..afd73c76dfce36ddd4c8c78f7d677ae7deb4dc61 100644
--- a/externals/moonlib/gamme.c
+++ b/externals/moonlib/gamme.c
@@ -456,12 +456,13 @@ void gamme_getall(t_gamme *x)
     gamme_getn(x);
 }
 
-extern int sys_noloadbang;
-static void gamme_loadbang(t_gamme *x)
+#define LB_LOAD 0 /* from g_canvas.h */
+
+static void gamme_loadbang(t_gamme *x, t_floatarg action)
 {
     int i;
 
-    if(sys_noloadbang) return;
+    if (action != LB_LOAD) return;
     for(i=0; i<12; i++) gamme_out_changed(x,i);
     gamme_getn(x);
 }
diff --git a/externals/moonlib/mknob.c b/externals/moonlib/mknob.c
index df5dfcca9bbd036c3de169bde9dc2f85dc002628..bbba8d7ae3f5ba95e45c49f1f130b72f0a370536 100644
--- a/externals/moonlib/mknob.c
+++ b/externals/moonlib/mknob.c
@@ -574,9 +574,11 @@ static void mknob_float(t_mknob *x, t_floatarg f)
     }
 }
 
-static void mknob_loadbang(t_mknob *x)
+#define LB_LOAD 0 /* from g_canvas.h */
+
+static void mknob_loadbang(t_mknob *x, t_floatarg action)
 {
-    if (!sys_noloadbang && x->x_gui.x_loadinit)
+    if (action == LB_LOAD && x->x_gui.x_loadinit)
     {
         (*x->x_gui.x_draw)(x, x->x_gui.x_glist, IEM_GUI_DRAW_MODE_UPDATE);
         mknob_bang(x);
@@ -781,7 +783,8 @@ void mknob_setup(void)
     class_addmethod(mknob_class, (t_method)mknob_motion, gensym("motion"),
                     A_FLOAT, A_FLOAT, 0);
     class_addmethod(mknob_class, (t_method)mknob_dialog, gensym("dialog"), A_GIMME, 0);
-    class_addmethod(mknob_class, (t_method)mknob_loadbang, gensym("loadbang"), 0);
+    class_addmethod(mknob_class, (t_method)mknob_loadbang, gensym("loadbang"),
+        A_DEFFLOAT, 0);
     class_addmethod(mknob_class, (t_method)mknob_set, gensym("set"), A_FLOAT, 0);
     class_addmethod(mknob_class, (t_method)mknob_size, gensym("size"), A_GIMME, 0);
     class_addmethod(mknob_class, (t_method)mknob_delta, gensym("delta"), A_GIMME, 0);
diff --git a/externals/olafmatt/clone/clone.c b/externals/olafmatt/clone/clone.c
index d7b0d1f02f53ba1e8b2152ad4ac6f0e5323066d6..0b4dd30ce8429e763f81b61a31c9641c549f9096 100644
--- a/externals/olafmatt/clone/clone.c
+++ b/externals/olafmatt/clone/clone.c
@@ -180,17 +180,22 @@ static void clone_instance_init(t_clone *x, t_cloneelement *ep, t_pd *y, int ins
     }
 }
 
+#define LB_LOAD 0 /* from g_canvas.h */
+
 	/* send loadbang to all instances */
-static void clone_loadbang(t_clone *x)
+static void clone_loadbang(t_clone *x, t_floatarg action)
 {
 	t_canvas *cv;
 	int i;
 
-	for (i = 0; i < x->x_nelems; i++)
-	{
-		if (cv = x->x_table[i].e_ab)
-			pd_vmess(&cv->gl_pd, gensym("loadbang"), "");
-	}
+        if (action == LB_LOAD)
+        {
+            for (i = 0; i < x->x_nelems; i++)
+            {
+                if (cv = x->x_table[i].e_ab)
+                    pd_vmess(&cv->gl_pd, gensym("loadbang"), "f", 0);
+            }
+        }
 }
 
 	/* the two below borrow from binbuf_evalfile() -- which may change... */
@@ -215,7 +220,7 @@ static void clone_instantiate_all(t_clone *x)
 			canvas_setargs(0, 0);
 		}
 		canvas_resume_dsp(dspstate);
-		clone_loadbang(x);
+		clone_loadbang(x, 0);
     }
 }
 
diff --git a/externals/pmpd/mass.c b/externals/pmpd/mass.c
index de1a3315afb55e812b690dd496bffa7bee3d7bb8..84e9d2d50b4fc77122e9022a6e3410f875f4c44f 100644
--- a/externals/pmpd/mass.c
+++ b/externals/pmpd/mass.c
@@ -119,9 +119,11 @@ void mass_setX(t_mass *x, t_float posX)
   outlet_float(x->position_new, posX);
 }
 
-void mass_loadbang(t_mass *x)
+#define LB_LOAD 0 /* from g_canvas.h */
+
+void mass_loadbang(t_mass *x, t_floatarg action)
 {
-  outlet_float(x->position_new, x->Xinit);
+  if (action == LB_LOAD) outlet_float(x->position_new, x->Xinit);
 }
 
 void mass_set_mass(t_mass *x, t_float mass)
@@ -181,6 +183,6 @@ void mass_setup(void)
   class_addmethod(mass_class, (t_method)mass_resetF, gensym("resetF"), 0);
   class_addmethod(mass_class, (t_method)mass_minX, gensym("setXmin"), A_DEFFLOAT, 0);
   class_addmethod(mass_class, (t_method)mass_maxX, gensym("setXmax"), A_DEFFLOAT, 0);
-  class_addmethod(mass_class, (t_method)mass_loadbang, gensym("loadbang"), 0);
+  class_addmethod(mass_class, (t_method)mass_loadbang, gensym("loadbang"), A_DEFFLOAT, 0);
 }
 
diff --git a/externals/pmpd/mass2D.c b/externals/pmpd/mass2D.c
index 16bb2aec695c167103b1eb53e041fd6137df294a..e5bb64f573db1e9b2f7dded9422da62a3d3b70e1 100644
--- a/externals/pmpd/mass2D.c
+++ b/externals/pmpd/mass2D.c
@@ -286,9 +286,12 @@ void mass2D_setY(t_mass2D *x, t_float posY)
   outlet_anything(x->position2D_new, gensym("position2D"), 2, x->pos_new);
 }
 
-void mass2D_loadbang(t_mass2D *x)
+#define LB_LOAD 0 /* from g_canvas.h */
+
+void mass2D_loadbang(t_mass2D *x, t_floatarg action)
 {
-  outlet_anything(x->position2D_new, gensym("position2D"), 2, x->pos_new);
+  if (action == LB_LOAD)
+    outlet_anything(x->position2D_new, gensym("position2D"), 2, x->pos_new);
 }
 
 
@@ -806,6 +809,6 @@ void mass2D_setup(void)
   class_addmethod(mass2D_class, (t_method)mass2D_off, gensym("off"), 0);
   class_addmethod(mass2D_class, (t_method)mass2D_reset, gensym("reset"), 0);
   class_addmethod(mass2D_class, (t_method)mass2D_resetf, gensym("resetF"), 0);
-  class_addmethod(mass2D_class, (t_method)mass2D_loadbang, gensym("loadbang"), 0);
+  class_addmethod(mass2D_class, (t_method)mass2D_loadbang, gensym("loadbang"), A_DEFFLOAT, 0);
 
 }
diff --git a/externals/pmpd/mass3D.c b/externals/pmpd/mass3D.c
index f480abadef1af51be4f25e82f99d063c7e864df6..dd4686810383509868ce86aeb3dd935075b1dced 100644
--- a/externals/pmpd/mass3D.c
+++ b/externals/pmpd/mass3D.c
@@ -94,9 +94,12 @@ void mass3D_damp(t_mass3D *x, t_floatarg f1)
   x->damp = f1;
 }
 
-void mass3D_loadbang(t_mass3D *x)
+#define LB_LOAD 0 /* from g_canvas.h */
+
+void mass3D_loadbang(t_mass3D *x, t_floatarg action)
 {
-  outlet_anything(x->position3D_new, gensym("position3D"), 3, x->pos_new);
+  if (action == LB_LOAD)
+    outlet_anything(x->position3D_new, gensym("position3D"), 3, x->pos_new);
 }
 
 void mass3D_setX(t_mass3D *x, t_float posX)
@@ -1079,7 +1082,7 @@ void mass3D_setup(void)
   class_addmethod(mass3D_class, (t_method)mass3D_set_mass3D, gensym("setM"), A_DEFFLOAT, 0);
   class_addmethod(mass3D_class, (t_method)mass3D_reset, gensym("reset"), 0);
   class_addmethod(mass3D_class, (t_method)mass3D_resetf, gensym("resetF"), 0);
-  class_addmethod(mass3D_class, (t_method)mass3D_reset, gensym("loadbang"), 0);
+  class_addmethod(mass3D_class, (t_method)mass3D_reset, gensym("loadbang"), A_DEFFLOAT, 0);
   class_addmethod(mass3D_class, (t_method)mass3D_on, gensym("on"), 0);
   class_addmethod(mass3D_class, (t_method)mass3D_off, gensym("off"), 0);
   class_addmethod(mass3D_class, (t_method)mass3D_seuil, gensym("setT"), A_DEFFLOAT, 0);
diff --git a/externals/tof/src/argument.c b/externals/tof/src/argument.c
index 91a1f40f535e77b67898aab52698c245dff3978f..219ee3381d629d8662b30f5700a1ede409135ddb 100644
--- a/externals/tof/src/argument.c
+++ b/externals/tof/src/argument.c
@@ -48,11 +48,11 @@ static void argument_bang(t_argument *x)
 
 }
 
+#define LB_LOAD 0 /* from g_canvas.h */
 
-
-static void argument_loadbang(t_argument *x)
+static void argument_loadbang(t_argument *x, t_floatarg action)
 {
-   // if (!sys_noloadbang)
+   // if (action == LB_LOAD)
    //     argument_bang(x);
 }
 
@@ -125,7 +125,7 @@ void argument_setup(void)
     class_addbang(argument_class, argument_bang);
    
    
-   //class_addmethod(argument_class, (t_method)argument_loadbang, gensym("loadbang"), 0);
+   //class_addmethod(argument_class, (t_method)argument_loadbang, gensym("loadbang"), A_DEFFLOAT, 0);
    
 }
 
diff --git a/externals/tof/src/param.c b/externals/tof/src/param.c
index 733f40fee26e2b5e3c734372d00cce600cba4a3b..008b96feab68f2d57998fb84d82ac4686f6751a0 100644
--- a/externals/tof/src/param.c
+++ b/externals/tof/src/param.c
@@ -57,8 +57,8 @@ static t_symbol* s_cnv;
 #include "paramRoute.h"
 #include "paramGui.h"
 
-// For loadbang
-extern int sys_noloadbang;
+// For loadbang, from g_canvas.h
+#define LB_LOAD 0
 
 static t_class *param_class;
 static t_class *param_inlet2_class;
@@ -99,9 +99,9 @@ static void paramClass_bang(t_paramClass *x)
    
 }
 
-static void paramClass_loadbang(t_paramClass *x)
+static void paramClass_loadbang(t_paramClass *x, t_floatarg action)
 {
-    if (!sys_noloadbang && !x->noloadbang)
+    if (action == LB_LOAD && !x->noloadbang)
         paramClass_bang(x);
 }
 
@@ -389,7 +389,7 @@ void param_setup(void)
   class_addanything(param_class, paramClass_anything);
   class_addbang(param_class, paramClass_bang);
   
-  class_addmethod(param_class, (t_method)paramClass_loadbang, gensym("loadbang"), 0);
+  class_addmethod(param_class, (t_method)paramClass_loadbang, gensym("loadbang"), A_DEFFLOAT, 0);
   
   param_inlet2_class = class_new(gensym("_param_inlet2"),
     0, 0, sizeof(t_paramClass_inlet2), CLASS_PD | CLASS_NOINLET, 0);
diff --git a/externals/tof/src/paramCustom.h b/externals/tof/src/paramCustom.h
index df3eba1797c7bca262a18d0603209125a3b8152a..645c765974c267bc6c352976326f602fe2234b9e 100644
--- a/externals/tof/src/paramCustom.h
+++ b/externals/tof/src/paramCustom.h
@@ -185,7 +185,7 @@ void paramCustom_setup(void)
   class_addanything(paramCustom_class, paramCustom_anything);
   //class_addbang(paramCustom_class, paramCustom_bang);
   
-  //class_addmethod(param_class, (t_method)paramClass_loadbang, gensym("loadbang"), 0);
+  //class_addmethod(param_class, (t_method)paramClass_loadbang, gensym("loadbang"), A_DEFFLOAT, 0);
   
   paramCustom_receive_class = class_new(gensym("paramCustom_receive"),
     0, 0, sizeof(t_paramCustom_receive), CLASS_PD | CLASS_NOINLET, 0);
diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js
index f60f21bbbaa03b585d625b5b4afed729bd92ebe2..ba65943b2ce77248ac5710b41a40d4a5e9db949e 100644
--- a/pd/nw/pdgui.js
+++ b/pd/nw/pdgui.js
@@ -3914,13 +3914,18 @@ function gui_configure_mknob(cid, tag, size, bg_color, fg_color) {
 }
 
 function gui_turn_mknob(cid, tag, x1, y1, x2, y2) {
-    var g = get_gobj(cid, tag);
-    configure_item(g.querySelector(".dial"), {
-        x1: x1,
-        y1: y1,
-        x2: x2,
-        y2: y2
-    });
+    var g;
+    if (patchwin[cid]) {
+        g = get_gobj(cid, tag);
+        if (g) {
+            configure_item(g.querySelector(".dial"), {
+                x1: x1,
+                y1: y1,
+                x2: x2,
+                y2: y2
+            });
+        }
+    }
 }
 
 function add_popup(cid, popup) {