diff --git a/src/d_delay.c b/src/d_delay.c
index 98cc1149ab55fa147d17381d38e80f850d334252..3571e89a6e79994e402bfdc89d07c4a7519e3f9a 100644
--- a/src/d_delay.c
+++ b/src/d_delay.c
@@ -52,6 +52,8 @@ static void sigdelwrite_checkvecsize(t_sigdelwrite *x, int vecsize)
 #endif
 }
 
+#include <stdio.h>
+
 static void *sigdelwrite_new(t_symbol *s, t_floatarg msec)
 {
     int nsamps;
@@ -59,6 +61,7 @@ static void *sigdelwrite_new(t_symbol *s, t_floatarg msec)
     if (!*s->s_name) s = gensym("delwrite~");
     pd_bind(&x->x_obj.ob_pd, s);
     x->x_sym = s;
+	if (msec == 0) msec = 1000;
     nsamps = msec * sys_getsr() * (t_float)(0.001f);
     if (nsamps < 1) nsamps = 1;
     nsamps += ((- nsamps) & (SAMPBLK - 1));
diff --git a/src/g_editor.c b/src/g_editor.c
index acbe3ff7376a37c90cfb9d75f4e2ad84acfd7b4a..3a20edf828f1da710d7694933b92e5919f9315d6 100644
--- a/src/g_editor.c
+++ b/src/g_editor.c
@@ -754,6 +754,8 @@ static void *canvas_undo_set_move(t_canvas *x, int selected)
 static void canvas_undo_move(t_canvas *x, void *z, int action)
 {
     t_undo_move *buf = z;
+	t_class *cl;
+	int resortin = 0, resortout = 0;
     if (action == UNDO_UNDO || action == UNDO_REDO)
     {
         int i;
@@ -770,8 +772,13 @@ static void canvas_undo_move(t_canvas *x, void *z, int action)
                 gobj_displace(y, x, newx-x1, newy - y1);
                 buf->u_vec[i].e_xpix = x1;
                 buf->u_vec[i].e_ypix = y1;
+				cl = pd_class(&y->g_pd);
+		        if (cl == vinlet_class) resortin = 1;
+		        else if (cl == voutlet_class) resortout = 1;
             }
         }
+		if (resortin) canvas_resortinlets(x);
+		if (resortout) canvas_resortoutlets(x);
     }
     else if (action == UNDO_FREE)
     {
@@ -1631,8 +1638,12 @@ static void canvas_done_popup(t_canvas *x, t_float which, t_float xpos, t_float
     t_gobj *y=NULL, *oldy=NULL, *oldy_prev=NULL, *oldy_next=NULL, *y_begin, *y_end=NULL;
 	int x1, y1, x2, y2;
 
-	// first deselect any objects that may be already selected
-	glist_noselect(x);
+	// first deselect any objects that may be already selected if doing action 3 or 4
+	if (which == 3 || which == 4) {
+		if (x->gl_editor->e_selection && x->gl_editor->e_selection->sel_next)
+			glist_noselect(x);
+	}
+	else glist_noselect(x);
 
 	// mark the beginning of the glist for front/back
 	y_begin = x->gl_list;
@@ -1640,6 +1651,7 @@ static void canvas_done_popup(t_canvas *x, t_float which, t_float xpos, t_float
 	if (which == 3 || which == 4) {
 		// if no object has been selected for to-front/back action
 		if (!x->gl_editor->e_selection) {
+			//fprintf(stderr,"doing hitbox\n");
 			for (y = x->gl_list; y; y = y->g_next) {
 				if (canvas_hitbox(x, y, xpos, ypos, &x1, &y1, &x2, &y2)) {
 					if (!x->gl_edit)
@@ -1648,8 +1660,11 @@ static void canvas_done_popup(t_canvas *x, t_float which, t_float xpos, t_float
 						glist_select(x, y);
 				}
 			}
-			// this was a bogus call--get me out of here!
-			if (!x->gl_editor->e_selection) return;
+			// this was a bogus/unsupported call--get me out of here!
+			if (!x->gl_editor->e_selection) {
+				post("To front/back action could not be performed because multiple items were selected...");
+				return;
+			}
 		}
 	}
 	
@@ -1764,6 +1779,8 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
     t_gobj *y;
     int shiftmod, runmode, altmod, doublemod = 0, rightclick;
     int x1=0, y1=0, x2=0, y2=0, clickreturned = 0;
+
+	//fprintf(stderr,"canvas_doclick\n");
     
     if (!x->gl_editor)
     {
@@ -1801,8 +1818,10 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
     }
     /* post("click %d %d %d %d", xpos, ypos, which, mod); */
     
-    if (x->gl_editor->e_onmotion != MA_NONE)
+    if (x->gl_editor->e_onmotion != MA_NONE) {
+		//fprintf(stderr,"onmotion != MA_NONE\n");
         return;
+	}
 
     x->gl_editor->e_xwas = xpos;
     x->gl_editor->e_ywas = ypos;
@@ -2018,7 +2037,7 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
             for (parseOutlet = parseOb->ob_outlet; 
                  parseOutlet && parseOutno; 
                  parseOutlet = parseOutlet->o_next, parseOutno--);
-            if (parseOutlet)
+            if (parseOutlet && magicGlass_isOn(x->gl_magic_glass))
             {
                 magicGlass_bind(x->gl_magic_glass,
                                 t.tr_ob,
@@ -2398,6 +2417,22 @@ void canvas_mouseup(t_canvas *x,
         }
 		sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", x);
     }
+
+	if (canvas_cnct_outlet_tag[0] != 0)
+	{
+		sys_vgui(".x%x.c itemconfigure %s -outline %s -fill %s -width 1\n",
+		       	x, canvas_cnct_outlet_tag,
+				(last_outlet_filter ? "black" : (outlet_issignal ? "$signal_cord" : "$msg_cord")),
+				(outlet_issignal ? "$signal_nlet" : "$msg_nlet"));
+	}
+	if (canvas_cnct_inlet_tag[0] != 0)
+	{
+		sys_vgui(".x%x.c itemconfigure %s -outline %s -fill %s -width 1\n",
+	   			x, canvas_cnct_inlet_tag,
+				(last_inlet_filter ? "black" : (outlet_issignal ? "$signal_cord" : "$msg_cord")),
+				(inlet_issignal ? "$signal_nlet" : "$msg_nlet"));
+		canvas_cnct_inlet_tag[0] = 0;                  
+	}
     
     x->gl_editor->e_onmotion = MA_NONE;
 }
@@ -2598,7 +2633,7 @@ void canvas_key(t_canvas *x, t_symbol *s, int ac, t_atom *av)
 void canvas_motion(t_canvas *x, t_floatarg xpos, t_floatarg ypos,
     t_floatarg fmod)
 { 
-    /* post("motion %d %d", (int)xpos, (int)ypos); */
+    //fprintf(stderr,"motion %d %d\n", (int)xpos, (int)ypos);
     int mod = fmod;
     if (!x->gl_editor)
     {
@@ -2615,8 +2650,10 @@ void canvas_motion(t_canvas *x, t_floatarg xpos, t_floatarg ypos,
     }
     else if (x->gl_editor->e_onmotion == MA_REGION)
         canvas_doregion(x, xpos, ypos, 0);
-    else if (x->gl_editor->e_onmotion == MA_CONNECT)
+    else if (x->gl_editor->e_onmotion == MA_CONNECT) {
+		//fprintf(stderr,"MA_CONNECT\n");
         canvas_doconnect(x, xpos, ypos, 0, 0);
+	}
     else if (x->gl_editor->e_onmotion == MA_PASSOUT)
     {
         if (!x->gl_editor->e_motionfn)
@@ -2643,6 +2680,7 @@ void canvas_motion(t_canvas *x, t_floatarg xpos, t_floatarg ypos,
 
 void canvas_startmotion(t_canvas *x)
 {
+	//fprintf(stderr,"canvas_startmotion\n");
     int xval, yval;
     if (!x->gl_editor) return;
     glist_getnextxy(x, &xval, &yval);
@@ -3180,10 +3218,12 @@ static void glist_donewloadbangs(t_glist *x)
 
 static void canvas_paste_xyoffset(t_canvas *x)
 {
-    t_selection *sel;
-    for (sel = x->gl_editor->e_selection; sel; sel = sel->sel_next)
-        gobj_displace(sel->sel_what, x, paste_xyoffset*10, paste_xyoffset*10);
-    paste_xyoffset++;
+    //t_selection *sel;
+    //for (sel = x->gl_editor->e_selection; sel; sel = sel->sel_next)
+        //gobj_displace(sel->sel_what, x, paste_xyoffset*10, paste_xyoffset*10);
+	canvas_displaceselection(x, 10, 10);
+    //paste_xyoffset++;
+	//fprintf(stderr,"xyoffset %d\n",paste_xyoffset);
 }
 
 static void canvas_paste_atmouse(t_canvas *x)
@@ -3656,6 +3696,7 @@ static void canvas_dofont(t_canvas *x, t_floatarg font, t_floatarg xresize,
         if (pd_class(&y->g_pd) == canvas_class
             && !canvas_isabstraction((t_canvas *)y))
                 canvas_dofont((t_canvas *)y, font, xresize, yresize);
+	sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", x);
 }
 
     /* canvas_menufont calls up a TK dialog which calls this back */
diff --git a/src/g_graph.c b/src/g_graph.c
index 33eb9dca159259dde4405bfc8ee7eacf34b289fa..af2885480bf6eea020a875f1fdfe4cc4e1eda0a0 100644
--- a/src/g_graph.c
+++ b/src/g_graph.c
@@ -372,8 +372,13 @@ void canvas_resortinlets(t_canvas *x)
         obj_moveinletfirst(&x->gl_obj, ip);
     }
     freebytes(vec, ninlets * sizeof(*vec));
-    if (x->gl_owner && glist_isvisible(x->gl_owner))
+    if (x->gl_owner && glist_isvisible(x->gl_owner)) {
         canvas_fixlinesfor(x->gl_owner, &x->gl_obj);
+		//fprintf(stderr,"good place to fix redrawing of inlets\n");
+		//fprintf(stderr,"found it\n");
+	    graph_vis(&x->gl_gobj, x->gl_owner, 0); 
+	    graph_vis(&x->gl_gobj, x->gl_owner, 1);
+	}
 }
 
 t_outlet *canvas_addoutlet(t_canvas *x, t_pd *who, t_symbol *s)
@@ -445,8 +450,13 @@ void canvas_resortoutlets(t_canvas *x)
         obj_moveoutletfirst(&x->gl_obj, ip);
     }
     freebytes(vec, noutlets * sizeof(*vec));
-    if (x->gl_owner && glist_isvisible(x->gl_owner))
+    if (x->gl_owner && glist_isvisible(x->gl_owner)) {
         canvas_fixlinesfor(x->gl_owner, &x->gl_obj);
+		//fprintf(stderr,"good place to fix redrawing of outlets\n");
+		//fprintf(stderr,"found it\n");
+        graph_vis(&x->gl_gobj, x->gl_owner, 0); 
+        graph_vis(&x->gl_gobj, x->gl_owner, 1);
+	}
 }
 
 /* ----------calculating coordinates and controlling appearance --------- */
diff --git a/src/g_numbox.c b/src/g_numbox.c
index 3f0f76bb2dff1741fb59d5c162a7a6f536e01c12..69569f0087203d4e3c569087245967850be74503 100644
--- a/src/g_numbox.c
+++ b/src/g_numbox.c
@@ -233,7 +233,7 @@ static void my_numbox_draw_new(t_my_numbox *x, t_glist *glist)
 		         x->x_gui.x_lcol, x, x);
 		my_numbox_ftoa(x);
 		sys_vgui(".x%lx.c create text %d %d -text {%s} -anchor w \
-		    -font {{%s} %d %s} -fill #%6.6x -tags {%lxNUMBER %lxNUM}\n",
+		    -font {{%s} %d %s} -fill #%6.6x -tags {%lxNUMBER %lxNUM noscroll}\n",
 		    canvas, xpos+half+2, ypos+half+d,
 		    x->x_buf, x->x_gui.x_font, x->x_gui.x_fontsize, sys_fontweight,
 		    x->x_gui.x_fcol, x, x);
diff --git a/src/g_text.c b/src/g_text.c
index 62fbefa73078671b64eb48ee9251aedbb6316847..e1f1c53640edc2123f52f638716bc578cdacbf4c 100644
--- a/src/g_text.c
+++ b/src/g_text.c
@@ -1113,7 +1113,34 @@ static void text_displace_withtag(t_gobj *z, t_glist *glist,
         text_drawborder_withtag(x, glist, rtext_gettag(y),
             rtext_width(y), rtext_height(y), 0);
         canvas_fixlinesfor(glist_getcanvas(glist), x);
-    }
+		/*if this is a subpatcher in which case we may be possibly moving nlets around
+		  which in turn requires that we redraw parent's nlets */
+/*		if (glist->gl_owner && glist_isvisible(glist->gl_owner)) {
+		    int resortin = 0, resortout = 0;
+		    t_class *cl = pd_class(&z->g_pd);
+		    if (cl == vinlet_class) resortin = 1;
+		    else if (cl == voutlet_class) resortout = 1;
+			fprintf(stderr,"vinlet=%d voutlet=%d\n", resortin, resortout);
+			if (resortin) canvas_resortinlets(glist->gl_owner);
+			if (resortout) canvas_resortoutlets(glist->gl_owner);
+
+			char *buf;
+			char name[6];
+			int bufsize, i;
+			rtext_gettext(y, &buf, &bufsize);
+			for (i = 0; i < 5; i++) {
+				name[i] = buf[i];
+			}
+			name[5] = '\0';
+			//fprintf(stderr,"yes, this is a subpatch with visible parent %s\n", name);
+			if (!strcmp(name, "inlet") ||
+				!strcmp(name, "outle")) {
+				
+				//fprintf(stderr,"yes, we're moving nlets around\n");	
+				glist_redraw(glist->gl_owner);
+			}
+		}*/
+    }	
 }
 
 static void gatom_displace_withtag(t_gobj *z, t_glist *glist,
@@ -1356,6 +1383,7 @@ static t_widgetbehavior gatom_widgetbehavior =
 void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
     char *tag, int x1, int y1, int x2, int y2)
 {
+	//fprintf(stderr,"glist_drawiofor\n");
     int n = obj_noutlets(ob), nplus = (n == 1 ? 1 : n-1), i;
     int width = x2 - x1;
     int issignal;
@@ -1364,6 +1392,7 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
         int onset = x1 + (width - IOWIDTH) * i / nplus;
         if (firsttime)
         {
+			//fprintf(stderr,"glist_drawiofor o firsttime\n");
             issignal = obj_issignaloutlet(ob,i);
             sys_vgui(".x%lx.c create rectangle %d %d %d %d \
                       -fill %s -outline %s -tags %so%d\n",
@@ -1372,7 +1401,8 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
                 (issignal ? "$signal_cord" : "$msg_cord"),
                 tag, i);
         }
-        else
+        else {
+			//fprintf(stderr,"glist_drawiofor o redraw\n");
             sys_vgui(".x%lx.c coords %so%d %d %d %d %d\n",
                 glist_getcanvas(glist), tag, i,
                 onset, y2 - 2,
@@ -1383,6 +1413,7 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
 				         tag,
 				         i);*/
 				// end jsarlo
+		}
     }
     n = obj_ninlets(ob);
     nplus = (n == 1 ? 1 : n-1);
@@ -1391,6 +1422,7 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
         int onset = x1 + (width - IOWIDTH) * i / nplus;
         if (firsttime)
         {
+			//fprintf(stderr,"glist_drawiofor i firsttime\n");
             issignal = obj_issignalinlet(ob,i);
             sys_vgui(".x%lx.c create rectangle %d %d %d %d \
                       -fill %s -outline %s -tags %si%d\n",
@@ -1399,7 +1431,8 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
                 (issignal ? "$signal_cord" : "$msg_cord"),
                 tag, i);
         }
-        else
+        else {
+			//fprintf(stderr,"glist_drawiofor i firsttime\n");
             sys_vgui(".x%lx.c coords %si%d %d %d %d %d\n",
                 glist_getcanvas(glist), tag, i,
                 onset, y1,
@@ -1410,6 +1443,7 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
 				         tag,
 				         i);*/
 				// end jsarlo
+		}
     }
 }
 
