diff --git a/runtime/doc/popup.txt b/runtime/doc/popup.txt
index 1367410..ba4dc3f 100644
--- a/runtime/doc/popup.txt
+++ b/runtime/doc/popup.txt
@@ -192,7 +192,7 @@
 		  let pos = screenpos(v:beval_winnr, v:beval_lnum, v:beval_col)
 		  call popup_create({what}, {
 			\ 'pos': 'botleft',
-			\ 'line': pos.lnum - 1,
+			\ 'line': pos.row - 1,
 			\ 'col': pos.col,
 			\ 'mousemoved': 'WORD',
 			\ })
@@ -762,38 +762,49 @@
 	set ballooneval balloonevalterm
 	set balloonexpr=BalloonExpr()
 	let s:winid = 0
+	let s:last_text = ''
 
 	func BalloonExpr()
-	  if s:winid
+	  if s:winid && popup_getpos(s:winid) != {}
+	    " previous popup window still shows
+	    if v:beval_text == s:last_text
+	      " Still the same text, keep the existing popup
+	      return ''
+	    endif
 	    call popup_close(s:winid)
-	    let s:winid = 0
 	  endif
-	  let s:winid = popup_beval([bufname(v:beval_bufnr), v:beval_text], {})
+	  let s:winid = popup_beval(v:beval_text, {'mousemoved': 'word'})
+	  let s:last_text = v:beval_text
 	  return ''
 	endfunc
 <
 If the text has to be obtained asynchronously return an empty string from the
 expression function and call popup_beval() once the text is available.  In
-this example similated with a timer callback: >
+this example simulated with a timer callback: >
 
 	set ballooneval balloonevalterm
 	set balloonexpr=BalloonExpr()
 	let s:winid = 0
+	let s:balloonText = ''
 
 	func BalloonExpr()
-	  if s:winid
+	  if s:winid && popup_getpos(s:winid) != {}
+	    " previous popup window still shows
+	    if  v:beval_text == s:balloonText
+	      " Still the same text, keep the existing popup
+	      return ''
+	    endif
 	    call popup_close(s:winid)
 	    let s:winid = 0
 	  endif
 	  " simulate an asynchronous loopup for the text to display
-	  let s:balloonFile = bufname(v:beval_bufnr)
-	  let s:balloonWord = v:beval_text
+	  let s:balloonText = v:beval_text
 	  call timer_start(100, 'ShowPopup')
 	  return ''
 	endfunc
 
 	func ShowPopup(id)
-	  let s:winid = popup_beval([s:balloonFile, s:balloonWord], {})
+	  let s:winid = popup_beval(s:balloonText, {'mousemoved': 'word'})
 	endfunc
 <
 
diff --git a/src/popupwin.c b/src/popupwin.c
index c6355e1..f2b3130 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -184,14 +184,24 @@
     static void
 set_mousemoved_columns(win_T *wp, int flags)
 {
+    win_T	*textwp;
     char_u	*text;
     int		col;
+    pos_T	pos;
+    colnr_T	mcol;
 
     if (find_word_under_cursor(mouse_row, mouse_col, TRUE, flags,
-					 NULL, NULL, &text, NULL, &col) == OK)
+				  &textwp, &pos.lnum, &text, NULL, &col) == OK)
     {
-	wp->w_popup_mouse_mincol = col;
-	wp->w_popup_mouse_maxcol = col + STRLEN(text) - 1;
+	// convert text column to mouse column
+	pos.col = col;
+	pos.coladd = 0;
+	getvcol(textwp, &pos, &mcol, NULL, NULL);
+	wp->w_popup_mouse_mincol = mcol;
+
+	pos.col = col + STRLEN(text) - 1;
+	getvcol(textwp, &pos, NULL, NULL, &mcol);
+	wp->w_popup_mouse_maxcol = mcol;
 	vim_free(text);
     }
 }
diff --git a/src/version.c b/src/version.c
index 5cede94..5e83159 100644
--- a/src/version.c
+++ b/src/version.c
@@ -778,6 +778,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1659,
+/**/
     1658,
 /**/
     1657,
