diff --git a/ChangeLog b/ChangeLog
index a9349bfe10af31df53b2330620c1edce12928577..fcd7091c664fb1ef673083d1ab6fe4c3770aa34d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -39,11 +39,12 @@ CVS code -
 	  edit_update(), rename open_the_file() to open_file() since the
 	  latter has been removed, and rename load_a_file() to
 	  load_buffer().
-	- Add alternative shortcuts to the main list for moving to the
-	  beginning and end of a paragraph and justifying the entire
-	  file: Meta-( (Meta-9), Meta-) (Meta-0), and Meta-J,
-	  respectively.  Do this because Pico's practice of putting these
-	  shortcuts in the search menu is rather odd. (DLR)
+	- Add alternative shortcuts to the main and search shortcut
+	  lists for moving to the beginning and end of a paragraph and
+	  justifying the entire file: Meta-( (Meta-9), Meta-) (Meta-0),
+	  and Meta-J, respectively.  Do this because Pico's practice of
+	  putting these shortcuts only in the search shortcut list is
+	  rather odd. (DLR)
 	- Turn off extended input processing (the IEXTEN termios flag)
 	  as nano 1.2.x does.  New function disable_extended_input();
 	  changes to terminal_init(). (DLR)
@@ -57,11 +58,17 @@ CVS code -
 	- Add a multibuffer mode toggle to the "Execute Command" prompt,
 	  for consistency with the "Read File" prompt.  Changes to
 	  do_insertfile() and shortcut_init(). (DLR)
+	- Add an ^X toggle to the "Execute Command" prompt to go back to
+	  the "Insert File" prompt, and add a ^T toggle to the "Go To
+	  Line" prompt to go back to the "Where Is" prompt.  Changes to
+	  do_insertfile(), shortcut_init(), do_gotoline(), etc.
+	- Make sure a few uninitialized static variables are initialized
+	  to sane values. (DLR)
 - files.c:
   do_insertfile()
 	- Readd the NANO_SMALL #ifdef around the start_again: label to
 	  avoid a warning. (DLR)
-	- Simplify by reusing variables where possible. (DLR)
+	- Simplify by reusing variables whereever possible. (DLR)
 - global.c:
   shortcut_init()
 	- Remove redundant NANO_SMALL #ifdef. (DLR)
@@ -127,9 +134,17 @@ CVS code -
 	- 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)
+  check_statblank()
+	- Rename to check_statusblank(), and rename its associated
+	  global int statusblank too. (DLR)
   nanogetstr()
 	- Refresh the screen when Ctrl-L is pressed at the statusbar
 	  prompt, as Pico does. (DLR)
+	- Always return the key pressed by the user. (DLR)
+  statusq()
+	- Rework slightly to reset the cursor position when the user
+	  hits Enter as well as Cancel.  This means that resetstatuspos
+	  no longer needs to be global. (DLR)
   reset_cursor()
 	- If this is called before any files have been opened, as it can
 	  be by statusbar(), put the cursor at the top left corner of
diff --git a/TODO b/TODO
index 349ae1d648f1aa8b8145d3aa294f1c3f4d301bf3..d8169416c3d04e391bf8a73aef012c9604353d8d 100644
--- a/TODO
+++ b/TODO
@@ -11,11 +11,11 @@ For version 1.4:
 - Keystroke to implement "Add next sequence as raw" like vi's ^V.
   [DONE for edit window, needs to be done for statusbar prompt]
 - Spell check selected text only. [DONE]
