diff --git a/ChangeLog b/ChangeLog
index 2f4af99963363b27aef9a5dfc46c9a03f08337f1..ac34683cad0436c620dd805c931edf27d5ef914d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,19 @@
+2009-12-01 Kamil Dudka <kdudka@redhat.com>
+	* chars.c, file.c - Better handle unused results for things like mbtowc(), new
+	  macro IGNORE_CALL_RESULT.
+
+2009-12-01 Chris Allegretta <chrisa@asty.org>
+	* global.c (shortcut_init) - Remove redundant entries for ^Y/^V reported by
+	  Christian Weisgerber.
+	* doc/man/nanorc.5 - Fix typo in Meta documentation, reported by gibboris@gmail.com.
+
+2009-11-29 David Lawrence Ramsey <pooka109@gmail.com>
+	* global.c (shortcut_init) - Add support for ^P and ^N in the help menu.
+
 GNU nano 2.2.0 - 2009.11.30
 2009-11-29 Chris Allegretta <chrisa@asty.org>
-	* prompt.c (get_prompt_string) - Universally handle help key when is disabled.  Fixes Savannah
+	* prompt.c (get_prompt_string) - Universally handle help key when is 
+disabled.  Fixes Savannah
 	  bug 28117 by David Lawrence Ramsey <pooka109@gmail.com>.
 	* chars.c, files.c: Add junk vars to silence the compiler.  Sigh.
 
diff --git a/configure.ac b/configure.ac
index 73b277ee5d9f79b481f55b6c617731cc2ae250a4..ce3b527f2c833751bc90fc1a596165041d0b9a02 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
 #
 # $Id$
 
-AC_INIT([GNU nano], [2.2.0], [nano-devel@gnu.org], [nano])
+AC_INIT([GNU nano], [2.2.0-svn], [nano-devel@gnu.org], [nano])
 AC_CONFIG_SRCDIR([src/nano.c])
 AC_CANONICAL_TARGET([])
 AM_INIT_AUTOMAKE
diff --git a/doc/man/nanorc.5 b/doc/man/nanorc.5
index 882dc7d773b43211b1038935b19da28d1e5861ee..dbb7a581bbba2555dcb8196b69d5f1d5c095ec27 100644
--- a/doc/man/nanorc.5
+++ b/doc/man/nanorc.5
@@ -276,7 +276,7 @@ followed by an alpha character or the word "Space".
 Example: ^C
 .TP
 .B M- 
-followed by a prinable character or the word "Space".
+followed by a printable character or the word "Space".
 Example: M-C
 .TP
 .B F 
diff --git a/src/chars.c b/src/chars.c
index d325e1e6d60d77c7f97ac3cd7abe33602636461d..0ba299472ddd21af1a48f3f80d2ce3b4b83c338e 100644
--- a/src/chars.c
+++ b/src/chars.c
@@ -79,6 +79,16 @@ bool is_byte(int c)
     return ((unsigned int)c == (unsigned char)c);
 }
 
