diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt
index 226c3b8..c595d9d 100644
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1,4 +1,4 @@
-*index.txt*     For Vim version 9.1.  Last change: 2023 Jul 06
+*index.txt*     For Vim version 9.1.  Last change: 2023 Jul 14
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -757,7 +757,7 @@
 				   search pattern and Visually select it
 |gP|		["x]gP		2  put the text [from register x] before the
 				   cursor N times, leave the cursor after it
-|gQ|		gQ		    switch to "Ex" mode with Vim editing
+|gQ|		gQ		   switch to "Ex" mode with Vim editing
 |gR|		gR		2  enter Virtual Replace mode
 |gT|		gT		   go to the previous tab page
 |gU|		gU{motion}	2  make Nmove text uppercase
diff --git a/src/charset.c b/src/charset.c
index 9aa402a..45b16aa 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -827,20 +827,20 @@
 
     if (cts.cts_text_prop_count)
     {
-      int write_idx = 0;
-      for (int read_idx = 0; read_idx < cts.cts_text_prop_count; read_idx++)
-      {
-          textprop_T *tp = &cts.cts_text_props[read_idx];
-          if (tp->tp_col != MAXCOL)
-          {
-              if (read_idx != write_idx)
-                  cts.cts_text_props[write_idx] = *tp;
-              write_idx++;
-          }
-      }
-      cts.cts_text_prop_count = write_idx;
-      if (cts.cts_text_prop_count == 0)
-          VIM_CLEAR(cts.cts_text_props);
+	int write_idx = 0;
+	for (int read_idx = 0; read_idx < cts.cts_text_prop_count; read_idx++)
+	{
+	    textprop_T *tp = &cts.cts_text_props[read_idx];
+	    if (tp->tp_col != MAXCOL)
+	    {
+		if (read_idx != write_idx)
+		    cts.cts_text_props[write_idx] = *tp;
+		write_idx++;
+	    }
+	}
+	cts.cts_text_prop_count = write_idx;
+	if (cts.cts_text_prop_count == 0)
+	    VIM_CLEAR(cts.cts_text_props);
     }
 
     win_linetabsize_cts(&cts, (colnr_T)MAXCOL);
diff --git a/src/eval.c b/src/eval.c
index beb913f..a001bba 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -6195,7 +6195,7 @@
 	r = (char_u *)"object of [unknown]";
     }
     else if (copyID != 0 && obj->obj_copyID == copyID
-            && obj->obj_class->class_obj_member_count != 0)
+	    && obj->obj_class->class_obj_member_count != 0)
     {
 	size_t n = 25 + strlen((char *)obj->obj_class->class_name);
 	r = alloc(n);
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 52673b4..c092421 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3127,8 +3127,8 @@
     // functions, check the arguments are not types.
     if (!(func_allows_type(idx)))
     {
-        for (int i = 0; i < argcount; ++i)
-            if (check_type_is_value(types[i].type_curr) == FAIL)
+	for (int i = 0; i < argcount; ++i)
+	    if (check_type_is_value(types[i].type_curr) == FAIL)
 		return FAIL;
     }
 
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index c90d64d..53f9d1a 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2860,9 +2860,8 @@
     {
 	// The automatically inserted Visual area range is skipped, so that
 	// typing ":cmdmod cmd" in Visual mode works without having to move the
-	// range to after the modififiers. The command will be
-	// "'<,'>cmdmod cmd", parse "cmdmod cmd" and then put back "'<,'>"
-	// before "cmd" below.
+	// range to after the modifiers. The command will be "'<,'>cmdmod cmd",
+	// parse "cmdmod cmd" and then put back "'<,'>" before "cmd" below.
 	eap->cmd += 5;
 	cmd_start = eap->cmd;
 	has_visual_range = TRUE;
@@ -7267,7 +7266,7 @@
 ex_find(exarg_T *eap)
 {
     if (!check_can_set_curbuf_forceit(eap->forceit))
-        return;
+	return;
 
     char_u	*fname;
     int		count;
@@ -7359,7 +7358,7 @@
 	    // All other commands must obey 'winfixbuf' / ! rules
 	    && (is_other_file(0, ffname) && !check_can_set_curbuf_forceit(eap->forceit))
     )
-        return;
+	return;
 
     do_exedit(eap, NULL);
 }
diff --git a/src/fileio.c b/src/fileio.c
index e7f3332..7bae626 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -3936,7 +3936,7 @@
     ret = mch_lstat((char *)from, &st);
     if (ret >= 0 && S_ISLNK(st.st_mode))
     {
-        ret = FAIL;
+	ret = FAIL;
 
 	len = readlink((char *)from, linkbuf, MAXPATHL);
 	if (len > 0)
diff --git a/src/getchar.c b/src/getchar.c
index 9d54377..a0787f5 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -2036,8 +2036,8 @@
 		vgetc_char = c;
 	    }
 
-	    // a keypad or special function key was not mapped, use it like
-	    // its ASCII equivalent
+	    // A keypad or special function key was not mapped, use it like
+	    // its ASCII equivalent.
 	    switch (c)
 	    {
 		case K_KPLUS:	c = '+'; break;
diff --git a/src/globals.h b/src/globals.h
index fb5c7b3..12c4ff7 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -131,8 +131,8 @@
  */
 EXTERN int	mod_mask INIT(= 0);		// current key modifiers
 
-// The value of "mod_mask" and the unomdified character before calling
-// merge_modifyOtherKeys().
+// The value of "mod_mask" and the unmodified character in vgetc() after it has
+// called vgetorpeek() enough times.
 EXTERN int	vgetc_mod_mask INIT(= 0);
 EXTERN int	vgetc_char INIT(= 0);
 
diff --git a/src/gui.c b/src/gui.c
index 25662ef..8e7b079 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -460,7 +460,7 @@
     // and in that case we don't want to overwrite ligatures map that has already
     // been correctly populated (as that would lead to a cleared ligatures maps).
     if (*p_guiligatures == NUL)
-        CLEAR_FIELD(gui.ligatures_map);
+	CLEAR_FIELD(gui.ligatures_map);
 #endif
 
 #if defined(ALWAYS_USE_GUI) || defined(VIMDLL)
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 67ee531..6c97d1a 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -797,8 +797,8 @@
 # if GTK_CHECK_VERSION(3,10,0)
     static gboolean
 scale_factor_event(GtkWidget *widget,
-	           GParamSpec* pspec UNUSED,
-	           gpointer   user_data UNUSED)
+		   GParamSpec* pspec UNUSED,
+		   gpointer   user_data UNUSED)
 {
     if (gui.surface != NULL)
 	cairo_surface_destroy(gui.surface);
diff --git a/src/indent.c b/src/indent.c
index 777db24..0d6fadb 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -996,7 +996,7 @@
 # else
 	if (wp->w_briopt_vcol == 0)
 	    prev_indent = get_indent_str(line,
-				        (int)wp->w_buffer->b_p_ts, no_ts);
+					(int)wp->w_buffer->b_p_ts, no_ts);
 # endif
 	prev_tick = CHANGEDTICK(wp->w_buffer);
 	prev_listopt = wp->w_briopt_list;
diff --git a/src/memline.c b/src/memline.c
index 6c63fad..9e579cd 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -2710,7 +2710,7 @@
     char_u	*line;
 
     if (*(line = ml_get_buf(buf, lnum, FALSE)) == NUL)
-        return 0;
+	return 0;
 
     if (buf->b_ml.ml_line_textlen <= 0)
 	buf->b_ml.ml_line_textlen = (int)STRLEN(line) + 1;
diff --git a/src/normal.c b/src/normal.c
index b55d941..541c8ed 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -4462,7 +4462,7 @@
 			    SAFE_islower(cap->nchar) ? ACTION_SHOW : ACTION_GOTO,
 		cap->cmdchar == ']' ? curwin->w_cursor.lnum + 1 : (linenr_T)1,
 		(linenr_T)MAXLNUM,
-	        FALSE);
+		FALSE);
 	    vim_free(ptr);
 	    curwin->w_set_curswant = TRUE;
 	}