@@ -1417,6 +1451,7 @@ void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime,
 void glist_drawiofor_withtag(t_glist *glist, t_object *ob, int firsttime,
     char *tag, int x1, int y1, int x2, int y2)
 {
+	//fprintf(stderr,"drawiofor_withtag\n");
     int n = obj_noutlets(ob), nplus = (n == 1 ? 1 : n-1), i;
     int width = x2 - x1;
     int issignal;
@@ -1425,6 +1460,7 @@ void glist_drawiofor_withtag(t_glist *glist, t_object *ob, int firsttime,
         int onset = x1 + (width - IOWIDTH) * i / nplus;
         if (firsttime)
         {
+			//fprintf(stderr,"drawiofor_withtag o firsttime\n");
             issignal = obj_issignaloutlet(ob,i);
             sys_vgui(".x%lx.c create rectangle %d %d %d %d \
                       -fill %s -outline %s -tags %so%d\n",
@@ -1442,12 +1478,14 @@ void glist_drawiofor_withtag(t_glist *glist, t_object *ob, int firsttime,
 */
     }
     n = obj_ninlets(ob);
+	//fprintf(stderr,"drawiofor_withtag n=%d\n", n);
     nplus = (n == 1 ? 1 : n-1);
     for (i = 0; i < n; i++)
     {
         int onset = x1 + (width - IOWIDTH) * i / nplus;
         if (firsttime)
         {
+			//fprintf(stderr,"drawiofor_withtag i firsttime\n");
             issignal = obj_issignalinlet(ob,i);
             sys_vgui(".x%lx.c create rectangle %d %d %d %d \
                       -fill %s -outline %s -tags %si%d\n",
@@ -1456,11 +1494,17 @@ void glist_drawiofor_withtag(t_glist *glist, t_object *ob, int firsttime,
                 (issignal ? "$signal_cord" : "$msg_cord"),
                 tag, i);
         }
-/*
-		else
+/*		else
 		{
-			sys_vgui(".x%lx.c addtag selected withtag %si%d \n",
-        	    glist_getcanvas(glist), tag, i);
+			//sys_vgui(".x%lx.c addtag selected withtag %si%d \n",
+        	//    glist_getcanvas(glist), tag, i);
+			fprintf(stderr,"drawiofor_withtag i redraw\n");
+            issignal = obj_issignalinlet(ob,i);
+            sys_vgui(".x%lx.c itemconfigure %si%d \
+                      -fill %s -outline %s\n",
+                glist_getcanvas(glist), tag, i,
+                (issignal ? "$signal_nlet" : "$msg_nlet"),
+                (issignal ? "$signal_cord" : "$msg_cord"));
 		}
 */
     }
@@ -1656,6 +1700,7 @@ void text_drawborder_withtag(t_text *x, t_glist *glist,
 
 void glist_eraseiofor(t_glist *glist, t_object *ob, char *tag)
 {
+	//fprintf(stderr,"glist_eraseiofor\n");
     int i, n;
     n = obj_noutlets(ob);
     for (i = 0; i < n; i++)
diff --git a/src/m_pd.h b/src/m_pd.h
index 652941ac0f3dc50bc428999f79e3c7e5f06c0b00..0a757659a957b6ab9d60d1aa6d1e42a9902a997f 100644
--- a/src/m_pd.h
+++ b/src/m_pd.h
@@ -11,7 +11,7 @@ extern "C" {
 #define PD_MAJOR_VERSION 0
 #define PD_MINOR_VERSION 42
 #define PD_BUGFIX_VERSION 5
-#define PD_TEST_VERSION "extended-l2ork-20110221"
+#define PD_TEST_VERSION "extended-l2ork-20110301"
 
 /* old name for "MSW" flag -- we have to take it for the sake of many old
 "nmakefiles" for externs, which will define NT and not MSW */
diff --git a/src/makefile.dependencies b/src/makefile.dependencies
index 343adc95a0af975cc6d01772b2cd487c44fdfc70..a1a6e9ae75d766cae01b2026ff99d2e0f169185a 100644
--- a/src/makefile.dependencies
+++ b/src/makefile.dependencies
@@ -19,7 +19,14 @@ d_array.o: d_array.c m_pd.h \
  /usr/include/bits/sigset.h /usr/include/bits/time.h \
  /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h
 d_delay.o: d_delay.c m_pd.h \
- /usr/lib/gcc/i486-linux-gnu/4.4.1/include/stddef.h
+ /usr/lib/gcc/i486-linux-gnu/4.4.1/include/stddef.h /usr/include/stdio.h \
+ /usr/include/features.h /usr/include/bits/predefs.h \
+ /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \
+ /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \
+ /usr/include/bits/types.h /usr/include/bits/typesizes.h \
+ /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/i486-linux-gnu/4.4.1/include/stdarg.h \
+ /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
 d_filter.o: d_filter.c m_pd.h \
  /usr/lib/gcc/i486-linux-gnu/4.4.1/include/stddef.h /usr/include/math.h \
  /usr/include/features.h /usr/include/bits/predefs.h \
diff --git a/src/pd.tk b/src/pd.tk
index 3e8b36b30d55365d3d55bb3148f179a41d6e95d8..6652f98a95317233efa01cf550378d32656d9d1f 100644
--- a/src/pd.tk
+++ b/src/pd.tk
@@ -2794,11 +2794,8 @@ proc pdtk_canvas_getscroll {name} {
 		return
 	}
 
-	# set safe defaults for font scaling in case
-	# non-standard fonts are being used
-	set font 0
-	set mult 1.553
-	set div 59.76
+	#debug
+	#catch { $name delete debug }
 
 	#ico@bukvic.net 5/18/10
 	#bbox all is not accurate when using text
@@ -2810,7 +2807,8 @@ proc pdtk_canvas_getscroll {name} {
 	#borrowed from http://wiki.tcl.tk/4844
 	set x1 1.0e30; set x2 -1.0e30 ;
 	set y1 1.0e30; set y2 -1.0e30 ;
-	foreach item [$name find all] {
+
+	foreach item [$name find withtag {(!noscroll)}] {
 	    switch -exact [$name type $item] {
 			"arc" -
 			"line" -
@@ -2827,102 +2825,15 @@ proc pdtk_canvas_getscroll {name} {
 			}
 			"text" {
 				set size [$name bbox $item]
-				if { $pd_nt == 0 } {
-					#find out what font we're using
-					set fnt [$name itemcget $item -font]
-					#puts stderr $fnt				
-					if { [$name itemcget $item -text] != ""} {
-						if {![string match "*8*" $fnt]} {
-							#puts stderr adjusting
-							#following fixes DejaVu Sans Mono ONLY on Linux w/ Tcl/Tk 8.5
-							#other fonts require different kinds of adjustments (most likely limited
-							#to changing 59.76 to a different ratio.
-							set tempya [lindex $size 1]
-							set tempyb [lindex $size 3]
-							set height [expr ($tempyb -$tempya)]
-							set yctr [expr $tempya + ($tempyb - $tempya)/2]
-							#$name create rectangle $x1 $yctr $x2 $yctr -outline #ff0000
-
-							#YOU MAY HAVE TO CHANGE THESE WHEN PORTING TO OSX AND WINDOWS
-							if {[string match "*DejaVu*" $fnt]} {
-								set font 0
-								set mult 1.553
-								set div 59.76
-							} elseif {[string match "*helvetica*" $fnt]} {
-								set font 1
-								set mult 1.652
-								set div 63.53
-							} elseif {[string match "*times*" $fnt]} {
-								#puts stderr times
-								set font 2
-								set mult 1.7
-								set div 65.38
-							}
-							#END CHANGES
-
-							set yoffset [expr int($height / ($mult * 2))]
-
-							set tempya [expr $yctr - $yoffset]
-							set tempyb [expr $yctr + $yoffset]
-
-							#puts stderr [concat h: $height]
-							#YOU MAY HAVE TO CHANGE THESE WHEN PORTING TO OSX AND WINDOWS
-							if { $height > $div } {
-								if { $font == 0 } {
-									set topfix [expr int($height / $div + 0.5)]
-								} elseif { $font == 1 } {
-									set topfix 0
-								} elseif { $font == 2 } {
-									set topfix 0
-								}
-								if { $topfix < 3 } {
-									if { $font == 0 } {
-										set bottomfix $topfix
-									} elseif { $font == 1 } {
-										set bottomfix [expr - int($height / $div + 0.5) + 1]
-									} elseif { $font == 2 } {
-										set bottomfix [expr - int($height / $div + 0.5) + 1]
-									}
-								} else { 
-									set bottomfix 3
-								}
-							} else {
-								set topfix 0
-								set bottomfix 0
-							}
-							#END CHANGES
-
-							#puts stderr [concat topfix: $topfix bottomfix: $bottomfix]
-							foreach {xa ya xb yb} $size {
-								if { $xa < $x1 } {set x1 $xa}
-								if { $xb > $x2 } {set x2 $xb}
-								if { [expr $tempya - $topfix] < $y1 } {set y1 [expr $tempya - $topfix]}
-								if { [expr $tempyb - $topfix + $bottomfix] > $y2 } {set y2 [expr $tempyb - $topfix + $bottomfix]}
-							}
-						} else {
-							#if there is no text or it is less than 10 pixels which speeds up things
-							#for common objects while ensuring the text is not truncated
-							foreach {xa ya xb yb} $size {
-								if { $xa < $x1 } {set x1 $xa}
-								if { $xb > $x2 } {set x2 $xb}
-								if { $ya < $y1 } {set y1 $ya}
-								if { $yb > $y2 } {set y2 $yb}
-							}
-						}
-					}
-				} else {
-					#Non-Linux OSs use the old-school style
-					#Tested on both Windows and OSX and this does not work
-					#right. Given that this stuff is also font-specific,
-					#it will have to be visited some other time. Chances are
-					#similar approach should work but will also restrict
-					#its applicability to that specific font.
+				if { [$name itemcget $item -text] != ""} {
 					foreach {xa ya xb yb} $size {
 						if { $xa < $x1 } {set x1 $xa}
 						if { $xb > $x2 } {set x2 $xb}
 						if { $ya < $y1 } {set y1 $ya}
 						if { $yb > $y2 } {set y2 $yb}
-					}				
+						#for debugging purposes							
+						#$name create rectangle $x1 $y1 $x2 $y2 -outline #ff0000 -tag debug
+					}
 				}
 			}
 	    }
@@ -3609,7 +3520,7 @@ proc popup_action {name action} {
 	if {[string compare $name .c]} {
 		set name [string trimright $name .c]
 	}
-	set cmd [concat $name done-popup $action $popup_xpix $popup_ypix \;]
+	set cmd [concat $name done-popup $action $popup_xpix $popup_ypix\;]
 	    #puts stderr $cmd
 	pd $cmd
 }