diff --git a/ChangeLog b/ChangeLog
index 7ecd904b6118fb753bb374281a16409cd0432065..ef768949b5167f416303eca12272c139d7b0b17e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -118,10 +118,11 @@ CVS code -
 	  new_magicline(), remove_magicline(), and do_cursorpos(). (DLR)
 	- Various fill-related cleanups.  Move check_die_too_small() and
 	  window_size_init()'s code into window_init(), as they really
-	  belong there, remove associated separate calls to them, and
-	  make sure window_init() is always called at the same time when
-	  redrawing the screen.  Changes to window_init(), main(), and
-	  do_alt_speller(); removal of check_die_too_small() and
+	  belong there, remove associated separate calls to them, make
+	  sure window_init() is always called at the same time when
+	  redrawing the screen, and turn the keypad on in topwin in case
+	  we ever read input from it.  Changes to window_init(), main(),
+	  and do_alt_speller(); removal of check_die_too_small() and
 	  window_size_init(). (DLR)
 	- Remove still more redundant screen updates.  Change all
 	  wrefresh() calls to wnoutrefresh() calls, except for those in
@@ -322,6 +323,12 @@ CVS code -
 	  that there's more room for other things, and to not display
 	  the status when we're in the file browser, since Pico doesn't.
 	  (DLR)
+  do_credits()
+	- Various cleanups.  Turn on the MORE_SPACE and NO_HELP flags
+	  before showing the credits, so that they use as much of the
+	  screen as possible, and set the flags back to their original
+	  values afterward.  Also, only call scrollok() just before and
+	  after we scroll. (DLR)
 - configure.ac:
 	- Since we only use vsnprintf() now, remove the tests for
 	  snprintf(). (DLR)
diff --git a/src/nano.c b/src/nano.c
index 1998ea9fa5f2e8116516bea6c05b26c2f77b01c2..005899d1af521bc84aff14daaaab06d7c75eb371 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -648,9 +648,9 @@ void window_init(void)
     bottomwin = newwin(3 - no_help(), COLS, editwinrows + (2 -
 	no_more_space()), 0);
 
-    /* Turn the keypad on for the windows that get input, if
-     * necessary. */
+    /* Turn the keypad on for the windows, if necessary. */
     if (!ISSET(REBIND_KEYPAD)) {
+	keypad(topwin, TRUE);
 	keypad(edit, TRUE);
 	keypad(bottomwin, TRUE);
     }
diff --git a/src/winio.c b/src/winio.c
index 9266d6f3ec5981df32804e1557a3b8ca30c91031..abcfde8e91a2a87e6772480a05fa4d4291d97438 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -4185,6 +4185,8 @@ void dump_filestruct_reverse(void)
 /* Easter egg: Display credits.  Assume nodelay(edit) is FALSE. */
 void do_credits(void)
 {
+    bool old_more_space = ISSET(MORE_SPACE);
+    bool old_no_help = ISSET(NO_HELP);
     int kbinput = ERR, crpos = 0, xlpos = 0;
     const char *credits[CREDIT_LEN] = {
 	NULL,				/* "The nano text editor" */
@@ -4262,9 +4264,15 @@ void do_credits(void)
 #endif
 	"Florian K\xF6nig";
 
+    if (!old_more_space || !old_no_help) {
+	SET(MORE_SPACE);
+	SET(NO_HELP);
+	window_init();
+    }
+
     curs_set(0);
     nodelay(edit, TRUE);
-    scrollok(edit, TRUE);
+
     blank_titlebar();
     blank_topbar();
     blank_edit();
@@ -4296,21 +4304,31 @@ void do_credits(void)
 	}
 
 	napms(700);
+	scrollok(edit, TRUE);
 	scroll(edit);
+	scrollok(edit, FALSE);
 	wrefresh(edit);
 	if ((kbinput = wgetch(edit)) != ERR)
 	    break;
 	napms(700);
+	scrollok(edit, TRUE);
 	scroll(edit);
+	scrollok(edit, FALSE);
 	wrefresh(edit);
     }
 
     if (kbinput != ERR)
 	ungetch(kbinput);
 
+    if (!old_more_space || !old_no_help) {
+	UNSET(MORE_SPACE);
+	UNSET(NO_HELP);
+	window_init();
+    }
+
     curs_set(1);
-    scrollok(edit, FALSE);
     nodelay(edit, FALSE);
+
     total_refresh();
 }
 #endif