diff --git a/ChangeLog b/ChangeLog
index 63743ae301a80f11da54c2b71dbae1372e9942ee..8997f49233c8df87a33b05408f3e5b8af1084a01 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -108,6 +108,13 @@ CVS code -
 	  copy_from_filestruct(), do_delete(), do_enter(), do_wrap(),
 	  do_justify(), do_alt_speller(), do_wordlinechar_count(),
 	  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
+	  window_size_init(). (DLR)
 - color.c:
 	- Remove unneeded string.h and fcntl.h includes. (DLR)
 - chars.c:
@@ -180,6 +187,8 @@ CVS code -
 	- When opening files with "+LINE,COLUMN" arguments on the
 	  command line, don't update the screen when moving to their
 	  specified lines and columns. (DLR)
+	- Rename variable fill_flag_used to fill_used, for consistency.
+	  (DLR)
 - nano.h:
 	- Since we only use vsnprintf() now, remove the #ifdef block for
 	  HAVE_SNPRINTF. (DLR)
diff --git a/src/global.c b/src/global.c
index d6b38abe0df86abd5f173af9bd261d25d68f4ba9..ee416f566927bac9b22d4ebefa7cd8661d422882 100644
--- a/src/global.c
+++ b/src/global.c
@@ -28,15 +28,13 @@
 
 /* Global variables */
 #ifndef DISABLE_WRAPJUSTIFY
-ssize_t fill = 0;		/* Where we will wrap lines. */
+ssize_t fill = 0;		/* The column where we will wrap
+				 * lines. */
 ssize_t wrap_at = -CHARS_FROM_EOL;
-				/* The position that corresponds to
-				 * fill.  If it's greater than zero,
-				 * fill is equal to it.  Otherwise, fill
-				 * is equal to the number of screen
-				 * columns less it.  This allows
-				 * dynamic wrapping based on the current
-				 * screen width. */
+				/* The position where we will wrap
+				 * lines.  fill is equal to this if it's
+				 * greater than zero, and equal to
+				 * (COLS + this) if it isn't. */
 #endif
 
 char *last_search = NULL;	/* Last string we searched for */
diff --git a/src/nano.c b/src/nano.c
index 7b0e28e4003cc5109df3b3a049d6afd867f83980..d0b532f7c2ca2f9e9ee639d706920cb2beb89b6a 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -619,33 +619,21 @@ void die_save_file(const char *die_filename)
     free(retval);
 }
 
-/* Die with an error message that the screen was too small if, well, the
- * screen is too small. */
-void check_die_too_small(void)
+void window_init(void)
 {
+    /* If the screen height is too small, get out. */
     editwinrows = LINES - 5 + no_more_space() + no_help();
     if (editwinrows < MIN_EDITOR_ROWS)
 	die(_("Window size is too small for nano...\n"));
-}
-
-/* Make sure the window size isn't too small, and reinitialize the fill
- * variable, since it depends on the window size. */
-void window_size_init(void)
-{
-    check_die_too_small();
 
 #ifndef DISABLE_WRAPJUSTIFY
+    /* Set up fill, based on the screen width. */
     fill = wrap_at;
     if (fill <= 0)
 	fill += COLS;
     if (fill < 0)
 	fill = 0;
 #endif
-}
-
-void window_init(void)
-{
-    check_die_too_small();
 
     if (topwin != NULL)
 	delwin(topwin);
@@ -1370,9 +1358,6 @@ void handle_sigwinch(int s)
     COLS = win.ws_col;
     LINES = win.ws_row;
 
-    /* Reinitialize the window size variables. */
-    window_size_init();
-
     /* If we've partitioned the filestruct, unpartition it now. */
     if (filepart != NULL)
 	unpartition_filestruct(&filepart);
@@ -1880,7 +1865,7 @@ int main(int argc, char **argv)
     ssize_t startcol = 1;
 	/* Column to try and start at. */
 #ifndef DISABLE_WRAPJUSTIFY
-    bool fill_flag_used = FALSE;
+    bool fill_used = FALSE;
 	/* Was the fill option used? */
 #endif
 #ifdef ENABLE_MULTIBUFFER
@@ -2102,7 +2087,7 @@ int main(int argc, char **argv)
 		    fprintf(stderr, "\n");
 		    exit(1);
 		}
-		fill_flag_used = TRUE;
+		fill_used = TRUE;
 		break;
 #endif
 #ifndef DISABLE_SPELLER
@@ -2191,7 +2176,7 @@ int main(int argc, char **argv)
 	}
 #endif
 #ifndef DISABLE_WRAPJUSTIFY
-	if (fill_flag_used)
+	if (fill_used)
 	    wrap_at = wrap_at_cpy;
 #endif
 #ifndef NANO_SMALL
@@ -2317,20 +2302,20 @@ int main(int argc, char **argv)
     /* Turn the cursor on for sure. */
     curs_set(1);
 
-    /* Initialize the window size variables. */
-    window_size_init();
+#ifdef DEBUG
+    fprintf(stderr, "Main: set up windows\n");
+#endif
 
-    /* Set up the shortcuts. */
-    shortcut_init(FALSE);
+    /* Initialize all the windows based on the current screen
+     * dimensions. */
+    window_init();
 
     /* Set up the signal handlers. */
     signal_init();
 
