diff --git a/ChangeLog b/ChangeLog
index 428c4cd872896ef84aa118f23402b92a2be23943..3f3a06c82d8ab1d9d7b969d96866e8210b8692d8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -27,6 +27,13 @@ CVS code -
 	- Fix erroneous #ifdef so that nano compiles with
 	  --disable-justify again. (DLR; found by Mike Frysinger)
 - nano.c:
+  do_justify()
+	- If all the text from the next line has been moved to the
+	  current line and the next line has been deleted, continue the
+	  justification loop from there and skip the respacing routine
+	  in order to avoid running it more than once on the same line
+	  (since it assumes that we've moved to the next line, which
+	  isn't true in that case). (DLR)
   do_exit()
 	- Tweak for efficiency. (David Benbennick)
 - proto.h:
diff --git a/src/nano.c b/src/nano.c
index f5f2df83a9837bcef35a4271589cee2ffad72370..dfa577a4c692de47854d3e666299bf7b1f05c09e 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -2407,7 +2407,6 @@ void do_justify(int full_justify)
     last_par_line = current;
 
     while (TRUE) {
-
 	/* First, search for the beginning of the current paragraph or,
 	 * if we're at the end of it, the beginning of the next
 	 * paragraph.  Save the quote length, paragraph length, and
@@ -2570,11 +2569,17 @@ void do_justify(int full_justify)
 		    totlines--;
 		    totsize -= indent_len;
 		    current_y--;
+
+		    /* Don't go to the next line, since there isn't one
+		     * anymore.  Just continue the loop from here. */
+		    continue;
 		} else {
 		    charmove(current->next->data + indent_len,
 			current->next->data + indent_len + break_pos + 1,
 			next_line_len - break_pos - indent_len);
 		    null_at(&current->next->data, next_line_len - break_pos);
+
+		    /* Go to the next line. */
 		    current = current->next;
 		}
 	    } else
@@ -2582,12 +2587,12 @@ void do_justify(int full_justify)
 		/* Go to the next line. */
 		current = current->next;
 
-	    /* If the line we were on before still exists, and it was
-	     * not the last line of the paragraph, add a space to the
-	     * end of it to replace the one removed or left out by
-	     * justify_format().  If it was the last line of the
-	     * paragraph, and justify_format() left a space on the end
-	     * of it, remove the space. */
+	    /* If we've gone to the next line, the line we were on
+	     * before still exists, and it was not the last line of the
+	     * paragraph, add a space to the end of it to replace the
+	     * one removed or left out by justify_format().  If it was
+	     * the last line of the paragraph, and justify_format() left
+	     * a space on the end of it, remove the space. */
 	    if (current->prev != NULL) {
 		size_t prev_line_len = strlen(current->prev->data);