updated for version 7.0186
diff --git a/src/popupmenu.c b/src/popupmenu.c
index acc111e..a129d14 100644
--- a/src/popupmenu.c
+++ b/src/popupmenu.c
@@ -240,12 +240,14 @@
 	if (pum_first > pum_selected - 4)
 	{
 	    /* scroll down; when we did a jump it's probably a PageUp then
-	     * scroll to put the selected entry at the bottom */
+	     * scroll a whole page */
 	    if (pum_first > pum_selected - 2)
 	    {
-		pum_first = pum_selected - pum_height + 1;
+		pum_first -= pum_height - 2;
 		if (pum_first < 0)
 		    pum_first = 0;
+		else if (pum_first > pum_selected)
+		    pum_first = pum_selected;
 	    }
 	    else
 		pum_first = pum_selected;
@@ -253,9 +255,13 @@
 	else if (pum_first < pum_selected - pum_height + 5)
 	{
 	    /* scroll up; when we did a jump it's probably a PageDown then
-	     * scroll to put the selected entry at the top */
+	     * scroll a whole page */
 	    if (pum_first < pum_selected - pum_height + 1 + 2)
-		pum_first = pum_selected;
+	    {
+		pum_first += pum_height - 2;
+		if (pum_first < pum_selected - pum_height + 1)
+		    pum_first = pum_selected - pum_height + 1;
+	    }
 	    else
 		pum_first = pum_selected - pum_height + 1;
 	}