diff --git a/ChangeLog b/ChangeLog
index 6312858db9566b1afc996bebc161c4af76218e14..73252f70979a24aaa07285bdb2f6b44020385355 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,12 @@ CVS code
 	- Translation updates (see po/ChangeLog for details).
 	- Fix globals and externs such that nano will compile with
 	  DISABLE_SPELLER (David Benbennick).
+	- Fix unreasonable fill values by wrapping at length 0 instead
+	  of erroring out, and don't start up if the window size is too
+	  small but fill is set reasonably.  Changes to 
+	  nano.c:global_init(), window_init(), and handle_sigwinch().
+	  New macro MIN_EDITOR_COLS replaces MIN_FILL_LENGTH
+	  (David Benbennick).
 - files.c:
   cwd_tab_completion()
 	- Memory leak fix (David Benbennick).
diff --git a/nano.c b/nano.c
index 07217646e2c34ca4d94055a011e0a51365d1db32..591d288723be8ada996532cc0754f031061d78e0 100644
--- a/nano.c
+++ b/nano.c
@@ -199,7 +199,8 @@ void global_init(int save_cutbuffer)
     current_x = 0;
     current_y = 0;
 
-    if ((editwinrows = LINES - 5 + no_help()) < MIN_EDITOR_ROWS)
+    editwinrows = LINES - 5 + no_help();
+    if (editwinrows < MIN_EDITOR_ROWS || COLS < MIN_EDITOR_COLS)
 	die_too_small();
 
     fileage = NULL;
@@ -216,8 +217,8 @@ void global_init(int save_cutbuffer)
     fill = wrap_at;
     if (fill <= 0)
 	fill += COLS;
-    if (fill < MIN_FILL_LENGTH)
-	die_too_small();
+    if (fill < 0)
+	fill = 0;
 #endif
 
     hblank = charalloc(COLS + 1);
@@ -227,7 +228,8 @@ void global_init(int save_cutbuffer)
 
 void window_init(void)
 {
-    if ((editwinrows = LINES - 5 + no_help()) < MIN_EDITOR_ROWS)
+    editwinrows = LINES - 5 + no_help();
+    if (editwinrows < MIN_EDITOR_ROWS)
 	die_too_small();
 
     if (edit != NULL)
@@ -2867,15 +2869,16 @@ void handle_sigwinch(int s)
      * But not in all cases, argh. */
     COLS = win.ws_col;
     LINES = win.ws_row;
-    if ((editwinrows = LINES - 5 + no_help()) < MIN_EDITOR_ROWS)
+    editwinrows = LINES - 5 + no_help();
+    if (editwinrows < MIN_EDITOR_ROWS || COLS < MIN_EDITOR_COLS)
 	die_too_small();
 
 #ifndef DISABLE_WRAPJUSTIFY
     fill = wrap_at;
     if (fill <= 0)
 	fill += COLS;
-    if (fill < MIN_FILL_LENGTH)
-	die_too_small();
+    if (fill < 0)
+	fill = 0;
 #endif
 
     hblank = nrealloc(hblank, COLS + 1);
diff --git a/nano.h b/nano.h
index de0fe7c304411ce020080d90a974f2bc6deb7157..40a3ff80fbe88a751e4b2bd6688be2d15e7e3cf2 100644
--- a/nano.h
+++ b/nano.h
@@ -417,14 +417,13 @@ typedef enum {
 /* Minimum editor window rows required for nano to work correctly */
 #define MIN_EDITOR_ROWS 3
 
+/* Minimum editor window cols required for nano to work correctly */
+#define MIN_EDITOR_COLS 10
+
 /* Default number of characters from end-of-line where text wrapping
    occurs */
 #define CHARS_FROM_EOL 8
 
-/* Minimum fill length (space available for text before wrapping
-   occurs) */
-#define MIN_FILL_LENGTH 10
-
 /* Maximum number of search history strings saved, same value used for
    replace history */
 #define MAX_SEARCH_HISTORY 100