-- Make "To line" (^W^T) and "Read from Command" (^R^X) re-enter their
+- Make "To Line" (^W^T) and "Read from Command" (^R^X) reenter their
   parent menu when their keystroke is entered a second time (^W^T^T and
-  (^R^X^X)(requires figuring out when to keep cursor pos and when not
-  to).
-- Fix resetstatuspos global which we shouldn't have.
+  (^R^X^X) (requires figuring out when to keep cursor position and when
+  not to). [DONE]
+- Fix resetstatuspos global which we shouldn't have. [DONE]
 - Rewrite the nano FAQ in SGML.
 
 Old requests:
diff --git a/src/cut.c b/src/cut.c
index 992abd666d573fe41eb977cd547fe4c081fa7229..d69af6521bc649e4a20ae0c394f9368db0868426 100644
--- a/src/cut.c
+++ b/src/cut.c
@@ -34,7 +34,7 @@ static int marked_cut;
 	/* Is the cutbuffer from a mark?  0 means whole-line cut, 1
 	 * means mark, and 2 means cut-from-cursor. */
 #ifndef NANO_SMALL
-static bool concatenate_cut;
+static bool concatenate_cut = FALSE;
 	/* Should we add this cut string to the end of the last one? */
 #endif
 static filestruct *cutbottom = NULL;
@@ -205,7 +205,7 @@ void do_cut_text(void)
 
     assert(current != NULL && current->data != NULL);
 
-    check_statblank();
+    check_statusblank();
 
     if (!keep_cutbuffer) {
 	free_filestruct(cutbuffer);
@@ -315,7 +315,7 @@ void do_uncut_text(void)
 #ifndef DISABLE_WRAPPING
     wrap_reset();
 #endif
-    check_statblank();
+    check_statusblank();
     if (cutbuffer == NULL || current == NULL)
 	return;			/* AIEEEEEEEEEEEE */
 
diff --git a/src/files.c b/src/files.c
index 5626c0475fb89d9c50cbffb3b1533e7863944b23..a7684559be03ea2105fd1d1b5fd142981b8a78b8 100644
--- a/src/files.c
+++ b/src/files.c
@@ -481,21 +481,41 @@ void do_insertfile(void)
     char *ans = mallocstrcpy(NULL, "");
 	/* The last answer the user typed on the statusbar.  Saved for if
 	 * they do M-F or cancel the file browser. */
+#ifndef NANO_SMALL
+    bool extcmd = FALSE;
+#endif
 
     wrap_reset();
 
 #if !defined(DISABLE_BROWSER) || (!defined(NANO_SMALL) && defined(ENABLE_MULTIBUFFER))
-  start_again:	/* Go here when the user cancels the file browser. */
+  start_again:
 #endif
 
+#ifndef NANO_SMALL
+    if (extcmd) {
 #ifdef ENABLE_MULTIBUFFER
-    if (ISSET(MULTIBUFFER))
-	msg = N_("File to insert into new buffer [from %s] ");
-    else
+	if (ISSET(MULTIBUFFER))
+	    msg = N_("Command to execute in new buffer [from %s] ");
+	else
+#endif
+	    msg = N_("Command to execute [from %s] ");
+    } else {
+#endif
+#ifdef ENABLE_MULTIBUFFER
+	if (ISSET(MULTIBUFFER)) {
+	    msg = N_("File to insert into new buffer [from %s] ");
+	} else
+#endif
+	    msg = N_("File to insert [from %s] ");
+#ifndef NANO_SMALL
+	}
 #endif
-	msg = N_("File to insert [from %s] ");
 
-    i = statusq(TRUE, insertfile_list, ans,
+    i = statusq(TRUE,
+#ifndef NANO_SMALL
+		extcmd ? extcmd_list :
+#endif
+		insertfile_list, ans,
 #ifndef NANO_SMALL
 		NULL,
 #endif
@@ -511,58 +531,33 @@ void do_insertfile(void)
 
 	ans = mallocstrcpy(ans, answer);
 
-#ifndef NANO_SMALL
-#ifdef ENABLE_MULTIBUFFER
+#if !defined(NANO_SMALL) && defined(ENABLE_MULTIBUFFER)
 	if (i == TOGGLE_MULTIBUFFER_KEY) {
 	    /* Don't allow toggling if we're in view mode. */
 	    if (!ISSET(VIEW_MODE))
 		TOGGLE(MULTIBUFFER);
 	    goto start_again;
 	}
-#endif /* ENABLE_MULTIBUFFER */
-	if (i == NANO_EXTCMD_KEY) {
-	    int j;
-
-#ifdef ENABLE_MULTIBUFFER
-  exec_again:	/* Go here when the user toggles multibuffer mode. */
-
-	    if (ISSET(MULTIBUFFER))
-		msg = N_("Command to execute in new buffer");
-	    else
-#endif
-		msg = N_("Command to execute");
-
-	    j = statusq(TRUE, extcmd_list, ans, NULL, _(msg));
-
-#ifdef ENABLE_MULTIBUFFER
-	    if (j == TOGGLE_MULTIBUFFER_KEY) {
-		/* Don't allow toggling if we're in view mode. */
-		if (!ISSET(VIEW_MODE)) {
-		    TOGGLE(MULTIBUFFER);
-		    ans = mallocstrcpy(NULL, answer);
-		}
-		goto exec_again;
-	    }
 #endif
 
-	    if (j == -1 || answer == NULL || answer[0] == '\0')
-		goto start_again;
-	}
-#endif /* !NANO_SMALL */
 #ifndef DISABLE_BROWSER
 	if (i == NANO_TOFILES_KEY) {
 	    char *tmp = do_browse_from(answer);
 
 	    if (tmp == NULL)
 		goto start_again;
-	    resetstatuspos = TRUE;
 	    free(answer);
 	    answer = tmp;
 	}
 #endif
 
 #ifndef NANO_SMALL
-	if (i == NANO_EXTCMD_KEY)
+	if (i == NANO_TOOTHERINSERT_KEY) {
+	    extcmd = !extcmd;
+	    goto start_again;
+	}
+
+	if (extcmd)
 	    execute_command(answer);
 	else {
 #endif
@@ -590,7 +585,7 @@ void do_insertfile(void)
 	}
 #endif
 
-	/* If we've gone off the bottom, recenter; otherwise, just redraw */
+	/* Refresh the screen. */
 	edit_refresh();
     } else
 	statusbar(_("Cancelled"));
@@ -2543,7 +2538,7 @@ char *do_browser(const char *inpath)
 	char *new_path;
 	    /* Used by the Go To Directory prompt. */
 
-	check_statblank();
+	check_statusblank();
 
 #if !defined(DISABLE_HELP) || !defined(DISABLE_MOUSE)
 	currshortcut = browser_list;
@@ -2700,8 +2695,8 @@ char *do_browser(const char *inpath)
 	    return do_browser(path);
 
 	/* Go to a specific directory */
-	case NANO_GOTO_KEY:
-	case NANO_GOTO_FKEY:
+	case NANO_GOTOLINE_KEY:
+	case NANO_GOTOLINE_FKEY:
 	case 'G': /* Pico compatibility */
 	case 'g':
 	    curs_set(1);
diff --git a/src/global.c b/src/global.c
index 39a1effad8402d75ef3c3d80fefee3315d696530..05fd10fb13aa864db0033a3fdcfac21308352fda 100644
--- a/src/global.c
+++ b/src/global.c
@@ -93,8 +93,6 @@ size_t quotelen;		/* strlen(quotestr) */
 char *backup_dir = NULL;	/* Backup directory. */
 #endif
 
-bool resetstatuspos;		/* Hack for resetting the status bar 
-				   cursor position */
 char *answer = NULL;		/* Answer str to many questions */
 int totlines = 0;		/* Total number of lines in the file */
 long totsize = 0;		/* Total number of bytes in the file */
@@ -130,7 +128,7 @@ shortcut *main_list = NULL;
 shortcut *whereis_list = NULL;
 shortcut *replace_list = NULL;
 shortcut *replace_list_2 = NULL; 	/* 2nd half of replace dialog */
-shortcut *goto_list = NULL;
+shortcut *gotoline_list = NULL;
 shortcut *writefile_list = NULL;
 shortcut *insertfile_list = NULL;
 #ifndef DISABLE_HELP
@@ -277,7 +275,7 @@ void shortcut_init(int unjustify)
 	N_("Uncut from the cutbuffer into the current line");
     const char *nano_cursorpos_msg = N_("Show the position of the cursor");
     const char *nano_spell_msg = N_("Invoke the spell checker, if available");
-    const char *nano_goto_msg = N_("Go to a specific line number");
+    const char *nano_gotoline_msg = N_("Go to a specific line number");
     const char *nano_replace_msg = N_("Replace text within the editor");
     const char *nano_prevline_msg = N_("Move to the previous line");
     const char *nano_nextline_msg = N_("Move to the next line");
@@ -470,8 +468,8 @@ void shortcut_init(int unjustify)
 #endif
 		nano_disabled_msg);
 
-    sc_init_one(&main_list, NANO_GOTO_KEY, go_to_line_msg,
-	IFHELP(nano_goto_msg, NANO_ALT_GOTO_KEY), NANO_GOTO_FKEY,
+    sc_init_one(&main_list, NANO_GOTOLINE_KEY, go_to_line_msg,
+	IFHELP(nano_gotoline_msg, NANO_GOTOLINE_ALTKEY), NANO_GOTOLINE_FKEY,
 	NANO_NO_KEY, VIEW, do_gotoline_void);
 
     sc_init_one(&main_list, NANO_REPLACE_KEY, replace_msg,
@@ -507,7 +505,7 @@ void shortcut_init(int unjustify)
 	NANO_NO_KEY, VIEW, total_refresh);
 
     sc_init_one(&main_list, NANO_MARK_KEY, N_("Mark Text"),
-	IFHELP(nano_mark_msg, NANO_ALT_MARK_KEY),
+	IFHELP(nano_mark_msg, NANO_MARK_ALTKEY),
 	NANO_NO_KEY, NANO_NO_KEY, NOVIEW,
 #ifndef NANO_SMALL
 		do_mark
@@ -615,29 +613,29 @@ void shortcut_init(int unjustify)
 	NANO_NO_KEY, VIEW, do_last_line);
 
     /* Translators: try to keep this string under 10 characters long */
-    sc_init_one(&whereis_list, NANO_OTHERSEARCH_KEY, replace_msg,
+    sc_init_one(&whereis_list, NANO_TOOTHERSEARCH_KEY, replace_msg,
 	IFHELP(nano_replace_msg, NANO_NO_KEY), NANO_REPLACE_FKEY,
 	NANO_NO_KEY, VIEW, do_replace);
 
     /* Translators: try to keep this string under 10 characters long */
-    sc_init_one(&whereis_list, NANO_FROMSEARCHTOGOTO_KEY, go_to_line_msg,
-	IFHELP(nano_goto_msg, NANO_NO_KEY), NANO_GOTO_FKEY,
+    sc_init_one(&whereis_list, NANO_TOGOTOLINE_KEY, go_to_line_msg,
+	IFHELP(nano_gotoline_msg, NANO_NO_KEY), NANO_GOTOLINE_FKEY,
 	NANO_NO_KEY, VIEW, do_gotoline_void);
 
 #ifndef DISABLE_JUSTIFY
     /* Translators: try to keep this string under 10 characters long */
     sc_init_one(&whereis_list, NANO_PARABEGIN_KEY, beg_of_par_msg,
-	IFHELP(nano_parabegin_msg, NANO_NO_KEY), NANO_NO_KEY,
-	NANO_NO_KEY, VIEW, do_para_begin);
+	IFHELP(nano_parabegin_msg, NANO_PARABEGIN_ALTKEY1), NANO_NO_KEY,
+	NANO_PARABEGIN_ALTKEY2, VIEW, do_para_begin);
 
     /* Translators: try to keep this string under 10 characters long */
     sc_init_one(&whereis_list, NANO_PARAEND_KEY, end_of_par_msg,
-	IFHELP(nano_paraend_msg, NANO_NO_KEY), NANO_NO_KEY,
-	NANO_NO_KEY, VIEW, do_para_end);
+	IFHELP(nano_paraend_msg, NANO_PARAEND_ALTKEY1), NANO_NO_KEY,
+	NANO_PARAEND_ALTKEY2, VIEW, do_para_end);
 
     /* Translators: try to keep this string under 10 characters long */
     sc_init_one(&whereis_list, NANO_FULLJUSTIFY_KEY, fulljstify_msg,
-	IFHELP(nano_fulljustify_msg, NANO_NO_KEY), NANO_NO_KEY,
+	IFHELP(nano_fulljustify_msg, NANO_FULLJUSTIFY_ALTKEY), NANO_NO_KEY,
 	NANO_NO_KEY, NOVIEW, do_full_justify);
 #endif
 
@@ -690,12 +688,12 @@ void shortcut_init(int unjustify)
 	NANO_NO_KEY, VIEW, do_last_line);
 
     /* Translators: try to keep this string under 12 characters long */
-    sc_init_one(&replace_list, NANO_OTHERSEARCH_KEY, N_("No Replace"),
+    sc_init_one(&replace_list, NANO_TOOTHERSEARCH_KEY, N_("No Replace"),
 	IFHELP(nano_whereis_msg, NANO_NO_KEY), NANO_REPLACE_FKEY,
 	NANO_NO_KEY, VIEW, do_search);
 
-    sc_init_one(&replace_list, NANO_FROMSEARCHTOGOTO_KEY, go_to_line_msg,
-	IFHELP(nano_goto_msg, NANO_NO_KEY), NANO_GOTO_FKEY,
+    sc_init_one(&replace_list, NANO_TOGOTOLINE_KEY, go_to_line_msg,
+	IFHELP(nano_gotoline_msg, NANO_NO_KEY), NANO_GOTOLINE_FKEY,
 	NANO_NO_KEY, VIEW, do_gotoline_void);
 
 #ifndef NANO_SMALL
@@ -748,9 +746,9 @@ void shortcut_init(int unjustify)
 	NANO_NO_KEY, VIEW, 0);
 #endif
 
-    free_shortcutage(&goto_list);
+    free_shortcutage(&gotoline_list);
 
-    sc_init_one(&goto_list, NANO_HELP_KEY, get_help_msg,
+    sc_init_one(&gotoline_list, NANO_HELP_KEY, get_help_msg,
 	IFHELP(nano_help_msg, NANO_NO_KEY), NANO_HELP_FKEY,
 	NANO_NO_KEY, VIEW,
 #ifndef DISABLE_HELP
@@ -760,18 +758,22 @@ void shortcut_init(int unjustify)
 #endif
 		);
 
-    sc_init_one(&goto_list, NANO_CANCEL_KEY, cancel_msg,
+    sc_init_one(&gotoline_list, NANO_CANCEL_KEY, cancel_msg,
 	IFHELP(nano_cancel_msg, NANO_NO_KEY), NANO_NO_KEY,
 	NANO_NO_KEY, VIEW, 0);
 
-    sc_init_one(&goto_list, NANO_FIRSTLINE_KEY, first_line_msg,
+    sc_init_one(&gotoline_list, NANO_FIRSTLINE_KEY, first_line_msg,
 	IFHELP(nano_firstline_msg, NANO_NO_KEY), NANO_NO_KEY,
 	NANO_NO_KEY, VIEW, do_first_line);
 
-    sc_init_one(&goto_list, NANO_LASTLINE_KEY, last_line_msg,
+    sc_init_one(&gotoline_list, NANO_LASTLINE_KEY, last_line_msg,
 	IFHELP(nano_lastline_msg, NANO_NO_KEY), NANO_NO_KEY,
 	NANO_NO_KEY, VIEW, do_last_line);
 
+    sc_init_one(&gotoline_list, NANO_TOOTHERWHEREIS_KEY, N_("Go To Text"),
+	IFHELP(nano_whereis_msg, NANO_NO_KEY), NANO_NO_KEY,
+	NANO_NO_KEY, VIEW, do_search);
+
 #ifndef DISABLE_HELP
     free_shortcutage(&help_list);
 
@@ -892,7 +894,7 @@ void shortcut_init(int unjustify)
      * It's useless since inserting files is disabled. */
     /* Translators: try to keep this string under 22 characters long */
     if (!ISSET(RESTRICTED))
-	sc_init_one(&insertfile_list, NANO_EXTCMD_KEY, N_("Execute Command"),
+	sc_init_one(&insertfile_list, NANO_TOOTHERINSERT_KEY, N_("Execute Command"),
 		IFHELP(nano_execute_msg, NANO_NO_KEY), NANO_NO_KEY,
 		NANO_NO_KEY, NOVIEW, 0);
 
@@ -942,6 +944,10 @@ void shortcut_init(int unjustify)
 	IFHELP(nano_cancel_msg, NANO_NO_KEY), NANO_NO_KEY,
 	NANO_NO_KEY, VIEW, 0);
 
+    sc_init_one(&extcmd_list, NANO_TOOTHERINSERT_KEY, N_("Insert File"),
+	IFHELP(nano_insert_msg, NANO_NO_KEY), NANO_NO_KEY,
+	NANO_NO_KEY, VIEW, 0);
+
 #ifdef ENABLE_MULTIBUFFER
     sc_init_one(&extcmd_list, NANO_NO_KEY, new_buffer_msg,
 	IFHELP(nano_multibuffer_msg, TOGGLE_MULTIBUFFER_KEY), NANO_NO_KEY,
@@ -975,8 +981,8 @@ void shortcut_init(int unjustify)
 	NANO_NO_KEY, VIEW, 0);
 
     /* Translators: try to keep this string under 22 characters long */
-    sc_init_one(&browser_list, NANO_GOTO_KEY, N_("Go To Dir"),
-	IFHELP(nano_gotodir_msg, NANO_ALT_GOTO_KEY), NANO_GOTO_FKEY,
+    sc_init_one(&browser_list, NANO_GOTOLINE_KEY, N_("Go To Dir"),
+	IFHELP(nano_gotodir_msg, NANO_GOTOLINE_ALTKEY), NANO_GOTOLINE_FKEY,
 	NANO_NO_KEY, VIEW, 0);
 
     free_shortcutage(&gotodir_list);
@@ -1161,7 +1167,7 @@ void thanks_for_all_the_fish(void)
     free_shortcutage(&whereis_list);
     free_shortcutage(&replace_list);
     free_shortcutage(&replace_list_2);
-    free_shortcutage(&goto_list);
+    free_shortcutage(&gotoline_list);
     free_shortcutage(&writefile_list);
     free_shortcutage(&insertfile_list);
 #ifndef DISABLE_HELP
diff --git a/src/move.c b/src/move.c
index 7e22d338a09912a69371e012e9ee191a1a93d358..bf524785dd5d28cca6640bf4e82eff4572841a7f 100644
--- a/src/move.c
+++ b/src/move.c
@@ -71,7 +71,7 @@ void do_home(void)
 #ifndef NANO_SMALL
     }
 #endif
-    check_statblank();
+    check_statusblank();
     if (need_horizontal_update(old_pww))
 	update_line(current, current_x);
 }
@@ -81,7 +81,7 @@ void do_end(void)
     size_t old_pww = placewewant;
     current_x = strlen(current->data);
     placewewant = xplustabs();
-    check_statblank();
+    check_statusblank();
     if (need_horizontal_update(old_pww))
 	update_line(current, current_x);
 }
@@ -129,7 +129,7 @@ void do_page_up(void)
     /* Update all the lines that need to be updated. */
     edit_redraw(old_current, old_pww);
 
-    check_statblank();
+    check_statusblank();
 }
 
 void do_page_down(void)
@@ -176,7 +176,7 @@ void do_page_down(void)
     /* Update all the lines that need to be updated. */
     edit_redraw(old_current, old_pww);
 
-    check_statblank();
+    check_statusblank();
 }
 
 void do_up(void)
@@ -184,7 +184,7 @@ void do_up(void)
 #ifndef DISABLE_WRAPPING
     wrap_reset();
 #endif
-    check_statblank();
+    check_statusblank();
 
     if (current->prev == NULL)
 	return;
@@ -217,7 +217,7 @@ void do_down(void)
 #ifndef DISABLE_WRAPPING
     wrap_reset();
 #endif
-    check_statblank();
+    check_statusblank();
 
     if (current->next == NULL)
 	return;
@@ -255,7 +255,7 @@ void do_left(int allow_update)
 	current_x = strlen(current->data);
     }
     placewewant = xplustabs();
-    check_statblank();
+    check_statusblank();
     if (allow_update && need_horizontal_update(old_pww))
 	update_line(current, current_x);
 }
@@ -277,7 +277,7 @@ void do_right(int allow_update)
 	current_x = 0;
     }
     placewewant = xplustabs();
