diff --git a/BUGS b/BUGS
index 932e140..76bea52 100644
--- a/BUGS
+++ b/BUGS
@@ -120,4 +120,8 @@
 
 ** Open BUGS **
 
+Informal note - when using marked write to file, if there's only one
+line of text hilighted, it writes the whole rest of the ifle to disk and
+goes bonkers.  Delete this message when fixed.
+
 $Id$
diff --git a/ChangeLog b/ChangeLog
index edeadaf..953b21d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -40,6 +40,17 @@
 	  nano_reverse_msg, new functions revstrstr and revstrcasestr,
 	  many changes to search functions.  Not too big a code size
 	  increase!
+	- Moved extension functions (Case Sensitive, Regexp, and Backwards
+	  Search, Append key in write file function) to Meta keys, as
+	  people are complaining loudly about nano not being control-key
+	  compatible with Pico, which is a Bag Thing (TM).  Changes to
+	  shortcut_init, toggle_init, new toggles for backwards and regexp
+	  (and you can now toggle all search options including regexp at
+	  the Search: prompt!)  Changes to nanogetstr to enable Meta
+	  keys to be grabbed, changes to onekey to print M-style shortcuts. 
+	- New macro TOGGLE which just toggles, no more silly checking
+	  ISSET and then using SET or UNSET when we want a simple toggle
+	  for a flag.
 - configure.in:
 	- New option, --enable-nanorc, which allows people to have a .nanorc
 	  initialization file and set options normally used on the command
diff --git a/global.c b/global.c
index 7dea333..0290320 100644
--- a/global.c
+++ b/global.c
@@ -139,7 +139,8 @@
 #ifndef NANO_SMALL
     char *toggle_const_msg, *toggle_autoindent_msg, *toggle_suspend_msg,
 	*toggle_nohelp_msg, *toggle_picomode_msg, *toggle_mouse_msg,
-	*toggle_cuttoend_msg, *toggle_wrap_msg;
+	*toggle_cuttoend_msg, *toggle_wrap_msg, *toggle_case_msg, 
+	*toggle_backwards_msg;
 #ifdef HAVE_REGEX_H
     char *toggle_regexp_msg;
 #endif
@@ -151,6 +152,8 @@
     toggle_picomode_msg = _("Pico mode");
     toggle_mouse_msg = _("Mouse support");
     toggle_cuttoend_msg = _("Cut to end");
+    toggle_backwards_msg = _("Backwards Search");
+    toggle_case_msg = _("Case Sensitive Search");
 #ifdef HAVE_REGEX_H
     toggle_regexp_msg = _("Regular expressions");
 #endif
@@ -172,8 +175,12 @@
 		    USE_MOUSE);
     toggle_init_one(&toggles[7], TOGGLE_CUTTOEND_KEY, toggle_cuttoend_msg,
 		    CUT_TO_END);
+    toggle_init_one(&toggles[8], TOGGLE_BACKWARDS_KEY, toggle_backwards_msg,
+		    REVERSE_SEARCH);
+    toggle_init_one(&toggles[9], TOGGLE_CASE_KEY, toggle_case_msg,
+		    CASE_SENSITIVE);    
 #ifdef HAVE_REGEX_H
