diff --git a/ChangeLog b/ChangeLog
index 6baaccfc902b9ca58ac9874aa41da48ce3259d5b..641f04b360497d55809b0208f3cca42b0e79c1d1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -99,8 +99,10 @@ CVS code -
 	  do_delete(). (DLR)
 	- Ignore unhandled meta key sequences and escape sequences, and
 	  indicate it on the statusbar when we get an unhandled shortcut
-	  or toggle, as Pico does.  New function is_ascii_cntrl_char();
-	  changes to do_input(), do_statusbar_input(), and
+	  or toggle, as Pico does.  To get this to work properly, add a
+	  shortcut for moving to the next search/replace string.  New
+	  function is_ascii_cntrl_char(); changes to shortcut_init(),
+	  do_input(), do_statusbar_input(), get_prompt_string(), and
 	  parse_kbinput(). (DLR, suggested by Nick Warne and Benno
 	  Schulenberg)
 - browser.c:
diff --git a/src/global.c b/src/global.c
index 6e4c9c328ee1e43bfc87487abff53ba81c798e8b..b3ffb3f5de202aa9b5da05ad9ea4f2a9178b0a91 100644
--- a/src/global.c
+++ b/src/global.c
@@ -298,8 +298,9 @@ void shortcut_init(bool unjustify)
     const char *regexp_msg = N_("Regexp");
 #endif
 #ifndef NANO_TINY
+    const char *prev_history_msg = N_("PrevHstory");
     /* TRANSLATORS: Try to keep this and previous strings at most 10 characters. */
-    const char *history_msg = N_("History");
+    const char *next_history_msg = N_("NextHstory");
 #ifdef ENABLE_MULTIBUFFER
     /* TRANSLATORS: Try to keep this at most 16 characters. */
     const char *new_buffer_msg = N_("New Buffer");
@@ -419,8 +420,10 @@ void shortcut_init(bool unjustify)
     const char *nano_regexp_msg = N_("Use regular expressions");
 #endif
 #ifndef NANO_TINY
-    const char *nano_history_msg =
-	N_("Edit the previous search/replace strings");
+    const char *nano_prev_history_msg =
+	N_("Edit the previous search/replace string");
+    const char *nano_next_history_msg =
+	N_("Edit the next search/replace string");
 #endif
 #ifndef DISABLE_BROWSER
     const char *nano_tofiles_msg = N_("Go to file browser");
@@ -779,8 +782,12 @@ void shortcut_init(bool unjustify)
 #endif
 
 #ifndef NANO_TINY
