diff --git a/ChangeLog b/ChangeLog
index 3ef464877c7a1bb2b7dd82ba84bc51eadc3810a4..9ba5f93587f9d34f4160ac5de289b46f34f80c15 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-11-30  Benno Schulenberg  <bensberg@justemail.net>
+	* src/text.c (redo_cut, update_undo): When cutting reaches the EOF,
+	and NONEWLINES is set, there is no next line at which to put the
+	cutting point for a redo.  So put it at the very end of the cut.
+	This fixes Savannah bug #46541.
+
 2015-11-29  Benno Schulenberg  <bensberg@justemail.net>
 	* src/color.c (reset_multis): Evaluate correctly whether to reset
 	the multidata cache.  This fixes Savannah bug #46543.
diff --git a/src/text.c b/src/text.c
index c0bcc35ba4af667790be5e6698738ac4b205b977..ff9872b76ee06a5d4d49234dfe03927d0256903a 100644
--- a/src/text.c
+++ b/src/text.c
@@ -451,11 +451,6 @@ void redo_cut(undo *u)
 
     goto_line_posx(u->lineno, u->begin);
 
-    if (ISSET(NO_NEWLINES) && openfile->current->lineno != u->lineno) {
-	openfile->current_x = strlen(openfile->current->data);
-	openfile->placewewant = xplustabs();
-    }
-
     openfile->mark_set = TRUE;
     openfile->mark_begin = fsfromline(u->mark_begin_lineno);
     openfile->mark_begin_x = (u->xflags == WAS_WHOLE_LINE) ? 0 : u->mark_begin_x;
@@ -1140,7 +1135,9 @@ fprintf(stderr, "  >> Updating... action = %d, openfile->last_action = %d, openf
 		u->begin = strlen(u->cutbottom->data);
 		if (u->lineno == u->mark_begin_lineno)
 		    u->begin += u->mark_begin_x;
-	    }
+	    } else if (openfile->current == openfile->filebot &&
+			ISSET(NO_NEWLINES))
+		u->begin = strlen(u->cutbottom->data);
 	}
 	break;
     case REPLACE: