diff --git a/pd/src/g_template.c b/pd/src/g_template.c
index bf4e8055d4869af242c7c30572f9fcff47c284c9..9833b27b7c1e206c67bfed4efde635558ffc37e6 100644
--- a/pd/src/g_template.c
+++ b/pd/src/g_template.c
@@ -6577,25 +6577,52 @@ static void drawsymbol_vis(t_gobj *z, t_glist *glist, t_glist *parentglist,
         else SETFLOAT(&at, fielddesc_getfloat(&x->x_value, template, data, 0));
         drawsymbol_sprintf(x, buf, &at);
 
-        sys_vgui(".x%lx.c create ptext %d "
-                 "[expr {[font metrics {{%s} %d} -ascent] + %d}] "
-                 "-textanchor start -fill %s -text {%s}\\\n",
-                glist_getcanvas(glist), xloc, sys_font,
-                sys_hostfontsize(fontsize), yloc, colorstring, buf);
-        sys_vgui(" -fontfamily {%s} -fontsize %d ", sys_font, fontsize);
-        sys_vgui(" -matrix { {%g 0} {0 %g} {0 0} }", xscale, yscale);
+        //sys_vgui(".x%lx.c create ptext %d "
+        //         "[expr {[font metrics {{%s} %d} -ascent] + %d}] "
+        //         "-textanchor start -fill %s -text {%s}\\\n",
+        //        glist_getcanvas(glist), xloc, sys_font,
+        //        sys_hostfontsize(fontsize), yloc, colorstring, buf);
+        //sys_vgui(" -fontfamily {%s} -fontsize %d ", sys_font, fontsize);
+        //sys_vgui(" -matrix { {%g 0} {0 %g} {0 0} }", xscale, yscale);
 
+        char parent_tagbuf[MAXPDSTRING];
         if (in_array)
-            sys_vgui(" -parent .scelem%lx.%lx \\\n", parentglist, data);
+        {
+            //sys_vgui(" -parent .scelem%lx.%lx \\\n", parentglist, data);
+            sprintf(parent_tagbuf, "scelem%lx.%lx", (long unsigned int)parentglist, (long unsigned int)data);
+        }
         else
-            sys_vgui(" -parent .dgroup%lx.%lx \\\n",
-                x->x_canvas, data);
+        {
+            //sys_vgui(" -parent .dgroup%lx.%lx \\\n",
+            //    x->x_canvas, data);
+            sprintf(parent_tagbuf, "dgroup%lx.%lx", (long unsigned int)x->x_canvas, (long unsigned int)data);
+        }
+        char tagbuf[MAXPDSTRING];
+        //sys_vgui(" -tags {.x%lx.x%lx.template%lx scalar%lx}\n", 
+        //    glist_getcanvas(glist), glist, data, sc);
+        sprintf(tagbuf, "drawnumber%lx.%lx", (long unsigned int)x, (long unsigned int)data);
 
-        sys_vgui(" -tags {.x%lx.x%lx.template%lx scalar%lx}\n", 
-            glist_getcanvas(glist), glist, data, sc);
+        gui_vmess("gui_drawnumber_vis", "xssiiffsis",
+            glist_getcanvas(glist),
+            parent_tagbuf,
+            tagbuf,
+            xloc,
+            yloc, // Wrong-- we need to take font height into account
+            xscale,
+            yscale,
+            sys_font,
+            fontsize,
+            buf);
+    }
+    else
+    {
+        //sys_vgui(".x%lx.c delete .x%lx.x%lx.template%lx\n",
+        //    glist_getcanvas(glist), glist_getcanvas(glist), glist, data);
+        char tagbuf[MAXPDSTRING];
+        sprintf(tagbuf, "drawnumber%lx.%lx", (long unsigned int)x, (long unsigned int)data);
+        gui_vmess("gui_draw_erase_item", "xs", glist_getcanvas(glist),
+            tagbuf);
     }
-    else sys_vgui(".x%lx.c delete .x%lx.x%lx.template%lx\n",
-        glist_getcanvas(glist), glist_getcanvas(glist), glist, data);
 }
 
 static t_float drawsymbol_motion_ycumulative;