diff --git a/pd/src/g_all_guis.c b/pd/src/g_all_guis.c
index 84748f1d840e1117d563ae93816de0f3d599488c..4c0c6591b97c9bd00a98c0bf7c064edbcebda05b 100644
--- a/pd/src/g_all_guis.c
+++ b/pd/src/g_all_guis.c
@@ -231,19 +231,15 @@ void iemgui_receive(t_iemgui *x, t_symbol *s)
 
 void iemgui_label(t_iemgui *x, t_symbol *s)
 {
+    t_symbol *old;
     if (s == &s_) s = s_empty; //tb: fix for empty label
+    old = x->x_lab;
     t_symbol *lab = iemgui_raute2dollar(s);
     x->x_lab_unexpanded = lab;
     x->x_lab = lab = canvas_realizedollar(x->x_glist, lab);
 
-    if(glist_isvisible(x->x_glist))
-    {
-        gui_vmess("gui_iemgui_label_set", "xxs",
-            glist_getcanvas(x->x_glist),
-            x,
-            s != s_empty ? x->x_lab->s_name : "");
+    if (glist_isvisible(x->x_glist) && lab != old)
         iemgui_shouldvis(x, IEM_GUI_DRAW_MODE_CONFIG);
-    }
 }
 
 void iemgui_label_pos(t_iemgui *x, t_symbol *s, int ac, t_atom *av)
diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c
index abea628172d14a05e7690a1065069106540dd0da..f759c428c30ce7250aa2cd55bfcc9946fdf98489 100644
--- a/pd/src/g_editor.c
+++ b/pd/src/g_editor.c
@@ -220,6 +220,13 @@ int gobj_shouldvis(t_gobj *x, struct _glist *glist)
     //fprintf(stderr,"shouldvis %d %d %d %d\n",
     //    glist->gl_havewindow, glist->gl_isgraph,
     //    glist->gl_goprect, glist->gl_owner != NULL);
+        /* if our parent is a graph, and if that graph itself isn't
+        visible, then we aren't either. */
+    if (!glist->gl_havewindow && glist->gl_isgraph && glist->gl_owner
+        && !gobj_shouldvis(&glist->gl_gobj, glist->gl_owner))
+            return (0);
+        /* if we're graphing-on-parent and the object falls outside the
+        graph rectangle, don't draw it. */
     if (!glist->gl_havewindow && glist->gl_isgraph && glist->gl_goprect &&
         glist->gl_owner && (pd_class(&x->g_pd) != scalar_class) &&
         (pd_class(&x->g_pd) != garray_class))
@@ -2880,7 +2887,7 @@ static void canvas_donecanvasdialog(t_glist *x,
     {
         glist_noselect(x);
         gobj_vis(&x->gl_gobj, x->gl_owner, 0);
-        if (gobj_shouldvis(&x->gl_obj, x->gl_owner))
+        if (gobj_shouldvis(&x->gl_gobj, x->gl_owner))
         {
             gobj_vis(&x->gl_gobj, x->gl_owner, 1);
             //fprintf(stderr,"yes\n");