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))