-#ifdef DEBUG
-    fprintf(stderr, "Main: set up windows\n");
-#endif
+    /* Set up the shortcut lists. */
+    shortcut_init(FALSE);
 
-    window_init();
 #ifndef DISABLE_MOUSE
     mouse_init();
 #endif
diff --git a/src/proto.h b/src/proto.h
index 2d464cbf5c81a3160b049bb6d717dbd0c5738b4a..913513458cf86bc034fe80128f88f0ca1b2d552c 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -369,8 +369,6 @@ void print_view_warning(void);
 void finish(void);
 void die(const char *msg, ...);
 void die_save_file(const char *die_filename);
-void check_die_too_small(void);
-void window_size_init(void);
 void window_init(void);
 #ifndef DISABLE_MOUSE
 void mouse_init(void);
diff --git a/src/text.c b/src/text.c
index 0edca63f298a0b8f6083250c6be0cb55c93f3efc..c5b031798562ddbeada91dacc96a46e3482d5f95 100644
--- a/src/text.c
+++ b/src/text.c
@@ -342,22 +342,29 @@ void wrap_reset(void)
 bool do_wrap(filestruct *line)
 {
     size_t line_len;
-	/* Length of the line we wrap. */
+	/* The length of the line we wrap. */
     ssize_t wrap_loc;
-	/* Index of line->data where we wrap. */
+	/* The index of line->data where we wrap. */
 #ifndef NANO_SMALL
     const char *indent_string = NULL;
 	/* Indentation to prepend to the new line. */
-    size_t indent_len = 0;	/* The length of indent_string. */
+    size_t indent_len = 0;
+	/* The length of indent_string. */
 #endif
-    const char *after_break;	/* The text after the wrap point. */
-    size_t after_break_len;	/* The length of after_break. */
-    bool wrapping = FALSE;	/* Do we prepend to the next line? */
+    const char *after_break;
+	/* The text after the wrap point. */
+    size_t after_break_len;
+	/* The length of after_break. */
+    bool wrapping = FALSE;
+	/* Do we prepend to the next line? */
     const char *next_line = NULL;
 	/* The next line, minus indentation. */
-    size_t next_line_len = 0;	/* The length of next_line. */
-    char *new_line = NULL;	/* The line we create. */
-    size_t new_line_len = 0;	/* The eventual length of new_line. */
+    size_t next_line_len = 0;
+	/* The length of next_line. */
+    char *new_line = NULL;
+	/* The line we create. */
+    size_t new_line_len = 0;
+	/* The eventual length of new_line. */
 
     /* There are three steps.  First, we decide where to wrap.  Then, we
      * create the new wrap line.  Finally, we clean up. */
@@ -1085,11 +1092,12 @@ bool find_paragraph(size_t *const quote, size_t *const par)
 void do_justify(bool full_justify)
 {
     filestruct *first_par_line = NULL;
-	/* Will be the first line of the resulting justified paragraph.
-	 * For restoring after unjustify. */
+	/* Will be the first line of the justified paragraph.  For
+	 * restoring after unjustify. */
     filestruct *last_par_line;
 	/* Will be the line containing the newline after the last line
-	 * of the result.  Also for restoring after unjustify. */
+	 * of the justified paragraph.  Also for restoring after
+	 * unjustify. */
 
     /* We save these variables to be restored if the user
      * unjustifies. */
@@ -1264,17 +1272,17 @@ void do_justify(bool full_justify)
 	justify_format(openfile->current, quote_len +
 		indent_length(openfile->current->data + quote_len));
 
-	while (par_len > 0 &&
-		strlenpt(openfile->current->data) > fill) {
+	while (par_len > 0 && strlenpt(openfile->current->data) >
+		fill) {
 	    size_t line_len = strlen(openfile->current->data);
 
 	    indent_len = strlen(indent_string);
 
 	    /* If this line is too long, try to wrap it to the next line
 	     * to make it short enough. */
-	    break_pos =
-		break_line(openfile->current->data + indent_len, fill -
-		strnlenpt(openfile->current->data, indent_len), FALSE);
+	    break_pos = break_line(openfile->current->data + indent_len,
+		fill - strnlenpt(openfile->current->data, indent_len),
+		FALSE);
 
 	    /* We can't break the line, or don't need to, so get out. */
 	    if (break_pos == -1 || break_pos + indent_len == line_len)
@@ -1888,6 +1896,10 @@ const char *do_alt_speller(char *tempfile_name)
     /* Turn the cursor back on for sure. */
     curs_set(1);
 
+    /* The screen might have been resized.  If it has, reinitialize all
+     * the windows based on the new screen dimensions. */
+    window_init();
+
     if (!WIFEXITED(alt_spell_status) ||
 		WEXITSTATUS(alt_spell_status) != 0) {
 	char *altspell_error;
@@ -1922,9 +1934,6 @@ const char *do_alt_speller(char *tempfile_name)
     }
 #endif
 
-    /* Set up the window size. */
-    window_size_init();
-
     /* Reinitialize the text of the current buffer. */
     free_filestruct(openfile->fileage);
     initialize_buffer_text();