diff --git a/pd/src/g_canvas.c b/pd/src/g_canvas.c
index 650982b1e98451a9fce0d77bf15853b2afbfe288..0ece98d49e1df80200cb61c1ae6b996dae07d586 100644
--- a/pd/src/g_canvas.c
+++ b/pd/src/g_canvas.c
@@ -690,7 +690,7 @@ void canvas_dirty(t_canvas *x, t_floatarg n)
     if ((unsigned)n != x2->gl_dirty)
     {
         x2->gl_dirty = n;
-        if (x2->gl_havewindow) // was glist_isvisible(x2)
+        if (x2->gl_havewindow && glist_isvisible(x2))
             canvas_reflecttitle(x2);
     }
 }
diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c
index 77b649787034817afe610f2aada234ad9bebfd2f..7d11efdc6eca0e0d76f9a47cd2f5a17316b6d3dd 100644
--- a/pd/src/g_editor.c
+++ b/pd/src/g_editor.c
@@ -7230,7 +7230,8 @@ void canvas_editmode(t_canvas *x, t_floatarg fyesplease)
             //dpsaha@vt.edu called to delete the GOP_blob
             if (x->gl_goprect)        canvas_draw_gop_resize_hooks(x);
         }
-        canvas_setcursor(x, CURSOR_RUNMODE_NOTHING);
+        if (glist_isvisible(x))
+            canvas_setcursor(x, CURSOR_RUNMODE_NOTHING);
     }
     if (glist_isvisible(x))
     {
diff --git a/pd/src/g_graph.c b/pd/src/g_graph.c
index eee928cd545af488ed5b780d8fc3899d68f643f3..b5a7bfde5c63e90ef7076f08873bbf31bf2ed446 100644
--- a/pd/src/g_graph.c
+++ b/pd/src/g_graph.c
@@ -1426,7 +1426,9 @@ static void graph_select(t_gobj *z, t_glist *glist, int state)
         {
             canvas = glist;
         }
-        if(glist_istoplevel(glist))
+        if (glist_isvisible(glist) &&
+                (glist_istoplevel(glist) ||
+                 gobj_shouldvis(x, glist)))
         {
             if (state)
                 gui_vmess("gui_gobj_select", "xs",
diff --git a/pd/src/g_scalar.c b/pd/src/g_scalar.c
index fa4764c2a838a0b0f4e0c7a58af9562f7b330afd..28b7b3c993188f6d97a7148189944ebe28d7a892 100644
--- a/pd/src/g_scalar.c
+++ b/pd/src/g_scalar.c
@@ -606,14 +606,16 @@ void scalar_select(t_gobj *z, t_glist *owner, int state)
     if (state)
     {
         x->sc_selected = owner;
-        gui_vmess("gui_gobj_select", "xs",
-            glist_getcanvas(owner), tagbuf);
+        if (glist_isvisible(owner))
+            gui_vmess("gui_gobj_select", "xs",
+                glist_getcanvas(owner), tagbuf);
     }
     else
     {
         x->sc_selected = 0;
-        gui_vmess("gui_gobj_deselect", "xs",
-            glist_getcanvas(owner), tagbuf);
+        if (glist_isvisible(owner))
+            gui_vmess("gui_gobj_deselect", "xs",
+                glist_getcanvas(owner), tagbuf);
     }
     //sys_vgui("pdtk_select_all_gop_widgets .x%lx %lx %d\n",
     //    glist_getcanvas(owner), owner, state);