diff --git a/ChangeLog b/ChangeLog
index 96ee66168e11e47d038f542e1963179de0290e4c..909038cb4a434e71acfab3c09b62c7a9da2df0a8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -66,6 +66,9 @@ CVS code -
 	- Remove the now-unneeded code to disable XON, XOFF, and
 	  suspend, since we now go into raw mode in
 	  get_verbatim_kbinput() and bypass them. (DLR)
+  do_next_word()
+	- Simplify and remove references to editbot so as to avoid a
+	  segfault. (David Benbennick)
   do_int_speller(), do_alt_speller(), do_spell()
 	- Modify to write only the current selection from a file to the
 	  temporary file used for spell checking when the mark is on,
diff --git a/src/nano.c b/src/nano.c
index e5e8e6fe8e28c6e6efd886f4426f635627b41c2a..43847e8b605829fcdb16e624afafdcc6e863b83b 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -1173,8 +1173,6 @@ int do_enter(void)
 #ifndef NANO_SMALL
 int do_next_word(void)
 {
-    filestruct *old = current;
-
     assert(current != NULL && current->data != NULL);
 
     /* Skip letters in this word first. */
@@ -1197,31 +1195,10 @@ int do_next_word(void)
 
     placewewant = xplustabs();
 
-    if (current->lineno >= editbot->lineno) {
-	/* If we're on the last line, don't center the screen. */
-	if (current->lineno == filebot->lineno)
-	    edit_refresh();
-	else
-	    edit_update(current, CENTER);
-    }
-    else {
-	/* If we've jumped lines, refresh the old line.  We can't just
-	   use current->prev here, because we may have skipped over some
-	   blank lines, in which case the previous line is the wrong
-	   one. */
-	if (current != old) {
-	    update_line(old, 0);
-	    /* If the mark was set, then the lines between old and
-	       current have to be updated too. */
-	    if (ISSET(MARK_ISSET)) {
-		while (old->next != current) {
-		    old = old->next;
-		    update_line(old, 0);
-		}
-	    }
-	}
-	update_line(current, current_x);
-    }
+    /* Refresh the screen.  If current has run off the bottom, this
+     * call puts it at the center line. */
+    edit_refresh();
+
     return 0;
 }