diff --git a/src/edit.c b/src/edit.c
index 9f7f1d6..75fe691 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -9047,72 +9047,94 @@
 	/*
 	 * Delete upto starting point, start of line or previous word.
 	 */
-	else do
+	else
 	{
-#ifdef FEAT_RIGHTLEFT
-	    if (!revins_on) /* put cursor on char to be deleted */
-#endif
-		dec_cursor();
+#ifdef FEAT_MBYTE
+	    int cclass = 0, prev_cclass = 0;
 
-	    /* start of word? */
-	    if (mode == BACKSPACE_WORD && !vim_isspace(gchar_cursor()))
-	    {
-		mode = BACKSPACE_WORD_NOT_SPACE;
-		temp = vim_iswordc(gchar_cursor());
-	    }
-	    /* end of word? */
-	    else if (mode == BACKSPACE_WORD_NOT_SPACE
-		    && (vim_isspace(cc = gchar_cursor())
-			    || vim_iswordc(cc) != temp))
-	    {
-#ifdef FEAT_RIGHTLEFT
-		if (!revins_on)
+	    if (has_mbyte)
+		cclass = mb_get_class(ml_get_cursor());
 #endif
-		    inc_cursor();
+	    do
+	    {
 #ifdef FEAT_RIGHTLEFT
-		else if (State & REPLACE_FLAG)
+		if (!revins_on) /* put cursor on char to be deleted */
+#endif
 		    dec_cursor();
-#endif
-		break;
-	    }
-	    if (State & REPLACE_FLAG)
-		replace_do_bs(-1);
-	    else
-	    {
+
+		cc = gchar_cursor();
 #ifdef FEAT_MBYTE
-		if (enc_utf8 && p_deco)
-		    (void)utfc_ptr2char(ml_get_cursor(), cpc);
-#endif
-		(void)del_char(FALSE);
-#ifdef FEAT_MBYTE
-		/*
-		 * If there are combining characters and 'delcombine' is set
-		 * move the cursor back.  Don't back up before the base
-		 * character.
-		 */
-		if (enc_utf8 && p_deco && cpc[0] != NUL)
-		    inc_cursor();
-#endif
-#ifdef FEAT_RIGHTLEFT
-		if (revins_chars)
+		/* look multi-byte character class */
+		if (has_mbyte)
 		{
-		    revins_chars--;
-		    revins_legal++;
+		    prev_cclass = cclass;
+		    cclass = mb_get_class(ml_get_cursor());
 		}
-		if (revins_on && gchar_cursor() == NUL)
-		    break;
 #endif
-	    }
-	    /* Just a single backspace?: */
-	    if (mode == BACKSPACE_CHAR)
-		break;
-	} while (
+
+		/* start of word? */
+		if (mode == BACKSPACE_WORD && !vim_isspace(cc))
+		{
+		    mode = BACKSPACE_WORD_NOT_SPACE;
+		    temp = vim_iswordc(cc);
+		}
+		/* end of word? */
+		else if (mode == BACKSPACE_WORD_NOT_SPACE
+			&& ((vim_isspace(cc) || vim_iswordc(cc) != temp)
+#ifdef FEAT_MBYTE
+			|| prev_cclass != cclass
+#endif
+			))
+		{
 #ifdef FEAT_RIGHTLEFT
-		revins_on ||
+		    if (!revins_on)
 #endif
-		(curwin->w_cursor.col > mincol
-		 && (curwin->w_cursor.lnum != Insstart_orig.lnum
-		     || curwin->w_cursor.col != Insstart_orig.col)));
+			inc_cursor();
+#ifdef FEAT_RIGHTLEFT
+		    else if (State & REPLACE_FLAG)
+			dec_cursor();
+#endif
+		    break;
+		}
+		if (State & REPLACE_FLAG)
+		    replace_do_bs(-1);
+		else
+		{
+#ifdef FEAT_MBYTE
+		    if (enc_utf8 && p_deco)
+			(void)utfc_ptr2char(ml_get_cursor(), cpc);
+#endif
+		    (void)del_char(FALSE);
+#ifdef FEAT_MBYTE
+		    /*
+		     * If there are combining characters and 'delcombine' is set
+		     * move the cursor back.  Don't back up before the base
+		     * character.
+		     */
+		    if (enc_utf8 && p_deco && cpc[0] != NUL)
+			inc_cursor();
+#endif
+#ifdef FEAT_RIGHTLEFT
+		    if (revins_chars)
+		    {
+			revins_chars--;
+			revins_legal++;
+		    }
+		    if (revins_on && gchar_cursor() == NUL)
+			break;
+#endif
+		}
+		/* Just a single backspace?: */
+		if (mode == BACKSPACE_CHAR)
+		    break;
+	    } while (
+#ifdef FEAT_RIGHTLEFT
+		    revins_on ||
+#endif
+		    (curwin->w_cursor.col > mincol
+		    && (curwin->w_cursor.lnum != Insstart_orig.lnum
+			|| curwin->w_cursor.col != Insstart_orig.col)));
+	}
 	did_backspace = TRUE;
     }
 #ifdef FEAT_SMARTINDENT
