diff --git a/ChangeLog b/ChangeLog
index 76b4e37127228913e027df1377bfd9cca4d99499..de692f1f54876515b9a9bf26cc9030e3fc561edd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -23,6 +23,11 @@ CVS code -
 	- New function used as a wrapper for ungetch(). (DLR)
   get_mouseinput()
 	- Consolidate two if statements to increase efficiency. (DLR)
+	- Check kbinput against metaval instead of (erroneously) ctrlval
+	  when putting back a meta sequence. (DLR)
+	- If there are more than MAIN_VISIBLE shortcuts available, only
+	  register clicks on the first MAIN_VISIBLE shortcuts, since
+	  bottombars() only shows that many shortcuts. (DLR)
   do_yesno()
 	- Don't bother assigning the value of get_mouseinput() to
 	  anything.  Since allow_shortcuts is FALSE, its return value
diff --git a/src/winio.c b/src/winio.c
index 024646699df91682e5c1f382e9bd869dfb098f8e..4e155e3733f3d46ccf78ebef31a01f89881c70bb 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -1287,9 +1287,15 @@ bool get_mouseinput(int *mouse_x, int *mouse_y, bool allow_shortcuts)
 	/* Get the shortcut lists' length. */
 	if (currshortcut == main_list)
 	    currslen = MAIN_VISIBLE;
-	else
+	else {
 	    currslen = length_of_list(currshortcut);
 
+	    /* We don't show any more shortcuts than the main list
+	     * does. */
+	    if (currslen > MAIN_VISIBLE)
+		currslen = MAIN_VISIBLE;
+	}
+
 	/* Calculate the width of each shortcut in the list (it's the
 	 * same for all of them). */
 	if (currslen < 2)
@@ -1319,7 +1325,7 @@ bool get_mouseinput(int *mouse_x, int *mouse_y, bool allow_shortcuts)
 	 * has an equivalent control key, meta key sequence, or both. */
 	if (s->ctrlval != NANO_NO_KEY)
 	    unget_kbinput(s->ctrlval, FALSE);
-	else if (s->ctrlval != NANO_NO_KEY)
+	else if (s->metaval != NANO_NO_KEY)
 	    unget_kbinput(s->metaval, TRUE);
 
 	return TRUE;