diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index 82c9974405452351fc733a3ae9aa055d1499ce0f..63c541de1724862f92fc9eac375ef9defbe9e173 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -1059,47 +1059,59 @@ void canvas_restore(t_canvas *x, t_symbol *s, int argc, t_atom *argv)
     }
 }
 
-static void canvas_loadbangabstractions(t_canvas *x, t_symbol *s)
+void canvas_loadbangsubpatches(t_canvas *x, t_symbol *s)
 {
     t_gobj *y;
     //t_symbol *s = gensym("loadbang");
     for (y = x->gl_list; y; y = y->g_next)
         if (pd_class(&y->g_pd) == canvas_class)
     {
-        if (canvas_isabstraction((t_canvas *)y))
-            canvas_loadbang((t_canvas *)y);
-        else
-            canvas_loadbangabstractions((t_canvas *)y, s);
+        if (!canvas_isabstraction((t_canvas *)y)) {
+			//fprintf(stderr,"%lx s:canvas_loadbangsubpatches %s\n",x,s->s_name);
+            canvas_loadbangsubpatches((t_canvas *)y, s);
+		}
     }
+    for (y = x->gl_list; y; y = y->g_next)
+        if ((pd_class(&y->g_pd) != canvas_class) &&
+            zgetfn(&y->g_pd, s)) {
+				//fprintf(stderr,"%lx s:obj_loadbang %s\n",x,s->s_name);
+                pd_vmess(&y->g_pd, s, "");
+		}
 }
 
-void canvas_loadbangsubpatches(t_canvas *x, t_symbol *s)
+static void canvas_loadbangabstractions(t_canvas *x, t_symbol *s)
 {
     t_gobj *y;
     //t_symbol *s = gensym("loadbang");
     for (y = x->gl_list; y; y = y->g_next)
         if (pd_class(&y->g_pd) == canvas_class)
     {
-        if (!canvas_isabstraction((t_canvas *)y))
-            canvas_loadbangsubpatches((t_canvas *)y, s);
+        if (canvas_isabstraction((t_canvas *)y)) {
+			//fprintf(stderr,"%lx a:canvas_loadbang %s\n",x,s->s_name);
+            canvas_loadbangabstractions((t_canvas *)y, s);
+    		canvas_loadbangsubpatches((t_canvas *)y, s);
+		}
+        else {
+			//fprintf(stderr,"%lx a:canvas_loadbangabstractions %s\n",x,s->s_name);
+            canvas_loadbangabstractions((t_canvas *)y, s);
+		}
     }
-    for (y = x->gl_list; y; y = y->g_next)
-        if ((pd_class(&y->g_pd) != canvas_class) &&
-            zgetfn(&y->g_pd, s))
-                pd_vmess(&y->g_pd, s, "");
 }
 
 void canvas_loadbang(t_canvas *x)
 {
     //t_gobj *y;
 	// first loadbang preset hubs and nodes
+	//fprintf(stderr,"%lx 0\n", x);
     canvas_loadbangabstractions(x, gensym("pre-loadbang"));
     canvas_loadbangsubpatches(x, gensym("pre-loadbang"));
-
+	//fprintf(stderr,"%lx 1\n", x);
 	// then do the regular loadbang
     canvas_loadbangabstractions(x, gensym("loadbang"));
     canvas_loadbangsubpatches(x, gensym("loadbang"));
+	//fprintf(stderr,"%lx 2\n", x);
 }
+
 /* JMZ:
  * initbang is emitted after the canvas is done, but before the parent canvas is done
  * therefore, initbangs cannot reach to the outlets