diff --git a/pd/src/g_text.c b/pd/src/g_text.c
index c2f033be9c7789f06a00bf3cadd006dce650296f..d275e41b18c6fc2a1c2fdd17dd1a8c6f98cdd64f 100644
--- a/pd/src/g_text.c
+++ b/pd/src/g_text.c
@@ -600,14 +600,16 @@ static void message_set(t_message *x, t_symbol *s, int argc, t_atom *argv)
     binbuf_clear(x->m_text.te_binbuf);
     binbuf_add(x->m_text.te_binbuf, argc, argv);
     glist_retext(x->m_glist, &x->m_text);
-    sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
+    if (glist_isvisible(glist_getcanvas(x->m_glist)))
+        sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
 }
 
 static void message_add2(t_message *x, t_symbol *s, int argc, t_atom *argv)
 {
     binbuf_add(x->m_text.te_binbuf, argc, argv);
     glist_retext(x->m_glist, &x->m_text);
-    sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
+    if (glist_isvisible(glist_getcanvas(x->m_glist)))
+        sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
 }
 
 static void message_add(t_message *x, t_symbol *s, int argc, t_atom *argv)
@@ -615,7 +617,8 @@ static void message_add(t_message *x, t_symbol *s, int argc, t_atom *argv)
     binbuf_add(x->m_text.te_binbuf, argc, argv);
     binbuf_addsemi(x->m_text.te_binbuf);
     glist_retext(x->m_glist, &x->m_text);
-    sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
+    if (glist_isvisible(glist_getcanvas(x->m_glist)))
+        sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
 }
 
 static void message_addcomma(t_message *x)
@@ -624,13 +627,15 @@ static void message_addcomma(t_message *x)
     SETCOMMA(&a);
     binbuf_add(x->m_text.te_binbuf, 1, &a);
     glist_retext(x->m_glist, &x->m_text);
-    sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
+    if (glist_isvisible(glist_getcanvas(x->m_glist)))
+        sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
 }
 
 static void message_addsemi(t_message *x)
 {
     message_add(x, 0, 0, 0);
-    sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
+    if (glist_isvisible(glist_getcanvas(x->m_glist)))
+        sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
 }
 
 static void message_adddollar(t_message *x, t_floatarg f)
@@ -642,7 +647,8 @@ static void message_adddollar(t_message *x, t_floatarg f)
     SETDOLLAR(&a, n);
     binbuf_add(x->m_text.te_binbuf, 1, &a);
     glist_retext(x->m_glist, &x->m_text);
-    sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
+    if (glist_isvisible(glist_getcanvas(x->m_glist)))
+        sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
 }
 
 static void message_adddollsym(t_message *x, t_symbol *s)
@@ -655,7 +661,8 @@ static void message_adddollsym(t_message *x, t_symbol *s)
     SETDOLLSYM(&a, gensym(buf));
     binbuf_add(x->m_text.te_binbuf, 1, &a);
     glist_retext(x->m_glist, &x->m_text);
-    sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
+    if (glist_isvisible(glist_getcanvas(x->m_glist)))
+        sys_vgui("pdtk_canvas_getscroll .x%lx.c\n", (t_int)x->m_glist);
 }
 
 static void message_click(t_message *x,
diff --git a/pd/src/pd.tk b/pd/src/pd.tk
index 328687f2174e89163a1fedc16cc212fbed4295c4..8ec8f7fece1204326a1c5b7caccfd63727b3b6ed 100644
--- a/pd/src/pd.tk
+++ b/pd/src/pd.tk
@@ -3146,6 +3146,8 @@ proc pdtk_canvas_new {name width height geometry editable} {
     	$name.m.edit entryconfigure "Autotips" -background "#7dd37d" -foreground "#dddddd"
 	}
 
+	set ::editmode($name) $editable
+
 	#if { $magicglass == 1 } {
     #	$name.m.edit entryconfigure "Cord Inspector" -background "#7dd37d"
 	#	menu_magicglass $name
@@ -4255,8 +4257,13 @@ proc pdtk_find_highest_widget_withtag {canvas name} {
 proc pdtk_canvas_getscroll {name} {
 	set parentname [winfo parent $name]
 	if {$::scroll($parentname) == 0} {return}
-	catch { after cancel $::doscroll($name) }
-	set ::doscroll($name) [after idle [concat pdtk_canvas_do_getscroll $name]]
+	# if {$::editmode($parentname) == 0} {
+	# 	if { $::doscroll($parentname) != 0 } {
+	# 		return
+	# 	}
+	# }
+	catch { after cancel $::doscroll($parentname) }
+	set ::doscroll($parentname) [after idle [concat pdtk_canvas_do_getscroll $name]]
 }
 
 proc pdtk_canvas_do_getscroll {name} {
@@ -4272,6 +4279,9 @@ proc pdtk_canvas_do_getscroll {name} {
     if {![winfo exists $name]} {return}
 
     set parentname [winfo parent $name]
+
+	set ::doscroll($parentname) 0
+
     #puts stderr "pdtk_canvas_getscroll $name $::scroll($parentname)"
 	if {$::scroll($parentname) == 0} {return}
 
@@ -7041,6 +7051,7 @@ proc pdtk_data_dialog {name stuff} {
 #####################iemlib#######################
 proc pdtk_canvas_editval {name value} {
 	global k12_mode
+	set set ::editmode($name) $value
 	#if {[winfo exists $name]} {
 		if { $value } {
 		    $name.m.edit entryconfigure "Edit mode" -indicatoron false -background "#7dd37d" -foreground black