diff --git a/externals/pddp/helplink.c b/externals/pddp/helplink.c
index 1fe93561e8820216a5b711d2d29a1d7a71206c5e..d8a036f84233d8e1e817f9e4ae440f6415c299e5 100644
--- a/externals/pddp/helplink.c
+++ b/externals/pddp/helplink.c
@@ -98,18 +98,22 @@ static void helplink_select(t_gobj *z, t_glist *glist, int state)
     rtext_select(y, state);
     if (glist_isvisible(glist) && glist->gl_havewindow)
     {
-		if (state) {
-			sys_vgui(".x%lx.c itemconfigure %s -fill $::pd_colors(selection)\n",
-				glist, rtext_gettag(y));
-			sys_vgui(".x%lx.c addtag selected withtag %s\n",
-				glist, rtext_gettag(y));
-		} else {
-			sys_vgui(".x%lx.c itemconfigure %s -text {%s} -fill #0000dd -activefill #e70000\n",
-				 glist, rtext_gettag(y), x->x_vistext);
-			sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)glist_getcanvas(glist));
-			sys_vgui(".x%lx.c dtag %s selected\n", glist, rtext_gettag(y));
-		}
-	}
+        if (state) {
+            //sys_vgui(".x%lx.c itemconfigure %s -fill $::pd_colors(selection)\n",
+            //    glist, rtext_gettag(y));
+            //sys_vgui(".x%lx.c addtag selected withtag %s\n",
+            //    glist, rtext_gettag(y));
+            gui_vmess("gui_gobj_select", "xs",
+                glist, rtext_gettag(y));
+        } else {
+            //sys_vgui(".x%lx.c itemconfigure %s -text {%s} -fill #0000dd -activefill #e70000\n",
+            //    glist, rtext_gettag(y), x->x_vistext);
+            //sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)glist_getcanvas(glist));
+            //sys_vgui(".x%lx.c dtag %s selected\n", glist, rtext_gettag(y));
+            gui_vmess("gui_gobj_deselect", "xs",
+                glist, rtext_gettag(y));
+        }
+    }
 }
 
 static void helplink_activate(t_gobj *z, t_glist *glist, int state)
@@ -118,6 +122,13 @@ static void helplink_activate(t_gobj *z, t_glist *glist, int state)
     t_rtext *y = glist_findrtext(glist, (t_text *)x);
     rtext_activate(y, state);
     x->x_rtextactive = state;
+    if (!state) {
+        /* Big workaround... see comment in pddplink.c */
+        t_binbuf *b = binbuf_new();
+        t_binbuf *old = x->x_ob.te_binbuf;
+        x->x_ob.te_binbuf = b;
+        binbuf_free(old);
+    }
 }
 
 static void helplink_vis(t_gobj *z, t_glist *glist, int vis)
@@ -129,16 +140,32 @@ static void helplink_vis(t_gobj *z, t_glist *glist, int vis)
         if ((glist->gl_havewindow || x->x_isgopvisible)
             && (y = glist_findrtext(glist, (t_text *)x)))
         {
+            gui_vmess("gui_text_create_gobj", "xssiii",
+                glist_getcanvas(glist),
+                rtext_gettag(y),
+                "pd_link",
+                text_xpix(&x->x_ob, glist_getcanvas(glist)),
+                text_ypix(&x->x_ob, glist_getcanvas(glist)),
+                glist_istoplevel(glist));
             rtext_draw(y);
-	    sys_vgui(".x%lx.c itemconfigure %s -text {%s} -fill #0000dd -activefill #e70000\n",
-		     glist_getcanvas(glist), rtext_gettag(y), x->x_vistext);
+            gui_vmess("gui_text_set", "xss",
+                glist_getcanvas(glist),
+                rtext_gettag(y),
+                x->x_vistext);
+            //sys_vgui(".x%lx.c itemconfigure %s -text {%s} -fill #0000dd -activefill #e70000\n",
+            //    glist_getcanvas(glist), rtext_gettag(y), x->x_vistext);
         }
     }
     else
     {
         if ((glist->gl_havewindow || x->x_isgopvisible)
 	    && (y = glist_findrtext(glist, (t_text *)x)))
-            rtext_erase(y);
+        {
+            //rtext_erase(y);
+            gui_vmess("gui_gobj_erase", "xs",
+                glist_getcanvas(glist),
+                rtext_gettag(y));
+        }
     }
 }