diff --git a/pd/src/pd.tk b/pd/src/pd.tk
index 2b80e383b30140ff2090fd9dfd444a4e8b4ce6fe..8d9ca2695ed43ada4f39ee3673e899bcc7f844c4 100644
--- a/pd/src/pd.tk
+++ b/pd/src/pd.tk
@@ -4618,6 +4618,7 @@ proc pdtk_canvas_ctrlkey {name key shift} {
 
 proc pdtk_canvas_scroll {canvas xy distance} {
 	if {$xy eq "x" && $::xscrollable([winfo parent $canvas]) == 1 || $xy eq "y" && $::yscrollable([winfo parent $canvas]) == 1 } {
+		pdtk_canvas_leaveitem $canvas
     	$canvas [list $xy]view scroll $distance units
 		pdtk_canvas_draw_scrollbars $canvas
 	}
@@ -8689,6 +8690,14 @@ proc pdtk_canvas_leaveitem {w} {
 	set duplicate_tags -1;
 }
 
+proc pdtk_tip_delete {w} {
+	variable tooltip_visible
+	destroy $w.tiplabel
+	$w delete tiparrow
+	$w delete $w.tipwindow
+	set tooltip_visible 0
+}
+
 proc pdtk_tip {w fromc show args} {
 	#puts stderr "$w $fromc $show $args"
 	variable select_color
@@ -8710,12 +8719,9 @@ proc pdtk_tip {w fromc show args} {
 	set typeface [get_font_for_size $::font([string trimright $w .c])]
 	set exists [winfo exists $w.tiplabel]
     if {$show == 0} {
-        catch {
-			destroy $w.tiplabel
-			$w delete tiparrow
-        	$w delete $w.tipwindow
+    	if {$tooltip_visible == 1} {
+        	after idle [concat pdtk_tip_delete $w]
 		}
-		set tooltip_visible 0
     } else {
 		set tooltip_visible 1
 		if { $nlet_color == 0 } { set nlet_color $select_color }
@@ -8932,7 +8938,9 @@ proc pdtk_gettip { w item xletno name helpname dir } {
     }
     # make Pd's comma atoms look pretty
     regsub -all {\\,} $msg {,} msg
-    regsub -all {\n} $msg "" msg
+    regsub -all { ,} $msg {,} msg
+    regsub -all {\n} $msg { } msg
+    regsub -all {  } $msg { } msg
     #regsub -all {\n\\,} $msg ",\n" msg
     pdtk_tip $w 0 1 $msg
 }