diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index 4599a7c3528961a45978b1dd7257a43561b6c095..650982b1e98451a9fce0d77bf15853b2afbfe288 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -1171,8 +1171,9 @@ void canvas_initbang(t_canvas *x)
     t_symbol *s = gensym("loadbang");
     /* run "initbang" for all subpatches, but NOT for the child abstractions */
     for (y = x->gl_list; y; y = y->g_next)
-        if (!canvas_isabstraction((t_canvas *)y))
-            canvas_initbang((t_canvas *)y);
+        if (pd_class(&y->g_pd) == canvas_class &&
+            !canvas_isabstraction((t_canvas *)y))
+                canvas_initbang((t_canvas *)y);
 
     /* call the initbang()-method for objects that have one */
     for (y = x->gl_list; y; y = y->g_next)