diff --git a/src/eval.c b/src/eval.c
index e895b997b9a579a568d097cbf604c96f4bf8695e..d66fe57f40027ea5f606e262d3697d568549539d 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -14397,7 +14397,8 @@ f_setline(argvars, rettv)
 	    if (u_savesub(lnum) == OK && ml_replace(lnum, line, TRUE) == OK)
 	    {
 		changed_bytes(lnum, 0);
-		check_cursor_col();
+		if (lnum == curwin->w_cursor.lnum)
+		    check_cursor_col();
 		rettv->vval.v_number = 0;	/* OK */
 	    }
 	}
diff --git a/src/misc2.c b/src/misc2.c
index 14c4784cf2f5e5757fd2080ef00d46e84d45c06f..cdff6abadae0b848890aa31d9c70dfa43a4fcbe8 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -516,7 +516,14 @@ check_cursor_col()
 		|| virtual_active())
 	    curwin->w_cursor.col = len;
 	else
+	{
 	    curwin->w_cursor.col = len - 1;
+#ifdef FEAT_MBYTE
+	    /* prevent cursor from moving on the trail byte */
+	    if (has_mbyte)
+		mb_adjust_cursor();
+#endif
+	}
     }
 
 #ifdef FEAT_VIRTUALEDIT
diff --git a/src/version.c b/src/version.c
index 3c8b1733e48293e7fcf92d1fcadc54915c0121ef..47f2f33def5a6dfa4525be489747fbd072faac68 100644
--- a/src/version.c
+++ b/src/version.c
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    225,
 /**/
     224,
 /**/