diff --git a/src/ops.c b/src/ops.c
index beab33c1591b3258c7564524b281e11a79d099a4..98bd2d171aa7f54cc12255c87882a9d1502326bb 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -2433,7 +2433,8 @@ swapchar(op_type, pos)
 	    pos_T   sp = curwin->w_cursor;
 
 	    curwin->w_cursor = *pos;
-	    del_char(FALSE);
+	    /* don't use del_char(), it also removes composing chars */
+	    del_bytes(utf_ptr2len(ml_get_cursor()), FALSE, FALSE);
 	    ins_char(nc);
 	    curwin->w_cursor = sp;
 	}