+static void mbtowc_reset(void)
+{
+    IGNORE_CALL_RESULT(mbtowc(NULL, NULL, 0));
+}
+
+static void wctomb_reset(void)
+{
+    IGNORE_CALL_RESULT(wctomb(NULL, 0));
+}
+
 /* This function is equivalent to isalnum() for multibyte characters. */
 bool is_alnum_mbchar(const char *c)
 {
@@ -89,7 +99,7 @@ bool is_alnum_mbchar(const char *c)
 	wchar_t wc;
 
 	if (mbtowc(&wc, c, MB_CUR_MAX) < 0) {
-	    int shutup = mbtowc(NULL, NULL, 0);
+	    mbtowc_reset();
 	    wc = bad_wchar;
 	}
 
@@ -109,7 +119,7 @@ bool is_blank_mbchar(const char *c)
 	wchar_t wc;
 
 	if (mbtowc(&wc, c, MB_CUR_MAX) < 0) {
-	    int shutup = mbtowc(NULL, NULL, 0);
+	    mbtowc_reset();
 	    wc = bad_wchar;
 	}
 
@@ -156,7 +166,7 @@ bool is_cntrl_mbchar(const char *c)
 	wchar_t wc;
 
 	if (mbtowc(&wc, c, MB_CUR_MAX) < 0) {
-	    int shutup = mbtowc(NULL, NULL, 0);
+	    mbtowc_reset();
 	    wc = bad_wchar;
 	}
 
@@ -177,7 +187,7 @@ bool is_punct_mbchar(const char *c)
 	int c_mb_len = mbtowc(&wc, c, MB_CUR_MAX);
 
 	if (c_mb_len < 0) {
-	    int shutup = mbtowc(NULL, NULL, 0);
+	    mbtowc_reset();
 	    wc = bad_wchar;
 	}
 
@@ -243,14 +253,14 @@ char *control_mbrep(const char *c, char *crep, int *crep_len)
 	wchar_t wc;
 
 	if (mbtowc(&wc, c, MB_CUR_MAX) < 0) {
-	    int shutup = mbtowc(NULL, NULL, 0);
+	    mbtowc_reset();
 	    *crep_len = bad_mbchar_len;
 	    strncpy(crep, bad_mbchar, *crep_len);
 	} else {
 	    *crep_len = wctomb(crep, control_wrep(wc));
 
 	    if (*crep_len < 0) {
-		int shutup = wctomb(NULL, 0);
+		wctomb_reset();
 		*crep_len = 0;
 	    }
 	}
@@ -278,14 +288,14 @@ char *mbrep(const char *c, char *crep, int *crep_len)
 
 	/* Reject invalid Unicode characters. */
 	if (mbtowc(&wc, c, MB_CUR_MAX) < 0 || !is_valid_unicode(wc)) {
-	    int shutup = mbtowc(NULL, NULL, 0);
+	    mbtowc_reset();
 	    *crep_len = bad_mbchar_len;
 	    strncpy(crep, bad_mbchar, *crep_len);
 	} else {
 	    *crep_len = wctomb(crep, wc);
 
 	    if (*crep_len < 0) {
-		int shutup = wctomb(NULL, 0);
+		wctomb_reset();
 		*crep_len = 0;
 	    }
 	}
@@ -311,7 +321,7 @@ int mbwidth(const char *c)
 	int width;
 
 	if (mbtowc(&wc, c, MB_CUR_MAX) < 0) {
-	    int shutup = mbtowc(NULL, NULL, 0);
+	    mbtowc_reset();
 	    wc = bad_wchar;
 	}
 
@@ -356,7 +366,7 @@ char *make_mbchar(long chr, int *chr_mb_len)
 
 	/* Reject invalid Unicode characters. */
 	if (*chr_mb_len < 0 || !is_valid_unicode((wchar_t)chr)) {
-	    int shutup = wctomb(NULL, 0);
+	    wctomb_reset();
 	    *chr_mb_len = 0;
 	}
     } else {
@@ -388,7 +398,7 @@ int parse_mbchar(const char *buf, char *chr, size_t *col)
 	/* If buf contains an invalid multibyte character, only
 	 * interpret buf's first byte. */
 	if (buf_mb_len < 0) {
-	    int shutup = mblen(NULL, 0);
+	    IGNORE_CALL_RESULT(mblen(NULL, 0));
 	    buf_mb_len = 1;
 	} else if (buf_mb_len == 0)
 	    buf_mb_len++;
@@ -545,7 +555,7 @@ int mbstrncasecmp(const char *s1, const char *s2, size_t n)
 	    s1_mb_len = parse_mbchar(s1, s1_mb, NULL);
 
 	    if (mbtowc(&ws1, s1_mb, s1_mb_len) < 0) {
-		int shutup = mbtowc(NULL, NULL, 0);
+		mbtowc_reset();
 		ws1 = (unsigned char)*s1_mb;
 		bad_s1_mb = TRUE;
 	    }
@@ -553,7 +563,7 @@ int mbstrncasecmp(const char *s1, const char *s2, size_t n)
 	    s2_mb_len = parse_mbchar(s2, s2_mb, NULL);
 
 	    if (mbtowc(&ws2, s2_mb, s2_mb_len) < 0) {
-		int shutup = mbtowc(NULL, NULL, 0);
+		mbtowc_reset();
 		ws2 = (unsigned char)*s2_mb;
 		bad_s2_mb = TRUE;
 	    }
@@ -781,7 +791,7 @@ char *mbstrchr(const char *s, const char *c)
 	int c_mb_len = mbtowc(&wc, c, MB_CUR_MAX);
 
 	if (c_mb_len < 0) {
-	    int shutup = mbtowc(NULL, NULL, 0);
+	    mbtowc_reset();
 	    wc = (unsigned char)*c;
 	    bad_c_mb = TRUE;
 	}
@@ -790,7 +800,7 @@ char *mbstrchr(const char *s, const char *c)
 	    int s_mb_len = parse_mbchar(s, s_mb, NULL);
 
 	    if (mbtowc(&ws, s_mb, s_mb_len) < 0) {
-		int shutup = mbtowc(NULL, NULL, 0);
+		mbtowc_reset();
 		ws = (unsigned char)*s;
 		bad_s_mb = TRUE;
 	    }
diff --git a/src/files.c b/src/files.c
index 5af6f71307d9b2d9cb7ce7cef27b25eb1088e685..147f23f4e80a14d06cb7bb3c9b87b35ded3f85b7 100644
--- a/src/files.c
+++ b/src/files.c
@@ -1092,7 +1092,6 @@ char *get_full_path(const char *origpath)
     char *d_here, *d_there, *d_there_file = NULL;
     const char *last_slash;
     bool path_only;
-    int shutup;
 
     if (origpath == NULL)
     	return NULL;
@@ -1191,7 +1190,7 @@ char *get_full_path(const char *origpath)
 	    /* Finally, go back to the path specified in d_here,
 	     * where we were before.  We don't check for a chdir()
 	     * error, since we can do nothing if we get one. */
-	    shutup = chdir(d_here);
+	    IGNORE_CALL_RESULT(chdir(d_here));
 
 	    /* Free d_here, since we're done using it. */
 	    free(d_here);
diff --git a/src/global.c b/src/global.c
index f87f2419706ebfb0c4f86a7d9597509268948702..f24c527ee05e3cab1f970a7f14bf8afa3c62f53f 100644
--- a/src/global.c
+++ b/src/global.c
@@ -739,11 +739,11 @@ void shortcut_init(bool unjustify)
 #endif
 
     add_to_funcs(DO_FIRST_LINE,
-	(MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MHELP),
+	(MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE),
 	first_line_msg, IFSCHELP(nano_firstline_msg), FALSE, VIEW);
 
     add_to_funcs(DO_LAST_LINE,
-	(MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE|MHELP),
+	(MMAIN|MWHEREIS|MREPLACE|MREPLACE2|MGOTOLINE),
 	last_line_msg, IFSCHELP(nano_lastline_msg), TRUE, VIEW);
 
 
@@ -1084,10 +1084,10 @@ void shortcut_init(bool unjustify)
     add_to_sclist(MALL, "kleft", DO_LEFT, 0, TRUE);
     add_to_sclist(MMAIN, "^Q", XON_COMPLAINT, 0, TRUE);
     add_to_sclist(MMAIN, "^S", XOFF_COMPLAINT, 0, TRUE);
-    add_to_sclist(MMAIN|MBROWSER, "^P", DO_UP_VOID, 0, TRUE);
-    add_to_sclist(MMAIN|MBROWSER, "kup", DO_UP_VOID, 0, TRUE);
-    add_to_sclist(MMAIN|MBROWSER, "^N", DO_DOWN_VOID, 0, TRUE);
-    add_to_sclist(MMAIN|MBROWSER, "kdown", DO_DOWN_VOID, 0, TRUE);
+    add_to_sclist(MMAIN|MHELP|MBROWSER, "^P", DO_UP_VOID, 0, TRUE);
+    add_to_sclist(MMAIN|MHELP|MBROWSER, "kup", DO_UP_VOID, 0, TRUE);
+    add_to_sclist(MMAIN|MHELP|MBROWSER, "^N", DO_DOWN_VOID, 0, TRUE);
+    add_to_sclist(MMAIN|MHELP|MBROWSER, "kdown", DO_DOWN_VOID, 0, TRUE);
     add_to_sclist(MALL, "^A", DO_HOME, 0, TRUE);
     add_to_sclist(MALL, "khome", DO_HOME, 0, TRUE);
     add_to_sclist(MALL, "^E", DO_END, 0, TRUE);
diff --git a/src/nano.h b/src/nano.h
index ee726796d32a111c9b96b7b01b62a3549325a542..b130ff1bb7eae548ddc091560611926bd5b71a81 100644
--- a/src/nano.h
+++ b/src/nano.h
@@ -54,6 +54,9 @@
 #include <stdarg.h>
 #endif
 
+/* Suppress warnings for __attribute__((warn_unused_result)) */
+#define IGNORE_CALL_RESULT(call) do { if (call) {} } while(0)
+
 /* Macros for flags. */
 #define FLAGOFF(flag) ((flag) / (sizeof(unsigned) * 8))
 #define FLAGMASK(flag) (1 << ((flag) % (sizeof(unsigned) * 8)))