diff --git a/ChangeLog b/ChangeLog
index 5bed21dbbefe710f1902a4825615d7bc94967b14..9cbc263acf3c4bbffdf85271f97650c3355cfe2e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,6 +9,8 @@ General -
 	  FINALLY!  No more keypad_on(), no more individual calls in
 	  main(), do_help(), do_browser(), etc etc etc.  Removed call to
 	  timeout(0) in main() (which caused the whole mess), fixes BUG #49.
+	  Added workarounds for gnome-terminal in main() (Alt-O-key and
+	  348-352).
 - faq.html:
 	- Fix typos and small mistakes (Jordi).
 - files.c:
diff --git a/nano.c b/nano.c
index 0dd177260e1d36be0be7f6eef6e14816baec0427..80bb951c37a7eb4d82b8e18859cb0089b611c9ec 100644
--- a/nano.c
+++ b/nano.c
@@ -2265,6 +2265,8 @@ int main(int argc, char *argv[])
 		kbinput = wgetch(edit);
 		if (kbinput <= 'S' && kbinput >= 'P')
 		    kbinput = KEY_F(kbinput - 79);
+		else if (kbinput >= 'j' && kbinput <= 'y')
+		    kbinput = kbinput - 64;
 #ifdef DEBUG
 		else {
 		    fprintf(stderr, _("I got Alt-O-%c! (%d)\n"),
@@ -2458,6 +2460,24 @@ int main(int argc, char *argv[])
 	    case 0:		/* Erg */
 		do_next_word();
 		break;
+
+	    /* Stupid gnome-terminal keypad */
+	    case 349:
+		ungetch('5');
+		break;
+	    case 348:
+		ungetch('7');
+		break;
+	    case 350:
+		ungetch('9');
+		break;
+	    case 351:
+		ungetch('1');
+		break;
+	    case 352:
+		ungetch('3');
+		break;
+
 	    case 331:		/* Stuff that we don't want to do squat */
 	    case -1:
 	    case 410:		/* Must ignore this, it gets sent when we resize */