diff --git a/src/popupwin.c b/src/popupwin.c
index ddb1254..ce2f51d 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -673,6 +673,16 @@
 	    wp->w_popup_flags &= ~POPF_DRAG;
     }
 
+    di = dict_find(dict, (char_u *)"posinvert", -1);
+    if (di != NULL)
+    {
+	nr = dict_get_number(dict, (char_u *)"posinvert");
+	if (nr)
+	    wp->w_popup_flags |= POPF_POSINVERT;
+	else
+	    wp->w_popup_flags &= ~POPF_POSINVERT;
+    }
+
     di = dict_find(dict, (char_u *)"resize", -1);
     if (di != NULL)
     {
@@ -1383,15 +1393,35 @@
 	    wp->w_winrow = 0;
     }
     else if (wp->w_popup_pos == POPPOS_BOTRIGHT
-	    || wp->w_popup_pos == POPPOS_BOTLEFT)
+		|| wp->w_popup_pos == POPPOS_BOTLEFT)
     {
 	if ((wp->w_height + extra_height) <= wantline)
 	    // bottom aligned: may move down
 	    wp->w_winrow = wantline - (wp->w_height + extra_height);
+	else if (wantline * 2 >= Rows || !(wp->w_popup_flags & POPF_POSINVERT))
+	{
+	    // Bottom aligned but does not fit, and less space on the other
+	    // side or "posinvert" is off: reduce height.
+	    wp->w_winrow = 0;
+	    wp->w_height = wantline - extra_height;
+	}
 	else
-	    // Not enough space, make top aligned.
+	    // Not enough space and more space on the other side: make top
+	    // aligned.
 	    wp->w_winrow = (wantline < 0 ? 0 : wantline) + 1;
     }
+    else if (wp->w_popup_pos == POPPOS_TOPRIGHT
+		|| wp->w_popup_pos == POPPOS_TOPLEFT)
+    {
+	if (wantline + (wp->w_height + extra_height) - 1 > Rows
+		&& wantline * 2 > Rows
+		&& (wp->w_popup_flags & POPF_POSINVERT))
+	    // top aligned and not enough space below but there is space above:
+	    // make bottom aligned
+	    wp->w_winrow = wantline - 2 - wp->w_height - extra_height;
+	else
+	    wp->w_winrow = wantline - 1;
+    }
     if (wp->w_winrow >= Rows)
 	wp->w_winrow = Rows - 1;
     else if (wp->w_winrow < 0)
@@ -1730,7 +1760,7 @@
     if (rettv != NULL)
 	rettv->vval.v_number = wp->w_id;
     wp->w_popup_pos = POPPOS_TOPLEFT;
-    wp->w_popup_flags = POPF_IS_POPUP | POPF_MAPPING;
+    wp->w_popup_flags = POPF_IS_POPUP | POPF_MAPPING | POPF_POSINVERT;
 
     if (buf != NULL)
     {
@@ -2670,6 +2700,8 @@
 	dict_add_number(dict, "mapping",
 				      (wp->w_popup_flags & POPF_MAPPING) != 0);
 	dict_add_number(dict, "resize", (wp->w_popup_flags & POPF_RESIZE) != 0);
+	dict_add_number(dict, "posinvert",
+				    (wp->w_popup_flags & POPF_POSINVERT) != 0);
 	dict_add_number(dict, "cursorline",
 				   (wp->w_popup_flags & POPF_CURSORLINE) != 0);
 	dict_add_string(dict, "highlight", wp->w_p_wcr);
@@ -2830,7 +2862,7 @@
 
     argv[2].v_type = VAR_UNKNOWN;
 
-    // NOTE: The callback might close the popup, thus make "wp" invalid.
+    // NOTE: The callback might close the popup and make "wp" invalid.
     call_callback(&wp->w_filter_cb, -1, &rettv, 2, argv);
     if (win_valid_popup(wp) && old_lnum != wp->w_cursor.lnum)
 	popup_highlight_curline(wp);
