diff --git a/src/indent.c b/src/indent.c
index 95bda20..be9dd4b 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -1060,40 +1060,44 @@
 	return;
     }
 
-    for (i = oap->line_count; --i >= 0 && !got_int; )
-    {
-	// it's a slow thing to do, so give feedback so there's no worry that
-	// the computer's just hung.
-
-	if (i > 1
-		&& (i % 50 == 0 || i == oap->line_count - 1)
-		&& oap->line_count > p_report)
-	    smsg(_("%ld lines to indent... "), i);
-
-	// Be vi-compatible: For lisp indenting the first line is not
-	// indented, unless there is only one line.
-# ifdef FEAT_LISP
-	if (i != oap->line_count - 1 || oap->line_count == 1
-						    || how != get_lisp_indent)
-# endif
+    // Save for undo.  Do this once for all lines, much faster than doing this
+    // for each line separately, especially when undoing.
+    if (u_savecommon(start_lnum - 1, start_lnum + oap->line_count,
+				     start_lnum + oap->line_count, FALSE) == OK)
+	for (i = oap->line_count; --i >= 0 && !got_int; )
 	{
-	    l = skipwhite(ml_get_curline());
-	    if (*l == NUL)		    // empty or blank line
-		amount = 0;
-	    else
-		amount = how();		    // get the indent for this line
+	    // it's a slow thing to do, so give feedback so there's no worry
+	    // that the computer's just hung.
 
-	    if (amount >= 0 && set_indent(amount, SIN_UNDO))
+	    if (i > 1
+		    && (i % 50 == 0 || i == oap->line_count - 1)
+		    && oap->line_count > p_report)
+		smsg(_("%ld lines to indent... "), i);
+
+	    // Be vi-compatible: For lisp indenting the first line is not
+	    // indented, unless there is only one line.
+# ifdef FEAT_LISP
+	    if (i != oap->line_count - 1 || oap->line_count == 1
+						     || how != get_lisp_indent)
+# endif
 	    {
-		// did change the indent, call changed_lines() later
-		if (first_changed == 0)
-		    first_changed = curwin->w_cursor.lnum;
-		last_changed = curwin->w_cursor.lnum;
+		l = skipwhite(ml_get_curline());
+		if (*l == NUL)		    // empty or blank line
+		    amount = 0;
+		else
+		    amount = how();	    // get the indent for this line
+
+		if (amount >= 0 && set_indent(amount, 0))
+		{
+		    // did change the indent, call changed_lines() later
+		    if (first_changed == 0)
+			first_changed = curwin->w_cursor.lnum;
+		    last_changed = curwin->w_cursor.lnum;
+		}
 	    }
+	    ++curwin->w_cursor.lnum;
+	    curwin->w_cursor.col = 0;  // make sure it's valid
 	}
-	++curwin->w_cursor.lnum;
-	curwin->w_cursor.col = 0;  // make sure it's valid
-    }
 
     // put cursor on first non-blank of indented line
     curwin->w_cursor.lnum = start_lnum;
diff --git a/src/testdir/test_indent.vim b/src/testdir/test_indent.vim
index f96da69..be55227 100644
--- a/src/testdir/test_indent.vim
+++ b/src/testdir/test_indent.vim
@@ -59,6 +59,29 @@
   close!
 endfunc
 
+" Test indent operator creating one undo entry
+func Test_indent_operator_undo()
+  enew
+  call setline(1, range(12)->map('"\t" .. v:val'))
+  func FoldExpr()
+    let g:foldcount += 1
+    return '='
+  endfunc
+  set foldmethod=expr foldexpr=FoldExpr()
+  let g:foldcount = 0
+  redraw
+  call assert_equal(12, g:foldcount)
+  normal gg=G
+  call assert_equal(24, g:foldcount)
+  undo
+  call assert_equal(38, g:foldcount)
+
+  bwipe!
+  set foldmethod& foldexpr=
+  delfunc FoldExpr
+  unlet g:foldcount
+endfunc
+
 " Test for shifting a line with a preprocessor directive ('#')
 func Test_preproc_indent()
   new
diff --git a/src/version.c b/src/version.c
index b00e0e8..82d10a2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4792,
+/**/
     4791,
 /**/
     4790,
