diff --git a/pd/src/g_all_guis.c b/pd/src/g_all_guis.c
index 0d1b1ccaabfeae0c3d4c0f67265cfc1b96d0816b..4a9a926c03e0d663feabeed4529bba4fd8941624 100644
--- a/pd/src/g_all_guis.c
+++ b/pd/src/g_all_guis.c
@@ -177,6 +177,7 @@ void iemgui_all_raute2dollar(t_symbol **srlsym)
 void iemgui_send(t_iemgui *x, t_symbol *s)
 {
     t_symbol *snd;
+    if (s == &s_) s = s_empty; //tb: fix for empty label
     int oldsndrcvable=0;
     if(iemgui_has_rcv(x)) oldsndrcvable += IEM_GUI_OLD_RCV_FLAG;
     if(iemgui_has_snd(x)) oldsndrcvable += IEM_GUI_OLD_SND_FLAG;
@@ -191,6 +192,7 @@ void iemgui_send(t_iemgui *x, t_symbol *s)
 void iemgui_receive(t_iemgui *x, t_symbol *s)
 {
     t_symbol *rcv;
+    if (s == &s_) s = s_empty; //tb: fix for empty label
     int oldsndrcvable=0;
     if(iemgui_has_rcv(x)) oldsndrcvable += IEM_GUI_OLD_RCV_FLAG;
     if(iemgui_has_snd(x)) oldsndrcvable += IEM_GUI_OLD_SND_FLAG;
@@ -198,7 +200,7 @@ void iemgui_receive(t_iemgui *x, t_symbol *s)
     rcv = iemgui_raute2dollar(s);
     x->x_rcv_unexpanded = rcv;
     rcv = canvas_realizedollar(x->x_glist, rcv);
-    if(iemgui_has_rcv(x))
+    if(s!=s_empty)
     {
         if(rcv!=x->x_rcv)
         {
@@ -208,7 +210,7 @@ void iemgui_receive(t_iemgui *x, t_symbol *s)
             pd_bind((t_pd *)x, x->x_rcv);
         }
     }
-    else if(s!=s_empty && iemgui_has_rcv(x))
+    else if(s==s_empty && iemgui_has_rcv(x))
     {
         pd_unbind((t_pd *)x, x->x_rcv);
         x->x_rcv = rcv;
@@ -429,6 +431,7 @@ void iemgui_shouldvis(t_iemgui *x, int mode)
     {
         //fprintf(stderr,"draw erase %d\n", mode);
         iemgui_draw_erase(x, x->x_glist);
+        x->x_vis = 0;
     }
     gop_redraw = 0;
 }
@@ -697,7 +700,6 @@ void scalehandle_draw_erase(t_scalehandle *h, t_glist *canvas) {
     if (!h->h_vis) return;
     sys_vgui("destroy %s\n", h->h_pathname);
     sys_vgui(".x%lx.c delete %lx%s\n", canvas, h->h_master, h->h_scale ? "SCALE" : "LABELH");
-    h->h_vis = 0;
 }
 
 void scalehandle_draw_erase2(t_iemgui *x, t_glist *canvas) {
@@ -998,7 +1000,6 @@ void iemgui_draw_erase(t_iemgui *x, t_glist *glist) {
     t_canvas *canvas=glist_getcanvas(glist);
     sys_vgui(".x%lx.c delete x%lx\n", canvas, x);
     scalehandle_draw_erase2(x,glist);
-    x->x_vis = 0;
 }
 
 void scrollbar_update(t_glist *glist) {