diff --git a/pd/src/g_bang.c b/pd/src/g_bang.c
index c65021543f050fe15ab443b86eb6098ecc1fa75b..b24add70beda4543890e47ff4c5c9856890b2c54 100644
--- a/pd/src/g_bang.c
+++ b/pd/src/g_bang.c
@@ -906,6 +906,8 @@ static void *bng_new(t_symbol *s, int argc, t_atom *argv)
 	x->x_gui.label_offset_y = 0;
 	x->x_gui.label_vis = 0;
 
+	x->x_gui.x_obj.te_iemgui = 1;
+
     return (x);
 }
 
diff --git a/pd/src/g_editor.c b/pd/src/g_editor.c
index a7d82c6942ea10f8761b4663091867616f498641..6815eeac9cc076a742384eb2ef772502243633ab 100644
--- a/pd/src/g_editor.c
+++ b/pd/src/g_editor.c
@@ -102,33 +102,9 @@ static t_canvas *c_selection;
 
 /* iemgui uses black inlets and outlets while default objects use gray ones
    add here more as necessary */
-int gobj_filter_highlight_behavior(t_rtext *y) {
+int gobj_filter_highlight_behavior(t_text *y) {
 
-	char *buf;
-	char name[4];
-	int bufsize, i;
-	rtext_gettext(y, &buf, &bufsize);
-	if (bufsize > 3) bufsize = 3;
-	for (i = 0; i < bufsize; i++) {
-		name[i] = buf[i];
-	}
-	name[i]='\0';
-	//fprintf(stderr,"object name = >%s<\n", name);
-	if (!strcmp(name, "bng") ||
-		!strcmp(name, "nbx") ||
-		!strcmp(name, "hdl") ||
-		!strcmp(name, "hsl") ||
-		!strcmp(name, "tgl") ||
-		!strcmp(name, "vdl") ||
-		!strcmp(name, "vsl") ||
-		!strcmp(name, "vu ") ||
-		/* alternative names for hradio and vradio when invoked from the menu */
-		!strcmp(name, "hra") ||
-		!strcmp(name, "vra")
-		)
-		return 1;
-
-	return 0;
+	return (y->te_iemgui);
 }
 
 /* ---------------- generic widget behavior ------------------------- */
@@ -2967,7 +2943,7 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
                         }
                         if (yr)
                         {
-							last_outlet_filter = gobj_filter_highlight_behavior(yr);
+							last_outlet_filter = gobj_filter_highlight_behavior((t_text *)&ob->ob_g);
 							//fprintf(stderr,"last_outlet_filter == %d\n", last_outlet_filter);
                             sprintf(x->gl_editor->canvas_cnct_outlet_tag, 
                                     "%so%d",
@@ -3025,7 +3001,7 @@ void canvas_doclick(t_canvas *x, int xpos, int ypos, int which,
 
                     if (yr)
                     {
-						last_inlet_filter = gobj_filter_highlight_behavior(yr);
+						last_inlet_filter = gobj_filter_highlight_behavior((t_text *)&ob->ob_g);
 						//fprintf(stderr,"last_inlet_filter == %d\n", last_inlet_filter);
                         sprintf(x->gl_editor->canvas_cnct_inlet_tag, 
                                 "%si%d",
@@ -3973,7 +3949,7 @@ void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit)
                 }
                 if (y)
                 {
-					last_inlet_filter = gobj_filter_highlight_behavior(y);
+					last_inlet_filter = gobj_filter_highlight_behavior((t_text *)&ob2->ob_g);
 					//fprintf(stderr,"last_inlet_filter == %d\n", last_inlet_filter);
                     sprintf(x->gl_editor->canvas_cnct_inlet_tag, 
                             "%si%d",
@@ -4251,7 +4227,7 @@ static void canvas_displaceselection(t_canvas *x, int dx, int dy)
 	//fprintf(stderr,"canvas_displaceselection %d %d\n", dx, dy);
     t_selection *y;
     int resortin = 0, resortout = 0;
-	old_displace = 0;
+	//old_displace = 0;
     if (!we_are_undoing && !canvas_undo_already_set_move && x->gl_editor->e_selection)
     {
         //canvas_setundo(x, canvas_undo_move, canvas_undo_set_move(x, 1),
@@ -4271,7 +4247,8 @@ static void canvas_displaceselection(t_canvas *x, int dx, int dy)
 		else {
 			/* we will move the non-conforming objects the old way */
 			gobj_displace(y->sel_what, x, dx, dy);
-			old_displace = 1;
+			canvas_restore_original_position(x, y->sel_what, 0, -1);
+			//old_displace = 1;
 			//fprintf(stderr, "displaceselection\n");
 		}
         t_class *cl = pd_class(&y->sel_what->g_pd);
@@ -4290,8 +4267,8 @@ static void canvas_displaceselection(t_canvas *x, int dx, int dy)
 	// to proper ordering of objects as they have been redrawn on top
 	// of everything else rather than where they were supposed to be
 	// (e.g. possibly in the middle or at the bottom)
-	if (old_displace) canvas_redraw(x);
-	old_displace = 0;
+	//if (old_displace) canvas_redraw(x);
+	//old_displace = 0;
 }
 
     /* this routine is called whenever a key is pressed or released.  "x"
diff --git a/pd/src/g_hdial.c b/pd/src/g_hdial.c
index c36fe2d60473f1a03056b33bb27587f3e888ad16..6d20c884dd784d0fe915bda554e54727e1d180c0 100644
--- a/pd/src/g_hdial.c
+++ b/pd/src/g_hdial.c
@@ -1001,6 +1001,8 @@ static void *hradio_donew(t_symbol *s, int argc, t_atom *argv, int old)
 	x->x_gui.label_offset_y = 0;
 	x->x_gui.label_vis = 0;
 
+	x->x_gui.x_obj.te_iemgui = 1;
+
     return (x);
 }
 
diff --git a/pd/src/g_hslider.c b/pd/src/g_hslider.c
index 046a42199fe3fceadccdeb4ef885f054d74a40a8..ab79164ec4867dd0834f3398dc076a4739cebe5e 100644
--- a/pd/src/g_hslider.c
+++ b/pd/src/g_hslider.c
@@ -1010,6 +1010,8 @@ static void *hslider_new(t_symbol *s, int argc, t_atom *argv)
 	x->x_gui.label_offset_y = 0;
 	x->x_gui.label_vis = 0;
 
+	x->x_gui.x_obj.te_iemgui = 1;
+
     return (x);
 }
 
diff --git a/pd/src/g_mycanvas.c b/pd/src/g_mycanvas.c
index cef0202649da37a2a4c7299ba2e2a89b7563cf72..089b57562ebbece81a16580fb14732a1747d72cb 100644
--- a/pd/src/g_mycanvas.c
+++ b/pd/src/g_mycanvas.c
@@ -699,6 +699,8 @@ static void *my_canvas_new(t_symbol *s, int argc, t_atom *argv)
 	x->x_gui.label_offset_y = 0;
 	x->x_gui.label_vis = 0;
 
+	x->x_gui.x_obj.te_iemgui = 1;
+
     return (x);
 }
 
diff --git a/pd/src/g_numbox.c b/pd/src/g_numbox.c
index 7fc02326975152c0896e21e6006bc7221ba8d658..ad488065e6b685b60c7d7fa06bff19470466f33d 100644
--- a/pd/src/g_numbox.c
+++ b/pd/src/g_numbox.c
@@ -1320,6 +1320,8 @@ static void *my_numbox_new(t_symbol *s, int argc, t_atom *argv)
 	x->x_scaleheight = 0;
 	x->x_tmpfontsize = 0;
 
+	x->x_gui.x_obj.te_iemgui = 1;
+
     return (x);
 }
 
diff --git a/pd/src/g_text.c b/pd/src/g_text.c
index 92da3b82cc1a594be48fad63e743d73c25a08348..005d91bff04c03505321efcfc0073be257b14927 100644
--- a/pd/src/g_text.c
+++ b/pd/src/g_text.c
@@ -56,6 +56,7 @@ void glist_text(t_glist *gl, t_symbol *s, int argc, t_atom *argv)
     t_atom at;
     x->te_width = 0;                            /* don't know it yet. */
     x->te_type = T_TEXT;
+	x->te_iemgui = 0;
     x->te_binbuf = binbuf_new();
     if (argc > 1)
     {
@@ -168,6 +169,9 @@ static void canvas_objtext(t_glist *gl, int xpix, int ypix, int selected,
     x->te_ypix = ypix;
     x->te_width = 0;
     x->te_type = T_OBJECT;
+	/* let's see if iemgui objects did not already set the value to 1, otherwise set it explicitly to 0 */
+	if (x->te_iemgui != 1)
+		x->te_iemgui = 0;
     glist_add(gl, &x->te_g);
 
     if (selected)
@@ -640,6 +644,7 @@ void canvas_msg(t_glist *gl, t_symbol *s, int argc, t_atom *argv)
     x->m_messresponder.mr_outlet = outlet_new(&x->m_text, &s_float);
     x->m_text.te_width = 0;                             /* don't know it yet. */
     x->m_text.te_type = T_MESSAGE;
+	x->m_text.te_iemgui = 0;
     x->m_text.te_binbuf = binbuf_new();
     x->m_glist = gl;
     x->m_clock = clock_new(x, (t_method)message_tick);
@@ -1093,6 +1098,7 @@ void canvas_atom(t_glist *gl, t_atomtype type,
     t_atom at;
     x->a_text.te_width = 0;                        /* don't know it yet. */
     x->a_text.te_type = T_ATOM;
+	x->a_text.te_iemgui = 0;
     x->a_text.te_binbuf = binbuf_new();
     x->a_glist = gl;
     x->a_atom.a_type = type;
diff --git a/pd/src/g_toggle.c b/pd/src/g_toggle.c
index 691de9314d07470f28ac341490acb4d6a0dbea80..ce54bb47993ef1f74ce1d602f83243b05a32b7de 100644
--- a/pd/src/g_toggle.c
+++ b/pd/src/g_toggle.c
@@ -837,6 +837,8 @@ static void *toggle_new(t_symbol *s, int argc, t_atom *argv)
 	x->x_gui.label_offset_y = 0;
 	x->x_gui.label_vis = 0;
 
+	x->x_gui.x_obj.te_iemgui = 1;
+
     return (x);
 }
 
diff --git a/pd/src/g_vdial.c b/pd/src/g_vdial.c
index c4321f864e57b176ed8502510f51341d595b43f5..d6e1b5a17cacec6573c23d01631fb11bac51ef8a 100644
--- a/pd/src/g_vdial.c
+++ b/pd/src/g_vdial.c
@@ -1005,6 +1005,8 @@ static void *vradio_donew(t_symbol *s, int argc, t_atom *argv, int old)
 	x->x_gui.label_offset_y = 0;
 	x->x_gui.label_vis = 0;
 
+	x->x_gui.x_obj.te_iemgui = 1;
+
     return (x);
 }
 
diff --git a/pd/src/g_vslider.c b/pd/src/g_vslider.c
index b1a4e8729f706124ada09900dc03d81546ea10d5..b1df04342f591f2ac25d0f953e25019b96ea335a 100644
--- a/pd/src/g_vslider.c
+++ b/pd/src/g_vslider.c
@@ -999,6 +999,8 @@ static void *vslider_new(t_symbol *s, int argc, t_atom *argv)
 	x->x_gui.label_offset_y = 0;
 	x->x_gui.label_vis = 0;
 
+	x->x_gui.x_obj.te_iemgui = 1;
+
     return (x);
 }
 
diff --git a/pd/src/g_vumeter.c b/pd/src/g_vumeter.c
index c09ad73885a6eebbfddc7d1eedaeb325834a4321..d8e898651f686954c0e13b9768bcfced479c3ecc 100644
--- a/pd/src/g_vumeter.c
+++ b/pd/src/g_vumeter.c
@@ -1181,6 +1181,8 @@ static void *vu_new(t_symbol *s, int argc, t_atom *argv)
 	x->x_gui.label_offset_y = 0;
 	x->x_gui.label_vis = 0;
 
+	x->x_gui.x_obj.te_iemgui = 1;
+
     return (x);
 }