-    sc_init_one(&whereis_list, NANO_PREVLINE_KEY, history_msg,
-	IFHELP(nano_history_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
+    sc_init_one(&whereis_list, NANO_PREVLINE_KEY, prev_history_msg,
+	IFHELP(nano_prev_history_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
+	NANO_NO_KEY, VIEW, NULL);
+
+    sc_init_one(&whereis_list, NANO_NEXTLINE_KEY, next_history_msg,
+	IFHELP(nano_next_history_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
 	NANO_NO_KEY, VIEW, NULL);
 
     sc_init_one(&whereis_list, NANO_CUTTILLEND_KEY, cut_till_end_msg,
@@ -819,7 +826,7 @@ void shortcut_init(bool unjustify)
 	IFHELP(nano_lastline_msg, FALSE), NANO_LASTLINE_ALTKEY,
 	NANO_LASTLINE_FKEY, NANO_LASTLINE_ALTKEY2, VIEW, do_last_line);
 
-    /* TRANSLATORS: Try to keep this at most 12 characters. */
+    /* TRANSLATORS: Try to keep this at most 10 characters. */
     sc_init_one(&replace_list, NANO_TOOTHERSEARCH_KEY, N_("No Replace"),
 	IFHELP(nano_whereis_msg, FALSE), NANO_NO_KEY, NANO_REPLACE_FKEY,
 	NANO_NO_KEY, VIEW, NULL);
@@ -845,8 +852,12 @@ void shortcut_init(bool unjustify)
 #endif
 
 #ifndef NANO_TINY
-    sc_init_one(&replace_list, NANO_PREVLINE_KEY, history_msg,
-	IFHELP(nano_history_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
+    sc_init_one(&replace_list, NANO_PREVLINE_KEY, prev_history_msg,
+	IFHELP(nano_prev_history_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
+	NANO_NO_KEY, VIEW, NULL);
+
+    sc_init_one(&replace_list, NANO_NEXTLINE_KEY, next_history_msg,
+	IFHELP(nano_next_history_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
 	NANO_NO_KEY, VIEW, NULL);
 #endif
 
@@ -876,8 +887,12 @@ void shortcut_init(bool unjustify)
 	NANO_LASTLINE_FKEY, NANO_LASTLINE_ALTKEY2, VIEW, do_last_line);
 
 #ifndef NANO_TINY
-    sc_init_one(&replace_list_2, NANO_PREVLINE_KEY, history_msg,
-	IFHELP(nano_history_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
+    sc_init_one(&replace_list_2, NANO_PREVLINE_KEY, prev_history_msg,
+	IFHELP(nano_prev_history_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
+	NANO_NO_KEY, VIEW, NULL);
+
+    sc_init_one(&replace_list_2, NANO_NEXTLINE_KEY, next_history_msg,
+	IFHELP(nano_next_history_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
 	NANO_NO_KEY, VIEW, NULL);
 #endif
 
@@ -1188,8 +1203,12 @@ void shortcut_init(bool unjustify)
 #endif
 
 #ifndef NANO_SMALL
-    sc_init_one(&whereis_file_list, NANO_PREVLINE_KEY, history_msg,
-	IFHELP(nano_history_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
+    sc_init_one(&whereis_file_list, NANO_PREVLINE_KEY, prev_history_msg,
+	IFHELP(nano_prev_history_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
+	NANO_NO_KEY, VIEW, NULL);
+
+    sc_init_one(&whereis_file_list, NANO_NEXTLINE_KEY, next_history_msg,
+	IFHELP(nano_next_history_msg, FALSE), NANO_NO_KEY, NANO_NO_KEY,
 	NANO_NO_KEY, VIEW, NULL);
 #endif
 
diff --git a/src/help.c b/src/help.c
index 611045b2ac46e0d3ca58c04242ed818b3a8434cc..62aa66f6fc2d18cb89bdd77a5fb94d51c4315cf4 100644
--- a/src/help.c
+++ b/src/help.c
@@ -32,7 +32,7 @@
 static char *help_text = NULL;
 	/* The text displayed in the help window. */
 
-/* Our dynamic, shortcut-list-compliant help function.  refresh_func is
+/* Our dynamic, shortcut list-compliant help function.  refresh_func is
  * the function we will call to refresh the edit window.*/
 void do_help(void (*refresh_func)(void))
 {
@@ -423,8 +423,8 @@ void help_init(void)
     /* Now add our shortcut info.  Assume that each shortcut has, at the
      * very least, an equivalent control key, an equivalent primary meta
      * key sequence, or both.  Also assume that the meta key values are
-     * not control characters.  We can display a maximum of 3 shortcut
-     * entries. */
+     * not control characters.  We can display a maximum of three
+     * shortcut entries. */
     for (s = currshortcut; s != NULL; s = s->next) {
 	int entries = 0;
 
diff --git a/src/nano.c b/src/nano.c
index ece0195aa93df5e6992e940375e34c3d415cc39d..c4dd937759d530b329572e981fb5ffd19062b5f8 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -1298,16 +1298,13 @@ int do_input(bool *meta_key, bool *func_key, bool *s_or_t, bool
 	);
 
     /* If we got a non-high-bit control key or a meta key sequence, and
-     * it's not a shortcut or toggle, ignore it.  If it's a meta key
-     * sequence, throw it out completely, so that we don't end up
-     * inserting its second character as though it were typed. */
+     * it's not a shortcut or toggle, throw it out. */
     if (*s_or_t == FALSE) {
 	if (is_ascii_cntrl_char(input) || *meta_key == TRUE) {
-	    if (*meta_key == TRUE) {
-		*meta_key = FALSE;
-		input = ERR;
-	    }
 	    statusbar(_("Unknown Command"));
+	    if (*meta_key == TRUE)
+		*meta_key = FALSE;
+	    input = ERR;
 	}
     }
 
diff --git a/src/prompt.c b/src/prompt.c
index 0fdac60227bb13d711faf4363c7752d6397b382e..5f5430c7e5eda85a495ef6991ba57e7d0b1282c6 100644
--- a/src/prompt.c
+++ b/src/prompt.c
@@ -82,11 +82,11 @@ int do_statusbar_input(bool *meta_key, bool *func_key, bool *s_or_t,
 
     /* If we got a shortcut from the current list, or a "universal"
      * statusbar prompt shortcut, set have_shortcut to TRUE. */
-    have_shortcut = (s != NULL || input == NANO_REFRESH_KEY || input ==
-	NANO_HOME_KEY || input == NANO_END_KEY || input ==
-	NANO_BACK_KEY || input == NANO_FORWARD_KEY || input ==
-	NANO_BACKSPACE_KEY || input == NANO_DELETE_KEY || input ==
-	NANO_CUT_KEY ||
+    have_shortcut = (s != NULL || input == NANO_ENTER_KEY || input ==
+	NANO_REFRESH_KEY || input == NANO_HOME_KEY || input ==
+	NANO_END_KEY || input == NANO_BACK_KEY || input ==
+	NANO_FORWARD_KEY || input == NANO_BACKSPACE_KEY || input ==
+	NANO_DELETE_KEY || input == NANO_CUT_KEY ||
 #ifndef NANO_TINY
 	input == NANO_NEXTWORD_KEY ||
 #endif
@@ -100,15 +100,12 @@ int do_statusbar_input(bool *meta_key, bool *func_key, bool *s_or_t,
     *s_or_t = have_shortcut;
 
     /* If we got a non-high-bit control key or a meta key sequence, and
-     * it's not a shortcut or toggle, ignore it.  If it's a meta key
-     * sequence, throw it out completely, so that we don't end up
-     * inserting its second character as though it were typed. */
+     * it's not a shortcut or toggle, throw it out. */
     if (*s_or_t == FALSE) {
 	if (is_ascii_cntrl_char(input) || *meta_key == TRUE) {
-	    if (*meta_key == TRUE) {
+	    if (*meta_key == TRUE)
 		*meta_key = FALSE;
-		input = ERR;
-	    }
+	    input = ERR;
 	}
     }
 
@@ -161,6 +158,8 @@ int do_statusbar_input(bool *meta_key, bool *func_key, bool *s_or_t,
 	if (have_shortcut) {
 	    switch (input) {
 		/* Handle the "universal" statusbar prompt shortcuts. */
+		case NANO_ENTER_KEY:
+		    break;
 		case NANO_REFRESH_KEY:
 		    total_statusbar_refresh(refresh_func);
 		    break;
@@ -1062,6 +1061,13 @@ int get_prompt_string(bool allow_tabs,
 		    }
 
 		    update_statusbar_line(answer, statusbar_x);
+
+		    /* This key has a shortcut list entry when it's used
+		     * to move to an older search, which means that
+		     * finished has been set to TRUE.  Set it back to
+		     * FALSE here, so that we aren't kicked out of the
+		     * statusbar prompt. */
+		    finished = FALSE;
 		}
 		break;
 #endif /* !NANO_TINY */
diff --git a/src/winio.c b/src/winio.c
index 6f3360efe166522103a4e2879b9cf0f999b8f2e5..36b9681275a7a63c3b9b2e3e39047e3102deb426 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -536,8 +536,8 @@ int parse_kbinput(WINDOW *win, bool *meta_key, bool *func_key)
 				&ignore_seq);
 
 			/* If the escape sequence is unrecognized and
-			 * not ignored, throw it out completely and
-			 * indicate this on the statusbar. */
+			 * not ignored, throw it out, and indicate this
+			 * on the statusbar. */
 			if (retval == ERR && !ignore_seq)
 			    statusbar(_("Unknown Command"));