diff --git a/src/screen.c b/src/screen.c
index ffea593..ebb5ffc 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -728,7 +728,7 @@
 	col += char_cells;
     }
 
-    if (clear_next)
+    if (clear_next && !skip_for_popup(row, col + coloff))
     {
 	// Clear the second half of a double-wide character of which the left
 	// half was overwritten with a single-wide character.
@@ -792,12 +792,15 @@
 			}
 		    }
 
-		    if (enc_dbcs != 0 && prev_cells > 1)
-			screen_char_2(off_to - prev_cells, row,
+		    if (!skip_for_popup(row, col + coloff - prev_cells))
+		    {
+			if (enc_dbcs != 0 && prev_cells > 1)
+			    screen_char_2(off_to - prev_cells, row,
 						   col + coloff - prev_cells);
-		    else
-			screen_char(off_to - prev_cells, row,
+			else
+			    screen_char(off_to - prev_cells, row,
 						   col + coloff - prev_cells);
+		    }
 		}
 	    }
 #endif
@@ -821,9 +824,7 @@
 	// right of the window contents.  But not on top of a popup window.
 	if (coloff + col < Columns)
 	{
-#ifdef FEAT_PROP_POPUP
-	    if (!blocked_by_popup(row, col + coloff))
-#endif
+	    if (!skip_for_popup(row, col + coloff))
 	    {
 		int c;
 
@@ -1564,15 +1565,18 @@
 #endif
 	    && mb_fix_col(col, row) != col)
     {
-	ScreenLines[off - 1] = ' ';
-	ScreenAttrs[off - 1] = 0;
-	if (enc_utf8)
+	if (!skip_for_popup(row, col - 1))
 	{
-	    ScreenLinesUC[off - 1] = 0;
-	    ScreenLinesC[0][off - 1] = 0;
+	    ScreenLines[off - 1] = ' ';
+	    ScreenAttrs[off - 1] = 0;
+	    if (enc_utf8)
+	    {
+		ScreenLinesUC[off - 1] = 0;
+		ScreenLinesC[0][off - 1] = 0;
+	    }
+	    // redraw the previous cell, make it empty
+	    screen_char(off - 1, row, col - 1);
 	}
-	// redraw the previous cell, make it empty
-	screen_char(off - 1, row, col - 1);
 	// force the cell at "col" to be redrawn
 	force_redraw_next = TRUE;
     }
@@ -1651,11 +1655,7 @@
 		|| ScreenAttrs[off] != attr
 		|| exmode_active;
 
-	if ((need_redraw || force_redraw_this)
-#ifdef FEAT_PROP_POPUP
-		&& !blocked_by_popup(row, col)
-#endif
-	   )
+	if ((need_redraw || force_redraw_this) && !skip_for_popup(row, col))
 	{
 #if defined(FEAT_GUI) || defined(UNIX)
 	    // The bold trick makes a single row of pixels appear in the next
@@ -1772,7 +1772,7 @@
 
     // If we detected the next character needs to be redrawn, but the text
     // doesn't extend up to there, update the character here.
-    if (force_redraw_next && col < screen_Columns)
+    if (force_redraw_next && col < screen_Columns && !skip_for_popup(row, col))
     {
 	if (enc_dbcs != 0 && dbcs_off2cells(off, max_off) > 1)
 	    screen_char_2(off, row, col);
@@ -2181,10 +2181,6 @@
     if (row >= screen_Rows || col >= screen_Columns)
 	return;
 
-    // Skip if under the popup menu.
-    if (skip_for_popup(row, col))
-	return;
-
     // Outputting a character in the last cell on the screen may scroll the
     // screen up.  Only do it when the "xn" termcap property is set, otherwise
     // mark the character invalid (update it when scrolled up).
@@ -2315,12 +2311,14 @@
 	{
 	    if (enc_dbcs != 0 && dbcs_off2cells(off + c, max_off) > 1)
 	    {
-		screen_char_2(off + c, r, c);
+		if (!skip_for_popup(r, c))
+		    screen_char_2(off + c, r, c);
 		++c;
 	    }
 	    else
 	    {
-		screen_char(off + c, r, c);
+		if (!skip_for_popup(r, c))
+		    screen_char(off + c, r, c);
 		if (utf_off2cells(off + c, max_off) > 1)
 		    ++c;
 	    }
@@ -2486,11 +2484,8 @@
 		    || force_next
 #endif
 		    )
-#ifdef FEAT_PROP_POPUP
 		    // Skip if under a(nother) popup.
-		    && !blocked_by_popup(row, col)
-#endif
-	       )
+		    && !skip_for_popup(row, col))
 	    {
 #if defined(FEAT_GUI) || defined(UNIX)
 		// The bold trick may make a single row of pixels appear in
diff --git a/src/version.c b/src/version.c
index dd80828..e998716 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    639,
+/**/
     638,
 /**/
     637,