-    check_statblank();
+    check_statusblank();
     if (allow_update && need_horizontal_update(old_pww))
 	update_line(current, current_x);
 }
diff --git a/src/nano.c b/src/nano.c
index f783f5d3238d133d3a14ff64f9e68cff12da4e48..abdd8f30e655506b564dbcc630758a633eccdd09 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -287,7 +287,7 @@ void help_init(void)
 		"the Search: prompt.  Hitting Enter without entering any text "
 		"will perform the previous search.\n\n The following function "
 		"keys are available in Search mode:\n\n");
-    else if (currshortcut == goto_list)
+    else if (currshortcut == gotoline_list)
 	htx = N_("Go To Line Help Text\n\n "
 		"Enter the line number that you wish to go to and hit "
 		"Enter.  If there are fewer lines of text than the "
diff --git a/src/nano.h b/src/nano.h
index b5f95040c7ff524f367df45245d74b4cd3e5b5ce..769410a64613a580e25e3a7a0db3f5fa671dab64 100644
--- a/src/nano.h
+++ b/src/nano.h
@@ -380,24 +380,28 @@ typedef struct historyheadtype {
 /* Normal keys. */
 #define NANO_XON_KEY		NANO_CONTROL_Q
 #define NANO_XOFF_KEY		NANO_CONTROL_S
-#define NANO_INSERTFILE_KEY	NANO_CONTROL_R
-#define NANO_INSERTFILE_FKEY	KEY_F(5)
+#define NANO_CANCEL_KEY		NANO_CONTROL_C
 #define NANO_EXIT_KEY		NANO_CONTROL_X
 #define NANO_EXIT_FKEY		KEY_F(2)
+#define NANO_INSERTFILE_KEY	NANO_CONTROL_R
+#define NANO_INSERTFILE_FKEY	KEY_F(5)
+#define NANO_TOOTHERINSERT_KEY	NANO_CONTROL_X
 #define NANO_WRITEOUT_KEY	NANO_CONTROL_O
 #define NANO_WRITEOUT_FKEY	KEY_F(3)
-#define NANO_GOTO_KEY		NANO_CONTROL_7
-#define NANO_GOTO_FKEY		KEY_F(13)
-#define NANO_ALT_GOTO_KEY	NANO_ALT_G
+#define NANO_GOTOLINE_KEY	NANO_CONTROL_7
+#define NANO_GOTOLINE_FKEY	KEY_F(13)
+#define NANO_GOTOLINE_ALTKEY	NANO_ALT_G
+#define NANO_TOGOTOLINE_KEY	NANO_CONTROL_T
 #define NANO_HELP_KEY		NANO_CONTROL_G
 #define NANO_HELP_FKEY		KEY_F(1)
 #define NANO_WHEREIS_KEY	NANO_CONTROL_W
 #define NANO_WHEREIS_FKEY	KEY_F(6)
 #define NANO_WHEREIS_NEXT_KEY	NANO_ALT_W
+#define NANO_TOOTHERWHEREIS_KEY	NANO_CONTROL_T
 #define NANO_REPLACE_KEY	NANO_CONTROL_4
 #define NANO_REPLACE_FKEY	KEY_F(14)
 #define NANO_ALT_REPLACE_KEY	NANO_ALT_R
-#define NANO_OTHERSEARCH_KEY	NANO_CONTROL_R
+#define NANO_TOOTHERSEARCH_KEY	NANO_CONTROL_R
 #define NANO_PREVPAGE_KEY	NANO_CONTROL_Y
 #define NANO_PREVPAGE_FKEY	KEY_F(7)
 #define NANO_NEXTPAGE_KEY	NANO_CONTROL_V
@@ -414,7 +418,6 @@ typedef struct historyheadtype {
 #define NANO_FIRSTLINE_FKEY	NANO_PREVPAGE_FKEY
 #define NANO_LASTLINE_KEY	NANO_NEXTPAGE_KEY
 #define NANO_LASTLINE_FKEY	NANO_NEXTPAGE_FKEY
-#define NANO_CANCEL_KEY		NANO_CONTROL_C
 #define NANO_REFRESH_KEY	NANO_CONTROL_L
 #define NANO_JUSTIFY_KEY	NANO_CONTROL_J
 #define NANO_JUSTIFY_FKEY	KEY_F(4)
@@ -425,7 +428,7 @@ typedef struct historyheadtype {
 #define NANO_FORWARD_KEY	NANO_CONTROL_F
 #define NANO_BACK_KEY		NANO_CONTROL_B
 #define NANO_MARK_KEY		NANO_CONTROL_6
-#define NANO_ALT_MARK_KEY	NANO_ALT_A
+#define NANO_MARK_ALTKEY	NANO_ALT_A
 #define NANO_HOME_KEY		NANO_CONTROL_A
 #define NANO_END_KEY		NANO_CONTROL_E
 #define NANO_DELETE_KEY		NANO_CONTROL_D
@@ -433,7 +436,6 @@ typedef struct historyheadtype {
 #define NANO_TAB_KEY		NANO_CONTROL_I
 #define NANO_SUSPEND_KEY	NANO_CONTROL_Z
 #define NANO_ENTER_KEY		NANO_CONTROL_M
-#define NANO_FROMSEARCHTOGOTO_KEY NANO_CONTROL_T
 #define NANO_TOFILES_KEY	NANO_CONTROL_T
 #define NANO_APPEND_KEY		NANO_ALT_A
 #define NANO_PREPEND_KEY	NANO_ALT_P
@@ -442,7 +444,6 @@ typedef struct historyheadtype {
 #define NANO_OPENPREV_ALTKEY	NANO_ALT_COMMA
 #define NANO_OPENNEXT_ALTKEY	NANO_ALT_PERIOD
 #define NANO_BRACKET_KEY	NANO_ALT_RBRACKET
-#define NANO_EXTCMD_KEY		NANO_CONTROL_X
 #define NANO_NEXTWORD_KEY	NANO_CONTROL_SPACE
 #define NANO_PREVWORD_KEY	NANO_ALT_SPACE
 #define NANO_PARABEGIN_KEY	NANO_CONTROL_W
diff --git a/src/proto.h b/src/proto.h
index 0b376fdea4f392c3c5a9c54cf6e29e8e4187bc45..ee27c60c297bd4f623fb2ebb0ddc98135bb26505 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -102,7 +102,7 @@ extern char *syntaxstr;
 
 extern shortcut *shortcut_list;
 extern shortcut *main_list, *whereis_list;
-extern shortcut *replace_list, *goto_list;
+extern shortcut *replace_list, *gotoline_list;
 extern shortcut *writefile_list, *insertfile_list;
 extern shortcut *replace_list_2;
 #ifndef NANO_SMALL
@@ -541,7 +541,7 @@ size_t strlenpt(const char *buf);
 void blank_titlebar(void);
 void blank_edit(void);
 void blank_statusbar(void);
-void check_statblank(void);
+void check_statusblank(void);
 void blank_bottombars(void);
 char *display_string(const char *buf, size_t start_col, size_t len);
 void nanoget_repaint(const char *buf, const char *inputbuf, size_t x);
diff --git a/src/search.c b/src/search.c
index b70f9b1bb114993ac366e2215c8971d44e4dcf14..2b476f24be97e6637ba2daa5947b1df512904525 100644
--- a/src/search.c
+++ b/src/search.c
@@ -231,10 +231,10 @@ int search_init(bool replacing)
 	    return 1;
 #endif
 #endif /* !NANO_SMALL */
-	case NANO_OTHERSEARCH_KEY:
+	case NANO_TOOTHERSEARCH_KEY:
 	    backupstring = mallocstrcpy(backupstring, answer);
 	    return -2;	/* Call the opposite search function. */
-	case NANO_FROMSEARCHTOGOTO_KEY:
+	case NANO_TOGOTOLINE_KEY:
 #ifndef NANO_SMALL
 	    search_history.current = search_history.next;
 #endif
@@ -385,6 +385,7 @@ void do_search(void)
 #ifndef DISABLE_WRAPPING
     wrap_reset();
 #endif
+
     i = search_init(FALSE);
     if (i == -1)	/* Cancel, Go to Line, blank search string, or
 			 * regcomp() failed. */
@@ -858,7 +859,7 @@ void do_gotoline(int line, bool save_pos)
 {
     if (line <= 0) {		/* Ask for it. */
 	char *ans = mallocstrcpy(NULL, answer);
-	int st = statusq(FALSE, goto_list, line < 0 ? ans : "",
+	int i = statusq(FALSE, gotoline_list, line < 0 ? ans : "",
 #ifndef NANO_SMALL
 		NULL,
 #endif
@@ -867,9 +868,15 @@ void do_gotoline(int line, bool save_pos)
 	free(ans);
 
 	/* Cancel, or Enter with blank string. */
-	if (st == -1 || st == -2)
+	if (i == -1 || i == -2)
 	    statusbar(_("Cancelled"));
-	if (st != 0) {
+
+	if (i == NANO_TOOTHERWHEREIS_KEY) {
+	    do_search();
+	    return;
+	}
+
+	if (i != 0) {
 	    display_main_list();
 	    return;
 	}
diff --git a/src/winio.c b/src/winio.c
index aaa0f4fa6d1f6f3be641852e3c3c63f591049d21..12f701bcf74c6082aeba942b54fe6470c213231e 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -30,9 +30,12 @@
 #include "proto.h"
 #include "nano.h"
 
-static int statblank = 0;	/* Number of keystrokes left after
-				   we call statusbar(), before we
-				   actually blank the statusbar */
+static int statusblank = 0;	/* Number of keystrokes left after
+				 * we call statusbar(), before we
+				 * actually blank the statusbar. */
+static bool resetstatuspos = FALSE;
+				/* Should we reset the statusbar cursor
+				 * position? */
 
 /* Control character compatibility:
  *
@@ -1628,12 +1631,12 @@ void blank_statusbar(void)
     mvwaddstr(bottomwin, 0, 0, hblank);
 }
 
-void check_statblank(void)
+void check_statusblank(void)
 {
-    if (statblank > 1)
-	statblank--;
-    else if (statblank == 1 && !ISSET(CONSTUPDATE)) {
-	statblank = 0;
+    if (statusblank > 1)
+	statusblank--;
+    else if (statusblank == 1 && !ISSET(CONSTUPDATE)) {
+	statusblank = 0;
 	blank_statusbar();
 	wnoutrefresh(bottomwin);
 	reset_cursor();
@@ -1824,7 +1827,7 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
      * disable all keys that would change the text if the filename isn't
      * blank and we're at the "Write File" prompt. */
     while ((kbinput = get_kbinput(bottomwin, &meta_key, &func_key)) !=
-	NANO_ENTER_KEY) {
+	NANO_CANCEL_KEY && kbinput != NANO_ENTER_KEY) {
 	for (t = s; t != NULL; t = t->next) {
 #ifdef DEBUG
 	    fprintf(stderr, "Aha! \'%c\' (%d)\n", kbinput, kbinput);
@@ -2086,11 +2089,7 @@ int nanogetstr(int allowtabs, const char *buf, const char *def,
     /* We finished putting in an answer; reset x */
     x = -1;
 
-    /* Just check for a blank answer here */
-    if (answer[0] == '\0')
-	return -2;
-    else
-	return 0;
+    return kbinput;
 }
 
 void titlebar(const char *path)
@@ -2295,7 +2294,7 @@ void statusbar(const char *msg, ...)
     }
 
     SET(DISABLE_CURPOS);
-    statblank = 26;
+    statusblank = 26;
 }
 
 void bottombars(const shortcut *s)
@@ -3026,14 +3025,19 @@ int statusq(int allowtabs, const shortcut *s, const char *def,
 	break;
 #ifndef DISABLE_JUSTIFY
     case NANO_PARABEGIN_KEY:
+    case NANO_PARABEGIN_ALTKEY1:
+    case NANO_PARABEGIN_ALTKEY2:
 	do_para_begin();
 	resetstatuspos = TRUE;
 	break;
     case NANO_PARAEND_KEY:
+    case NANO_PARAEND_ALTKEY1:
+    case NANO_PARAEND_ALTKEY2:
 	do_para_end();
 	resetstatuspos = TRUE;
 	break;
     case NANO_FULLJUSTIFY_KEY:
+    case NANO_FULLJUSTIFY_ALTKEY:
 	if (!ISSET(VIEW_MODE))
 	    do_full_justify();
 	resetstatuspos = TRUE;
@@ -3043,6 +3047,10 @@ int statusq(int allowtabs, const shortcut *s, const char *def,
 	ret = -1;
 	resetstatuspos = TRUE;
 	break;
+    case NANO_ENTER_KEY:
+	ret = (answer[0] == '\0') ? -2 : 0;
+	resetstatuspos = TRUE;
+	break;
     }
     blank_statusbar();