diff --git a/ChangeLog b/ChangeLog
index d6127a5679379b8c4b8b303a72a617fc40943ffa..430ca8e150f51682228c63e6816997523935c036 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-11-11  Benno Schulenberg  <bensberg@justemail.net>
+	* src/text.c (do_redo, update_undo):  Redo an Enter from the stored
+	undo data, instead of running do_enter() again, because the latter
+	will behave differently depending on the setting of autoindent.
+	This addresses Debian bug #793053 reported by Clancy.
+
 2015-11-10  Benno Schulenberg  <bensberg@justemail.net>
 	* src/winio.c (edit_draw): Skip a zero-length match only when there
 	/is/ a match.  Found with valgrind.  This fixes Savannah bug #41908.
diff --git a/src/text.c b/src/text.c
index 1dfaacdc431ea00c95546a7e50c8679e27da95f9..ff9951d71ac660c2ed1a42d5036d2a5e179b033e 100644
--- a/src/text.c
+++ b/src/text.c
@@ -677,8 +677,17 @@ void do_redo(void)
 	break;
     case ENTER:
 	redidmsg = _("line break");
-	goto_line_posx(u->lineno, u->begin);
-	do_enter(TRUE);
+	filestruct *shoveline = make_new_node(f);
+	shoveline->data = mallocstrcpy(NULL, u->strdata);
+	data = mallocstrncpy(NULL, f->data, u->begin + 1);
+	data[u->begin] = '\0';
+	free(f->data);
+	f->data = data;
+	splice_node(f, shoveline, f->next);
+	if (f == openfile->filebot)
+	    openfile->filebot = shoveline;
+	renumber(shoveline);
+	goto_line_posx(u->lineno + 1, u->mark_begin_x);
 	break;
 #ifndef DISABLE_WRAPPING
     case SPLIT_BEGIN:
@@ -1156,6 +1165,7 @@ fprintf(stderr, "  >> Updating... action = %d, fs->last_action = %d, openfile->c
 	u->mark_begin_lineno = openfile->current->lineno;
 	break;
     case ENTER:
+	u->strdata = mallocstrcpy(NULL, fs->current->data);
 	u->mark_begin_x = fs->current_x;
 	break;
 #ifndef DISABLE_WRAPPING