diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js
index 64050bc4fb3622cc3b6a494a424456dc102f4ff4..024c0953fbbf24a9edcf05f02656f2bc827a2bda 100644
--- a/pd/nw/pdgui.js
+++ b/pd/nw/pdgui.js
@@ -1840,9 +1840,9 @@ function gui_hide_selection_rectangle(cid) {
 
 // iemguis
 
-function gui_create_bng(c, id, cx, cy, radius) {
-    var g = get_gobj(c, id),
-        circle = create_item(c, "circle", {
+function gui_create_bng(cid, tag, cx, cy, radius) {
+    var g = get_gobj(cid, tag),
+        circle = create_item(cid, "circle", {
             cx: cx,
             cy: cy,
             r: radius,
@@ -1850,7 +1850,7 @@ function gui_create_bng(c, id, cx, cy, radius) {
             fill: "none",
             stroke: "black",
             "stroke-width": 1,
-            id: id + "button"
+            id: tag + "button"
     });
     g.appendChild(circle);
 }
@@ -1861,13 +1861,13 @@ function x2h(x_val) {
     return "#" + x_val.slice(1);
 }
 
-function gui_bng_button_color(c, id, x_color) {
-    var button = get_item(c, id + "button");
+function gui_bng_button_color(cid, tag, x_color) {
+    var button = get_item(cid, tag + "button");
     configure_item(button, { fill: x2h(x_color) });
 }
 
-function gui_bng_configure(c, id, x_color, cx, cy, r) {
-    var b = get_item(c, id + "button");
+function gui_bng_configure(cid, tag, x_color, cx, cy, r) {
+    var b = get_item(cid, tag + "button");
     configure_item(b, {
         cx: cx,
         cy: cy,
@@ -1955,7 +1955,7 @@ function numbox_data_string(w, h) {
 }
 
 // Todo: send fewer parameters from c
-function gui_create_numbox(cid, tag, bgcolor, x, y, w, h, is_toplevel) {
+function gui_create_numbox(cid, tag, x_color, x, y, w, h, is_toplevel) {
     // numbox doesn't have a standard iemgui border,
     // so we must create its gobj manually
     var g = gui_text_create_gobj(cid, tag, "iemgui", x, y, is_toplevel),
@@ -1964,7 +1964,7 @@ function gui_create_numbox(cid, tag, bgcolor, x, y, w, h, is_toplevel) {
     data = numbox_data_string(w, h);
     border = create_item(cid, "path", {
         d: data,
-        fill: bgcolor,
+        fill: x2h(x_color),
         stroke: "black",
         "stroke-width": 1,
         id: (tag + "border"),
@@ -1980,7 +1980,7 @@ function gui_numbox_coords(cid, tag, w, h) {
     });
 }
 
-function gui_numbox_drawtext(cid,tag,text,font_size,color,xpos,ypos,basex,basey) {
+function gui_numbox_drawtext(cid,tag,text,font_size,x_color,xpos,ypos,basex,basey) {
     // kludge alert -- I'm not sure why I need to add half to the ypos
     // below. But it works for most font sizes.
     var g = get_gobj(cid, tag),
@@ -1989,7 +1989,7 @@ function gui_numbox_drawtext(cid,tag,text,font_size,color,xpos,ypos,basex,basey)
                         (xpos - basex) + "," +
                         ((ypos - basey + (ypos - basey) * 0.5)|0) + ")",
             "font-size": font_size,
-            fill: color,
+            fill: x2h(x_color),
             id: tag + "text"
         }),
         text_node = patchwin[cid].window.document.createTextNode(text);
@@ -1997,12 +1997,12 @@ function gui_numbox_drawtext(cid,tag,text,font_size,color,xpos,ypos,basex,basey)
     g.appendChild(svg_text);
 }
 
-function gui_update_numbox(cid, tag, fcolor, bgcolor, font_name, font_size, font_weight) {
+function gui_update_numbox(cid, tag, x_fcolor, x_bgcolor, font_name, font_size, font_weight) {
     var b = get_item(cid, tag + "border"),
         text = get_item(cid, tag + "text"),
         label = get_item(cid, tag + "label");
-    configure_item(b, { fill: bgcolor });
-    configure_item(text, { fill: fcolor, "font-size": font_size });
+    configure_item(b, { fill: x2h(x_bgcolor) });
+    configure_item(text, { fill: x2h(x_fcolor), "font-size": font_size });
     // Update the label if one exists
     if (label) {
         gui_iemgui_label_font(cid, tag, font_name, font_weight, font_size);
@@ -2428,45 +2428,45 @@ function gui_iemgui_label_show_drag_handle(cid, tag, state, x, y) {
     }
 }
 
-function gui_create_mycanvas(c,id,x_color,x1,y1,x2_vis,y2_vis,x2,y2) {
+function gui_create_mycanvas(cid,tag,x_color,x1,y1,x2_vis,y2_vis,x2,y2) {
     var rect_vis, rect, g;
-    rect_vis = create_item(c, "rect", {
+    rect_vis = create_item(cid, "rect", {
         width: x2_vis - x1,
         height: y2_vis - y1,
         fill: x2h(x_color),
         stroke: x2h(x_color),
-        id: id + "rect"
+        id: tag + "rect"
         }
     );
 
     // we use a drag_handle-- unlike a 'border' it takes
     // the same color as the visible rectangle when deselected
-    rect = create_item(c, "rect", {
+    rect = create_item(cid, "rect", {
         width: x2 - x1,
         height: y2 - y1,
         fill: "none",
         stroke: x2h(x_color),
-        id: id + "drag_handle",
+        id: tag + "drag_handle",
         "class": "border mycanvas_border"
         }
     );
-    g = get_gobj(c, id);
+    g = get_gobj(cid, tag);
     g.appendChild(rect_vis);
     g.appendChild(rect);
 }
 
-function gui_update_mycanvas(c, id, x_color, selected) {
-    var r = get_item(c, id + "rect"),
-        h = get_item(c, id + "drag_handle");
+function gui_update_mycanvas(cid, tag, x_color, selected) {
+    var r = get_item(cid, tag + "rect"),
+        h = get_item(cid, tag + "drag_handle");
     configure_item(r, {
         fill: x2h(x_color),
         stroke: x2h(x_color)
     });
 }
 
-function gui_mycanvas_coords(c, id, vis_width, vis_height, select_width, select_height) {
-    var r = get_item(c, id + "rect"),
-        h = get_item(c, id + "drag_handle");
+function gui_mycanvas_coords(cid, tag, vis_width, vis_height, select_width, select_height) {
+    var r = get_item(cid, tag + "rect"),
+        h = get_item(cid, tag + "drag_handle");
     configure_item(r, { width: vis_width, height: vis_height });
     configure_item(h, { width: select_width, height: select_height });
 }
diff --git a/pd/src/g_numbox.c b/pd/src/g_numbox.c
index d79ba61eddbfdcf9def9077c304a3f72895cbedf..7c734cfb24008e74ef6aa298977770f6c04d6667 100644
--- a/pd/src/g_numbox.c
+++ b/pd/src/g_numbox.c
@@ -137,20 +137,21 @@ static void my_numbox_draw_update(t_gobj *client, t_glist *glist)
         x->x_buf[sl+1] = 0;
         if(sl >= x->x_gui.x_w)
             cp += sl - x->x_gui.x_w + 1;
-        gui_vmess("gui_text_set", "xxs", glist_getcanvas(glist),
-            x, cp);
-            
+        gui_vmess("gui_text_set", "xxs",
+            glist_getcanvas(glist),
+            x,
+            cp);
         x->x_buf[sl] = 0;
     }
     else
     {
-        //printf("draw_update 2\n");
-        char fcol[8]; sprintf(fcol, "#%6.6x",
-            x->x_gui.x_change ? IEM_GUI_COLOR_EDITED : x->x_gui.x_fcol);
-        my_numbox_ftoa(x);
-        gui_vmess("gui_text_set", "xxs", glist_getcanvas(glist),
-            x, x->x_buf);
-        x->x_buf[0] = 0;
+        my_numbox_ftoa(x); /* mmm... side-effects */
+        gui_vmess("gui_text_set", "xxs",
+            glist_getcanvas(glist),
+            x,
+            x->x_buf);
+        x->x_buf[0] = 0; /* mmm... more side-effects... no clue why we'd need
+                            to mutate a struct member in order to draw stuff */
     }
 }
 
@@ -160,12 +161,11 @@ static void my_numbox_draw_new(t_my_numbox *x, t_glist *glist)
     int half=x->x_gui.x_h/2, d=1+x->x_gui.x_h/34;
     int x1=text_xpix(&x->x_gui.x_obj, glist), x2=x1+x->x_numwidth;
     int y1=text_ypix(&x->x_gui.x_obj, glist), y2=y1+x->x_gui.x_h;
-    char bcol[8]; sprintf(bcol, "#%6.6x", x->x_gui.x_bcol);
 
-    gui_vmess("gui_create_numbox", "xxsiiiii",
+    gui_vmess("gui_create_numbox", "xxxiiiii",
         canvas,
         x,
-        bcol,
+        x->x_gui.x_bcol,
         x1,
         y1,
         x2 - x1,
@@ -181,11 +181,13 @@ static void my_numbox_draw_new(t_my_numbox *x, t_glist *glist)
         //    x->x_gui.x_fcol, x, x);
     }
     my_numbox_ftoa(x);
-    char colorbuf[MAXPDSTRING];
-    sprintf(colorbuf, "#%6.6x", x->x_gui.x_fcol);
-    gui_vmess("gui_numbox_drawtext", "xxsisiiii",
-        canvas, x,
-        x->x_buf, x->x_gui.x_fontsize, colorbuf, x1+half+2, y1+half+d, x1, y1);
+    gui_vmess("gui_numbox_drawtext", "xxsixiiii",
+        canvas,
+        x,
+        x->x_buf,
+        x->x_gui.x_fontsize,
+        x->x_gui.x_fcol,
+        x1+half+2, y1+half+d, x1, y1);
 }
 
 /* Not sure that this is needed anymore */
@@ -223,14 +225,15 @@ static void my_numbox_draw_move(t_my_numbox *x, t_glist *glist)
 static void my_numbox_draw_config(t_my_numbox* x,t_glist* glist)
 {
     t_canvas *canvas=glist_getcanvas(glist);
-    char fcol[8]; sprintf(fcol, "#%6.6x", x->x_gui.x_fcol);
     int issel = x->x_gui.x_selected == canvas && x->x_gui.x_glist == canvas;
-    char bgcol[MAXPDSTRING];
-    sprintf(bgcol, "#%6.6x", x->x_gui.x_bcol);
-    
-    gui_vmess("gui_update_numbox", "xxsssii",
-        canvas, x,
-        fcol, bgcol, iemgui_typeface, x->x_gui.x_fontsize, sys_fontweight);
+    gui_vmess("gui_update_numbox", "xxxxsii",
+        canvas,
+        x,
+        x->x_gui.x_fcol,
+        x->x_gui.x_bcol,
+        iemgui_typeface,
+        x->x_gui.x_fontsize,
+        sys_fontweight);
 }
 
 static void my_numbox_draw_select(t_my_numbox *x, t_glist *glist)
@@ -323,11 +326,8 @@ static void my_numbox__motionhook(t_scalehandle *sh,
         x->x_numwidth = my_numbox_calc_fontwidth(x);
         canvas_dirty(x->x_gui.x_glist, 1);
 
-
-
         if (glist_isvisible(x->x_gui.x_glist))
         {
-            
             my_numbox_draw_move(x, x->x_gui.x_glist);
             my_numbox_draw_config(x, x->x_gui.x_glist);
             my_numbox_draw_update((t_gobj*)x, x->x_gui.x_glist);
@@ -338,9 +338,6 @@ static void my_numbox__motionhook(t_scalehandle *sh,
             //gobj_vis(x, x->x_gui.x_glist, 1);
             scalehandle_unclick_scale(sh);
         }
-
-
-
         int properties = gfxstub_haveproperties((void *)x);
         if (properties)
         {
@@ -613,7 +610,6 @@ static void my_numbox_log_height(t_my_numbox *x, t_floatarg lh)
         x->x_k = exp(log(x->x_max/x->x_min)/(double)(x->x_log_height));
     else
         x->x_k = 1.0;
-    
 }
 
 static void my_numbox_hide_frame(t_my_numbox *x, t_floatarg lh)