diff --git a/src/os_mswin.c b/src/os_mswin.c
index df760fd..95e3cbc 100644
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -2921,7 +2921,7 @@
     // Filter only on ANSI. Otherwise will see a lot of random fonts that we
     // usually don't want.
     if (lf->lfCharSet != ANSI_CHARSET)
-        return 1;
+	return 1;
 
     int (*add_match)(char_u *) = (int (*)(char_u *))lparam;
 
@@ -2955,7 +2955,7 @@
 
 	// Always fill in with the current font size as first option for
 	// convenience. We simply round to the closest integer for simplicity.
-        int font_height = (int)round(
+	int font_height = (int)round(
 		pixels_to_points(-current_font_height, TRUE, (long_i)NULL));
 	vim_snprintf(buf, ARRAY_LENGTH(buf), "h%d", font_height);
 	add_match((char_u *)buf);
diff --git a/src/os_unix.c b/src/os_unix.c
index 76e7a8a..e77a4b2 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -7501,9 +7501,9 @@
     {
 	Gpm_Close(); // We don't want to talk to xterm via gpm
 
-        // Gpm_Close fails to properly restore the WINCH and TSTP handlers,
-        // leading to Vim ignoring resize signals. We have to re-initialize
-        // these handlers again here.
+	// Gpm_Close fails to properly restore the WINCH and TSTP handlers,
+	// leading to Vim ignoring resize signals. We have to re-initialize
+	// these handlers again here.
 # ifdef SIGWINCH
 	mch_signal(SIGWINCH, sig_winch);
 # endif
diff --git a/src/popupmenu.c b/src/popupmenu.c
index c18c97f..c116b10 100644
--- a/src/popupmenu.c
+++ b/src/popupmenu.c
@@ -527,7 +527,7 @@
 	else
 #endif
 	    attr = attrs[col - col_start];
-        screen_puts_len(ptr, char_len, row, col, attr);
+	screen_puts_len(ptr, char_len, row, col, attr);
 	col += mb_ptr2cells(ptr);
 	ptr += char_len;
     }
diff --git a/src/search.c b/src/search.c
index 0b39d90..d1eb500 100644
--- a/src/search.c
+++ b/src/search.c
@@ -5106,11 +5106,11 @@
     int		    j = 0;
 
     if (str == NULL || pat == NULL)
-        return NULL;
+	return NULL;
 
     match_positions = ALLOC_ONE(garray_T);
     if (match_positions == NULL)
-        return NULL;
+	return NULL;
     ga_init2(match_positions, sizeof(int_u), 10);
 
     if (!fuzzy_match(str, pat, FALSE, &score, matches, MAX_FUZZY_MATCHES)
diff --git a/src/tag.c b/src/tag.c
index 283343a..f94d3eb 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -310,7 +310,7 @@
 #endif
 
     if (postponed_split == 0 && !check_can_set_curbuf_forceit(forceit))
-        return FALSE;
+	return FALSE;
 
     if (type == DT_HELP)
     {
@@ -3713,7 +3713,7 @@
     char_u	*lbuf;
 
     if (postponed_split == 0 && !check_can_set_curbuf_forceit(forceit))
-        return FAIL;
+	return FAIL;
 
     // Make a copy of the line, it can become invalid when an autocommand calls
     // back here recursively.
diff --git a/src/testdir/test_taglist.vim b/src/testdir/test_taglist.vim
index 236f5ac..c5c7df2 100644
--- a/src/testdir/test_taglist.vim
+++ b/src/testdir/test_taglist.vim
@@ -100,9 +100,9 @@
 
   help
   let tf = tagfiles()
-  " if 'helplang includes another language, then we may find
-  " 2 tagfiles (e.g.: for EN and RU)
-  " we may need to adjust this, if further translated help files are included
+  " If 'helplang' includes another language, then we may find 2 tagfiles
+  " (e.g.: for EN and RU).
+  " We may need to adjust this, if further translated help files are included.
   call assert_inrange(1, 2, len(tf))
   call assert_equal(fnamemodify(expand('$VIMRUNTIME/doc/tags'), ':p:gs?\\?/?'),
 	\           fnamemodify(tf[0], ':p:gs?\\?/?'))
diff --git a/src/version.c b/src/version.c
index b117443..fe4badc 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    581,
+/**/
     580,
 /**/
     579,
diff --git a/src/vim9class.c b/src/vim9class.c
index 9337082..70f2405 100644
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -3101,7 +3101,7 @@
 	{
 	    ret_m = m;
 	    ret_idx = i;
-            break;
+	    break;
 	}
     }
     if (idx != NULL)
@@ -3184,11 +3184,11 @@
 	    }
 	}
 	else if (STRCMP(name, m->ocm_name) == 0)
-        {
+	{
 	    ret_m = m;
 	    ret_idx = i;
-            break;
-        }
+	    break;
+	}
     }
     if (idx != NULL)
 	*idx = ret_idx;
@@ -3684,7 +3684,7 @@
     }
     else
 	semsg(_(e_method_not_found_on_class_str_str), method_name,
-	        cl->class_name);
+		cl->class_name);
     vim_free(method_name);
 }
 
diff --git a/src/vim9expr.c b/src/vim9expr.c
index 7af8bd6..c2428f4 100644
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -425,7 +425,7 @@
 
     if (type->tt_type == VAR_OBJECT)
     {
-        ocmember_T *m = object_member_lookup(cl, name, len, &m_idx);
+	ocmember_T *m = object_member_lookup(cl, name, len, &m_idx);
 	if (m_idx >= 0)
 	{
 	    if (*name == '_' && !inside_class(cctx, cl))
