diff --git a/src/eval.c b/src/eval.c
index fb417c8..7fbd770 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -5589,12 +5589,8 @@
     for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
 	abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
 								  NULL, NULL);
-    for (wp = first_tab_popupwin; wp != NULL; wp = wp->w_next)
-	abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
-								  NULL, NULL);
     FOR_ALL_TABPAGES(tp)
-	if (tp != curtab)
-	    for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next)
+	for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next)
 		abort = abort || set_ref_in_item(&wp->w_winvar.di_tv, copyID,
 								  NULL, NULL);
 #endif
@@ -8816,12 +8812,11 @@
     if (nr >= LOWEST_WIN_ID)
     {
 #ifdef FEAT_TEXT_PROP
-	// popup windows are in a separate list
-	for (wp = (tp == NULL || tp == curtab)
-		? first_tab_popupwin : tp->tp_first_popupwin;
-						   wp != NULL; wp = wp->w_next)
+	// check tab-local popup windows
+	for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next)
 	    if (wp->w_id == nr)
 		return wp;
+	// check global popup windows
 	for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
 	    if (wp->w_id == nr)
 		return wp;
diff --git a/src/globals.h b/src/globals.h
index 7d250f4..43ad8e9 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -582,7 +582,6 @@
 EXTERN int	aucmd_win_used INIT(= FALSE);	/* aucmd_win is being used */
 
 #ifdef FEAT_TEXT_PROP
-EXTERN win_T    *first_tab_popupwin;	// first popup window local to tab page
 EXTERN win_T    *first_popupwin;	// first global popup window
 #endif
 
diff --git a/src/popupwin.c b/src/popupwin.c
index 294f3b1..5439c64 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -85,8 +85,8 @@
     if (nr == 0)
     {
 	// popup on current tab
-	wp->w_next = first_tab_popupwin;
-	first_tab_popupwin = wp;
+	wp->w_next = curtab->tp_first_popupwin;
+	curtab->tp_first_popupwin = wp;
     }
     else if (nr < 0)
     {
@@ -212,13 +212,9 @@
 popup_close_tabpage(tabpage_T *tp, int id)
 {
     win_T	*wp;
-    win_T	**root;
+    win_T	**root = &tp->tp_first_popupwin;
     win_T	*prev = NULL;
 
-    if (tp == curtab)
-	root = &first_tab_popupwin;
-    else
-	root = &tp->tp_first_popupwin;
     for (wp = *root; wp != NULL; prev = wp, wp = wp->w_next)
 	if (wp->w_id == id)
 	{
@@ -237,8 +233,8 @@
 {
     while (first_popupwin != NULL)
 	popup_close(first_popupwin->w_id);
-    while (first_tab_popupwin != NULL)
-	popup_close(first_tab_popupwin->w_id);
+    while (curtab->tp_first_popupwin != NULL)
+	popup_close(curtab->tp_first_popupwin->w_id);
 }
 
     void
diff --git a/src/screen.c b/src/screen.c
index 00894ce..30e1bb2 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -610,7 +610,7 @@
     }
 #ifdef FEAT_TEXT_PROP
     // TODO: avoid redrawing everything when there is a popup window.
-    if (first_popupwin != NULL || first_tab_popupwin != NULL)
+    if (first_popupwin != NULL || curtab->tp_first_popupwin != NULL)
 	type = NOT_VALID;
 #endif
 
@@ -1000,7 +1000,7 @@
     // Reset all the VALID_POPUP flags.
     for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
 	wp->w_valid &= ~VALID_POPUP;
-    for (wp = first_tab_popupwin; wp != NULL; wp = wp->w_next)
+    for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
 	wp->w_valid &= ~VALID_POPUP;
 
     // TODO: don't redraw every popup every time.
@@ -1018,7 +1018,7 @@
 		lowest_zindex = wp->w_zindex;
 		lowest_wp = wp;
 	    }
-	for (wp = first_tab_popupwin; wp != NULL; wp = wp->w_next)
+	for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
 	    if ((wp->w_valid & VALID_POPUP) == 0
 					       && wp->w_zindex < lowest_zindex)
 	    {
diff --git a/src/version.c b/src/version.c
index 78a932e..4f87663 100644
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1400,
+/**/
     1399,
 /**/
     1398,
diff --git a/src/window.c b/src/window.c
index ffff756..bc8dac0 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1371,7 +1371,7 @@
     for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
 	if (wp == win)
 	    return TRUE;
-    for (wp = first_tab_popupwin; wp != NULL; wp = wp->w_next)
+    for (wp = curtab->tp_first_popupwin; wp != NULL; wp = wp->w_next)
 	if (wp == win)
 	    return TRUE;
 #endif
@@ -3673,13 +3673,8 @@
     {
 	win_T *wp;
 
-	for (;;)
-	{
-	    wp = tp == curtab ? first_tab_popupwin : tp->tp_first_popupwin;
-	    if (wp == NULL)
-		break;
-	    popup_close_tabpage(tp, wp->w_id);
-	}
+	while (tp->tp_first_popupwin != NULL)
+	    popup_close_tabpage(tp, tp->tp_first_popupwin->w_id);
     }
 #endif
     for (idx = 0; idx < SNAP_COUNT; ++idx)
@@ -3973,10 +3968,6 @@
     tp->tp_prevwin = prevwin;
     tp->tp_firstwin = firstwin;
     tp->tp_lastwin = lastwin;
-#ifdef FEAT_TEXT_PROP
-    tp->tp_first_popupwin = first_tab_popupwin;
-    first_tab_popupwin = NULL;
-#endif
     tp->tp_old_Rows = Rows;
     tp->tp_old_Columns = Columns;
     firstwin = NULL;
@@ -4004,9 +3995,6 @@
     firstwin = tp->tp_firstwin;
     lastwin = tp->tp_lastwin;
     topframe = tp->tp_topframe;
-#ifdef FEAT_TEXT_PROP
-    first_tab_popupwin = tp->tp_first_popupwin;
-#endif
 
     /* We would like doing the TabEnter event first, but we don't have a
      * valid current window yet, which may break some commands.
@@ -6513,15 +6501,9 @@
 	{
 	    curtab->tp_firstwin = firstwin;
 	    curtab->tp_lastwin = lastwin;
-#ifdef FEAT_TEXT_PROP
-	    curtab->tp_first_popupwin = first_tab_popupwin ;
-#endif
 	    curtab = tp;
 	    firstwin = curtab->tp_firstwin;
 	    lastwin = curtab->tp_lastwin;
-#ifdef FEAT_TEXT_PROP
-	    first_tab_popupwin = curtab->tp_first_popupwin;
-#endif
 	}
 	else
 	    goto_tabpage_tp(tp, FALSE, FALSE);
@@ -6550,15 +6532,9 @@
 	{
 	    curtab->tp_firstwin = firstwin;
 	    curtab->tp_lastwin = lastwin;
-#ifdef FEAT_TEXT_PROP
-	    curtab->tp_first_popupwin = first_tab_popupwin ;
-#endif
 	    curtab = save_curtab;
 	    firstwin = curtab->tp_firstwin;
 	    lastwin = curtab->tp_lastwin;
-#ifdef FEAT_TEXT_PROP
-	    first_tab_popupwin = curtab->tp_first_popupwin;
-#endif
 	}
 	else
 	    goto_tabpage_tp(save_curtab, FALSE, FALSE);