-    toggle_init_one(&toggles[8], TOGGLE_REGEXP_KEY, toggle_regexp_msg,
+    toggle_init_one(&toggles[10], TOGGLE_REGEXP_KEY, toggle_regexp_msg,
 		    USE_REGEXP);
 #endif
 #endif
@@ -194,7 +201,8 @@
 	"", *nano_backspace_msg = "", *nano_tab_msg =
 	"", *nano_enter_msg = "", *nano_case_msg =
 	"", *nano_cancel_msg = "", *nano_unjustify_msg = 
-	"", *nano_append_msg = "", *nano_reverse_msg = "";
+	"", *nano_append_msg = "", *nano_reverse_msg = 
+	"", *nano_regexp_msg = "";
 
 #ifndef NANO_SMALL
     char *nano_tofiles_msg = "";
@@ -237,6 +245,7 @@
     nano_cancel_msg = _("Cancel the current function");
     nano_append_msg = _("Append to the current file");
     nano_reverse_msg = _("Search Backwards");
+    nano_regexp_msg = _("Use Regular Expressions");
 #endif
 
 	sc_init_one(&main_list[0], NANO_HELP_KEY, _("Get Help"),
@@ -359,22 +368,26 @@
     sc_init_one(&whereis_list[1], NANO_LASTLINE_KEY, _("Last Line"),
 		nano_lastline_msg, 0, 0, 0, VIEW, do_last_line);
 
-    sc_init_one(&whereis_list[2], NANO_CASE_KEY, _("Case Sens"),
-		nano_case_msg, 0, 0, 0, VIEW, 0);
-
-
-    sc_init_one(&whereis_list[3], NANO_OTHERSEARCH_KEY, _("Replace"),
+    sc_init_one(&whereis_list[2], NANO_OTHERSEARCH_KEY, _("Replace"),
 		nano_replace_msg, 0, 0, 0, VIEW, do_replace);
 
-    sc_init_one(&whereis_list[4], NANO_FROMSEARCHTOGOTO_KEY,
+    sc_init_one(&whereis_list[3], NANO_FROMSEARCHTOGOTO_KEY,
 		_("Goto Line"), nano_goto_msg, 0, 0, 0, VIEW,
 		do_gotoline_void);
 
-    sc_init_one(&whereis_list[5], NANO_REVERSESEARCH_KEY, _("Backward"),
+    sc_init_one(&whereis_list[4], NANO_CANCEL_KEY, _("Cancel"),
+		nano_cancel_msg, 0, 0, 0, VIEW, 0);
+
+    sc_init_one(&whereis_list[5], TOGGLE_CASE_KEY, _("Case Sens"),
+		nano_case_msg, 0, 0, 0, VIEW, 0);
+
+    sc_init_one(&whereis_list[6], TOGGLE_BACKWARDS_KEY, _("Backward"),
 		nano_reverse_msg, 0, 0, 0, VIEW, 0);
 
-    sc_init_one(&whereis_list[6], NANO_CANCEL_KEY, _("Cancel"),
-		nano_cancel_msg, 0, 0, 0, VIEW, 0);
+#ifdef HAVE_REGEX_H
+    sc_init_one(&whereis_list[7], TOGGLE_REGEXP_KEY, _("Regexp"),
+		nano_regexp_msg, 0, 0, 0, VIEW, 0);
+#endif
 
     sc_init_one(&replace_list[0], NANO_FIRSTLINE_KEY, _("First Line"),
 		nano_firstline_msg, 0, 0, 0, VIEW, do_first_line);
@@ -382,21 +395,26 @@
     sc_init_one(&replace_list[1], NANO_LASTLINE_KEY, _("Last Line"),
 		nano_lastline_msg, 0, 0, 0, VIEW, do_last_line);
 
-    sc_init_one(&replace_list[2], NANO_CASE_KEY, _("Case Sens"),
-		nano_case_msg, 0, 0, 0, VIEW, 0);
-
-    sc_init_one(&replace_list[3], NANO_OTHERSEARCH_KEY, _("No Replace"),
+    sc_init_one(&replace_list[2], NANO_OTHERSEARCH_KEY, _("No Replace"),
 		nano_whereis_msg, 0, 0, 0, VIEW, do_search);
 
-    sc_init_one(&replace_list[4], NANO_FROMSEARCHTOGOTO_KEY,
+    sc_init_one(&replace_list[3], NANO_FROMSEARCHTOGOTO_KEY,
 		_("Goto Line"), nano_goto_msg, 0, 0, 0, VIEW,
 		do_gotoline_void);
 
-    sc_init_one(&replace_list[5], NANO_REVERSESEARCH_KEY, _("Backward"),
+    sc_init_one(&replace_list[4], NANO_CANCEL_KEY, _("Cancel"),
+		nano_cancel_msg, 0, 0, 0, VIEW, 0);
+
+    sc_init_one(&replace_list[5], TOGGLE_CASE_KEY, _("Case Sens"),
+		nano_case_msg, 0, 0, 0, VIEW, 0);
+
+    sc_init_one(&replace_list[6], TOGGLE_BACKWARDS_KEY, _("Backward"),
 		nano_reverse_msg, 0, 0, 0, VIEW, 0);
 
-    sc_init_one(&replace_list[6], NANO_CANCEL_KEY, _("Cancel"),
-		nano_cancel_msg, 0, 0, 0, VIEW, 0);
+#ifdef HAVE_REGEX_H
+    sc_init_one(&replace_list[7], TOGGLE_REGEXP_KEY, _("Regexp"),
+		nano_regexp_msg, 0, 0, 0, VIEW, 0);
+#endif
 
 
     sc_init_one(&replace_list_2[0], NANO_FIRSTLINE_KEY, _("First Line"),
diff --git a/nano.c b/nano.c
index bed6938..f605dde 100644
--- a/nano.c
+++ b/nano.c
@@ -2146,10 +2146,8 @@
     char *enabled = _("enabled");
     char *disabled = _("disabled");
 
-    if (ISSET(toggles[which].flag))
-	UNSET(toggles[which].flag);
-    else
-	SET(toggles[which].flag);
+    /* Even easier! */
+    TOGGLE(toggles[which].flag);
 
     switch (toggles[which].val) {
     case TOGGLE_PICOMODE_KEY:
diff --git a/nano.h b/nano.h
index 23c928f..b381d02 100644
--- a/nano.h
+++ b/nano.h
@@ -34,6 +34,7 @@
 #define SET(bit) flags |= bit
 #define UNSET(bit) flags &= ~bit
 #define ISSET(bit) (flags & bit)
+#define TOGGLE(bit) flags ^= bit
 
 
 #ifdef USE_SLANG	/* Slang support enabled */
@@ -206,7 +207,6 @@
 #define NANO_REPLACE_FKEY	KEY_F(14)
 #define NANO_ALT_REPLACE_KEY	NANO_ALT_R
 #define NANO_OTHERSEARCH_KEY	NANO_CONTROL_R
-#define NANO_REVERSESEARCH_KEY NANO_CONTROL_B
 #define NANO_PREVPAGE_KEY	NANO_CONTROL_Y
 #define NANO_PREVPAGE_FKEY	KEY_F(7)
 #define NANO_NEXTPAGE_KEY	NANO_CONTROL_V
@@ -222,7 +222,6 @@
 #define NANO_FIRSTLINE_KEY	NANO_PREVPAGE_KEY
 #define NANO_LASTLINE_KEY	NANO_NEXTPAGE_KEY
 #define NANO_CANCEL_KEY		NANO_CONTROL_C
-#define NANO_CASE_KEY		NANO_CONTROL_A
 #define NANO_REFRESH_KEY	NANO_CONTROL_L
 #define NANO_JUSTIFY_KEY	NANO_CONTROL_J
 #define NANO_JUSTIFY_FKEY	KEY_F(4)
@@ -241,7 +240,7 @@
 #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_CONTROL_A
+#define NANO_APPEND_KEY		NANO_ALT_A
 
 #define TOGGLE_CONST_KEY	NANO_ALT_C
 #define TOGGLE_AUTOINDENT_KEY	NANO_ALT_I
@@ -252,11 +251,23 @@
 #define TOGGLE_CUTTOEND_KEY	NANO_ALT_K
 #define TOGGLE_REGEXP_KEY	NANO_ALT_E
 #define TOGGLE_WRAP_KEY		NANO_ALT_W
+#define TOGGLE_BACKWARDS_KEY	NANO_ALT_B
+#define TOGGLE_CASE_KEY		NANO_ALT_A
+
+/* Toggle stuff, these static lengths need to go away RSN */
+
+#ifdef HAVE_REGEX_H
+#define TOGGLE_LEN 11
+#define WHEREIS_LIST_LEN 8
+#define REPLACE_LIST_LEN 8
+#else
+#define TOGGLE_LEN 10
+#define WHEREIS_LIST_LEN 7
+#define REPLACE_LIST_LEN 7
+#endif
 
 #define MAIN_LIST_LEN 26
 #define MAIN_VISIBLE 12
-#define WHEREIS_LIST_LEN 7
-#define REPLACE_LIST_LEN 7
 #define REPLACE_LIST_2_LEN 3
 #define GOTO_LIST_LEN 3
 #define GOTODIR_LIST_LEN 1
@@ -272,12 +283,6 @@
 #define IMSERTFILE_LIST_LEN 1
 #endif
 
-#ifdef HAVE_REGEX_H
-#define TOGGLE_LEN 9
-#else
-#define TOGGLE_LEN 8
-#endif
-
 #define VIEW 1
 #define NOVIEW 0
 
diff --git a/search.c b/search.c
index 584c138..74cb74c 100644
--- a/search.c
+++ b/search.c
@@ -72,7 +72,7 @@
 */
 int search_init(int replacing)
 {
-    int i = 0;
+    int i = 0, j;
     char *buf;
     char *prompt;
     static char *backupstring = NULL;
@@ -137,7 +137,10 @@
 	free(backupstring);
 	backupstring = NULL;
 	return -1;
-    } else if (i == -2) {	/* Same string */
+    } else 
+    switch (i) {
+
+    case -2:	/* Same string */
 #ifdef HAVE_REGEX_H
 	if (ISSET(USE_REGEXP)) {
 
@@ -147,10 +150,9 @@
 	    else
 		regexp_init(answer);
 	}
-#else
-	;
 #endif
-    } else if (i == 0) {	/* They entered something new */
+	break;
+    case 0:		/* They entered something new */
 #ifdef HAVE_REGEX_H
 	if (ISSET(USE_REGEXP))
 	    regexp_init(answer);
@@ -158,37 +160,41 @@
 	free(backupstring);
 	backupstring = NULL;
 	last_replace[0] = '\0';
-    } else if (i == NANO_CASE_KEY) {	/* They want it case sensitive */
+	break;
+    case TOGGLE_CASE_KEY:
+    case TOGGLE_BACKWARDS_KEY:
+#ifdef HAVE_REGEX_H
+    case TOGGLE_REGEXP_KEY:
+#endif
 	free(backupstring);
 	backupstring = NULL;
 	backupstring = mallocstrcpy(backupstring, answer);
 
-	if (ISSET(CASE_SENSITIVE))
-	    UNSET(CASE_SENSITIVE);
-	else
-	    SET(CASE_SENSITIVE);
+	for (j = 0; j <= TOGGLE_LEN - 1; j++)
+	    if (i == toggles[j].val)
+		TOGGLE(toggles[j].flag);
 
 	return 1;
-    } else if (i == NANO_OTHERSEARCH_KEY) {
+    case NANO_OTHERSEARCH_KEY:
 	backupstring = mallocstrcpy(backupstring, answer);
 	return -2;		/* Call the opposite search function */
+/*
     } else if (i == NANO_REVERSESEARCH_KEY) {
 	free(backupstring);
 	backupstring = NULL;
 	backupstring = mallocstrcpy(backupstring, answer);
 
-	if (ISSET(REVERSE_SEARCH))
-	    UNSET(REVERSE_SEARCH);
-	else
-	    SET(REVERSE_SEARCH);
+	TOGGLE(REVERSE_SEARCH);
 
 	return 1;
     } else if (i == NANO_FROMSEARCHTOGOTO_KEY) {
+*/
+    case NANO_FROMSEARCHTOGOTO_KEY:
 	free(backupstring);
 	backupstring = NULL;
 	do_gotoline_void();
 	return -3;
-    } else {			/* First line key, etc. */
+    default:
 	do_early_abort();
 	free(backupstring);
 	backupstring = NULL;
diff --git a/winio.c b/winio.c
index 5c6726a..5c1c124 100644
--- a/winio.c
+++ b/winio.c
@@ -291,7 +291,7 @@
 	    fprintf(stderr, _("Aha! \'%c\' (%d)\n"), kbinput, kbinput);
 #endif
 
-	    if (kbinput == s[j].val) {
+	    if (kbinput == s[j].val && kbinput < 32) {
 
 		/* We shouldn't discard the answer it gave, just because
 		   we hit a keystroke, GEEZ! */
@@ -327,10 +327,12 @@
 	    break;
 #endif
 #endif
+	case NANO_HOME_KEY:
 	case KEY_HOME:
 	    x = x_left;
 	    nanoget_repaint(buf, inputbuf, x);
 	    break;
+	case NANO_END_KEY:
 	case KEY_END:
 	    x = x_left + strlen(inputbuf);
 	    nanoget_repaint(buf, inputbuf, x);
@@ -450,11 +452,29 @@
 		    nodelay(edit, FALSE);
 		    break;
 		}
+	    default:
+
+		for (j = 0; j <= slen - 1; j++) {
+#ifdef DEBUG
+	    fprintf(stderr, _("Aha! \'%c\' (%d)\n"), kbinput, kbinput);
+#endif
+		    if (kbinput == s[j].val || kbinput == s[j].val - 32) {
+
+			/* We hit an Alt key.   Do like above.  We don't
+			   just ungetch the letter and let it get caught
+			   above cause that screws the keypad... */
+			answer = mallocstrcpy(answer, inputbuf);
+			free(inputbuf);
+			return s[j].val;
+		    }
+		}
+
 	    }
 	    nanoget_repaint(buf, inputbuf, x);
 	    break;
 
 	default:
+
 	    if (kbinput < 32)
 		break;
 
@@ -553,7 +573,7 @@
 {
     char description[80];
 
-    snprintf(description, 12, " %-10s", desc);
+    snprintf(description, 12 - (strlen(keystroke) - 2), " %-10s", desc);
     wattron(bottomwin, A_REVERSE);
     waddstr(bottomwin, keystroke);
     wattroff(bottomwin, A_REVERSE);
@@ -586,8 +606,14 @@
 
     clear_bottomwin();
     wmove(bottomwin, 1, 0);
-    for (i = 0; i <= slen - 1; i += 2) {
-	snprintf(keystr, 10, "^%c", s[i].val + 64);
+
+    for (i = 0; i <= slen - 2; i += 2) {
+
+	if (s[i].val < 97)
+	    snprintf(keystr, 10, "^%c", s[i].val + 64);
+	else
+	    snprintf(keystr, 10, "M-%c", s[i].val - 32);
+
 	onekey(keystr, s[i].desc);
 
 	for (j = 0; j < k; j++)
@@ -596,7 +622,12 @@
 
     wmove(bottomwin, 2, 0);
     for (i = 1; i <= slen - 1; i += 2) {
-	snprintf(keystr, 10, "^%c", s[i].val + 64);
+
+	if (s[i].val < 97)
+	    snprintf(keystr, 10, "^%c", s[i].val + 64);
+	else
+	    snprintf(keystr, 10, "M-%c", s[i].val - 32);
+
 	onekey(keystr, s[i].desc);
 
 	for (j = 0; j < k; j++)
