diff --git a/src/buffer.c b/src/buffer.c
index a657e72..df92ecd 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -103,13 +103,13 @@
     {
 	// Delete the binary lines.
 	while (--line_count >= 0)
-	    ml_delete((linenr_T)1, FALSE);
+	    ml_delete((linenr_T)1);
     }
     else
     {
 	// Delete the converted lines.
 	while (curbuf->b_ml.ml_line_count > line_count)
-	    ml_delete(line_count, FALSE);
+	    ml_delete(line_count);
     }
     // Put the cursor on the first line.
     curwin->w_cursor.lnum = 1;
diff --git a/src/change.c b/src/change.c
index 45d6704..3a823b6 100644
--- a/src/change.c
+++ b/src/change.c
@@ -2317,7 +2317,7 @@
 	if (curbuf->b_ml.ml_flags & ML_EMPTY)	    // nothing to delete
 	    break;
 
-	ml_delete(first, TRUE);
+	ml_delete_flags(first, ML_DEL_MESSAGE);
 	++n;
 
 	// If we delete the last line in the file, stop
diff --git a/src/diff.c b/src/diff.c
index 16389fd..88dc8a6 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -2764,7 +2764,7 @@
 	    {
 		// remember deleting the last line of the buffer
 		buf_empty = curbuf->b_ml.ml_line_count == 1;
-		ml_delete(lnum, FALSE);
+		ml_delete(lnum);
 		--added;
 	    }
 	    for (i = 0; i < dp->df_count[idx_from] - start_skip - end_skip; ++i)
@@ -2786,7 +2786,7 @@
 			// Added the first line into an empty buffer, need to
 			// delete the dummy empty line.
 			buf_empty = FALSE;
-			ml_delete((linenr_T)2, FALSE);
+			ml_delete((linenr_T)2);
 		    }
 		}
 	    }
diff --git a/src/evalbuffer.c b/src/evalbuffer.c
index adbbca3..df5270a 100644
--- a/src/evalbuffer.c
+++ b/src/evalbuffer.c
@@ -513,7 +513,7 @@
     }
 
     for (lnum = first; lnum <= last; ++lnum)
-	ml_delete(first, TRUE);
+	ml_delete_flags(first, ML_DEL_MESSAGE);
 
     FOR_ALL_TAB_WINDOWS(tp, wp)
 	if (wp->w_buffer == buf)
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 777f149..ac55c26 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -633,7 +633,7 @@
     // delete the original lines if appending worked
     if (i == count)
 	for (i = 0; i < count; ++i)
-	    ml_delete(eap->line1, FALSE);
+	    ml_delete(eap->line1);
     else
 	count = 0;
 
@@ -779,7 +779,7 @@
 	return FAIL;
 
     for (l = line1; l <= line2; l++)
-	ml_delete(line1 + extra, TRUE);
+	ml_delete_flags(line1 + extra, ML_DEL_MESSAGE);
 
     if (!global_busy && num_lines > p_report)
 	smsg(NGETTEXT("%ld line moved", "%ld lines moved", num_lines),
@@ -3280,7 +3280,7 @@
 
 	if (empty)
 	{
-	    ml_delete(2L, FALSE);
+	    ml_delete(2L);
 	    empty = FALSE;
 	}
     }
@@ -3331,7 +3331,7 @@
     {
 	if (curbuf->b_ml.ml_flags & ML_EMPTY)	    // nothing to delete
 	    break;
-	ml_delete(eap->line1, FALSE);
+	ml_delete(eap->line1);
     }
 
     // make sure the cursor is not beyond the end of the file now
@@ -4531,7 +4531,7 @@
 			    if (u_savedel(lnum, nmatch_tl) != OK)
 				break;
 			    for (i = 0; i < nmatch_tl; ++i)
-				ml_delete(lnum, (int)FALSE);
+				ml_delete(lnum);
 			    mark_adjust(lnum, lnum + nmatch_tl - 1,
 						   (long)MAXLNUM, -nmatch_tl);
 			    if (subflags.do_ask)
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index a4db3c8..7b53e6c 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -6557,7 +6557,7 @@
 		    lnum = 1;
 		if (*ml_get(lnum) == NUL && u_savedel(lnum, 1L) == OK)
 		{
-		    ml_delete(lnum, FALSE);
+		    ml_delete(lnum);
 		    if (curwin->w_cursor.lnum > 1
 					     && curwin->w_cursor.lnum >= lnum)
 			--curwin->w_cursor.lnum;
diff --git a/src/fileio.c b/src/fileio.c
index 613f923..32af14c 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -862,7 +862,7 @@
 	}
 	// Delete the previously read lines.
 	while (lnum > from)
-	    ml_delete(lnum--, FALSE);
+	    ml_delete(lnum--);
 	file_rewind = FALSE;
 	if (set_options)
 	{
@@ -2292,7 +2292,7 @@
 #ifdef FEAT_NETBEANS_INTG
 	    netbeansFireChanges = 0;
 #endif
-	    ml_delete(curbuf->b_ml.ml_line_count, FALSE);
+	    ml_delete(curbuf->b_ml.ml_line_count);
 #ifdef FEAT_NETBEANS_INTG
 	    netbeansFireChanges = 1;
 #endif
@@ -3933,7 +3933,7 @@
     {
 	curbuf = frombuf;
 	for (lnum = curbuf->b_ml.ml_line_count; lnum > 0; --lnum)
-	    if (ml_delete(lnum, FALSE) == FAIL)
+	    if (ml_delete(lnum) == FAIL)
 	    {
 		// Oops!  We could try putting back the saved lines, but that
 		// might fail again...
@@ -4329,7 +4329,7 @@
 		    // Put the text back from the save buffer.  First
 		    // delete any lines that readfile() added.
 		    while (!BUFEMPTY())
-			if (ml_delete(buf->b_ml.ml_line_count, FALSE) == FAIL)
+			if (ml_delete(buf->b_ml.ml_line_count) == FAIL)
 			    break;
 		    (void)move_lines(savebuf, buf);
 		}
diff --git a/src/if_lua.c b/src/if_lua.c
index 9a3081b..3ecedaf 100644
--- a/src/if_lua.c
+++ b/src/if_lua.c
@@ -1341,7 +1341,7 @@
 	    curbuf = buf;
 	    luaL_error(L, "cannot save undo information");
 	}
-	else if (ml_delete(n, FALSE) == FAIL)
+	else if (ml_delete(n) == FAIL)
 	{
 	    curbuf = buf;
 	    luaL_error(L, "cannot delete line");
diff --git a/src/if_mzsch.c b/src/if_mzsch.c
index 8cc2e21..bfcdbea 100644
--- a/src/if_mzsch.c
+++ b/src/if_mzsch.c
@@ -2468,7 +2468,7 @@
 	    curbuf = savebuf;
 	    raise_vim_exn(_("cannot save undo information"));
 	}
-	else if (ml_delete((linenr_T)n, FALSE) == FAIL)
+	else if (ml_delete((linenr_T)n) == FAIL)
 	{
 	    curbuf = savebuf;
 	    raise_vim_exn(_("cannot delete line"));
@@ -2597,7 +2597,7 @@
 	else
 	{
 	    for (i = 0; i < old_len; i++)
-		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+		if (ml_delete((linenr_T)lo) == FAIL)
 		{
 		    curbuf = savebuf;
 		    raise_vim_exn(_("cannot delete line"));
@@ -2665,7 +2665,7 @@
 	     */
 	    for (i = 0; i < old_len - new_len; ++i)
 	    {
-		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+		if (ml_delete((linenr_T)lo) == FAIL)
 		{
 		    curbuf = savebuf;
 		    free_array(array);
diff --git a/src/if_perl.xs b/src/if_perl.xs
index 015189c..ef02730 100644
--- a/src/if_perl.xs
+++ b/src/if_perl.xs
@@ -1067,7 +1067,7 @@
     }
     else
     {
-	ml_delete(*line, FALSE);
+	ml_delete(*line);
 	deleted_lines_mark(*line, 1L);
 	--(*end);
 	--(*line);
@@ -1862,7 +1862,7 @@
 
 		    if (u_savedel(lnum, 1) == OK)
 		    {
-			ml_delete(lnum, 0);
+			ml_delete(lnum);
 			check_cursor();
 			deleted_lines_mark(lnum, 1L);
 		    }
diff --git a/src/if_py_both.h b/src/if_py_both.h
index 9f563f0..e262d1f 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -4399,7 +4399,7 @@
 
 	if (u_savedel((linenr_T)n, 1L) == FAIL)
 	    RAISE_UNDO_FAIL;
-	else if (ml_delete((linenr_T)n, FALSE) == FAIL)
+	else if (ml_delete((linenr_T)n) == FAIL)
 	    RAISE_DELETE_LINE_FAIL;
 	else
 	{
@@ -4512,7 +4512,7 @@
 	{
 	    for (i = 0; i < n; ++i)
 	    {
-		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+		if (ml_delete((linenr_T)lo) == FAIL)
 		{
 		    RAISE_DELETE_LINE_FAIL;
 		    break;
@@ -4588,7 +4588,7 @@
 	if (!PyErr_Occurred())
 	{
 	    for (i = 0; i < old_len - new_len; ++i)
-		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+		if (ml_delete((linenr_T)lo) == FAIL)
 		{
 		    RAISE_DELETE_LINE_FAIL;
 		    break;
diff --git a/src/if_ruby.c b/src/if_ruby.c
index 6773a2a..2480ee4 100644
--- a/src/if_ruby.c
+++ b/src/if_ruby.c
@@ -1442,7 +1442,7 @@
 
 	if (u_savedel(n, 1) == OK)
 	{
-	    ml_delete(n, 0);
+	    ml_delete(n);
 
 	    // Changes to non-active buffers should properly refresh
 	    //   SegPhault - 01/09/05
diff --git a/src/if_tcl.c b/src/if_tcl.c
index 17e20ee..c274b26 100644
--- a/src/if_tcl.c
+++ b/src/if_tcl.c
@@ -735,7 +735,7 @@
 		    i = n;
 		    do
 		    {
-			if (ml_delete((linenr_T)i, FALSE) != OK)
+			if (ml_delete((linenr_T)i) != OK)
 			    goto setListError;
 			++n;
 		    } while (n <= val2);
@@ -783,7 +783,7 @@
 	    }
 	    for (i = 0; i < n; i++)
 	    {
-		ml_delete((linenr_T)val1, FALSE);
+		ml_delete((linenr_T)val1);
 		err = vimerror(interp);
 		if (err != TCL_OK)
 		    break;
diff --git a/src/memline.c b/src/memline.c
index 3379a39..73db42f 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -1386,7 +1386,7 @@
      * contents of the current buffer.
      */
     while (!(curbuf->b_ml.ml_flags & ML_EMPTY))
-	ml_delete((linenr_T)1, FALSE);
+	ml_delete((linenr_T)1);
 
     /*
      * Try reading the original file to obtain the values of 'fileformat',
@@ -1664,7 +1664,7 @@
      */
     while (curbuf->b_ml.ml_line_count > lnum
 				       && !(curbuf->b_ml.ml_flags & ML_EMPTY))
-	ml_delete(curbuf->b_ml.ml_line_count, FALSE);
+	ml_delete(curbuf->b_ml.ml_line_count);
     curbuf->b_flags |= BF_RECOVERED;
 
     recoverymode = FALSE;
@@ -3705,9 +3705,9 @@
  * return FAIL for failure, OK otherwise
  */
     int
-ml_delete(linenr_T lnum, int message)
+ml_delete(linenr_T lnum)
 {
-    return ml_delete_flags(lnum, message ? ML_DEL_MESSAGE : 0);
+    return ml_delete_flags(lnum, 0);
 }
 
 /*
diff --git a/src/normal.c b/src/normal.c
index a39b1d4..f400141 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -7413,7 +7413,7 @@
 	// line that needs to be deleted now.
 	if (empty && *ml_get(curbuf->b_ml.ml_line_count) == NUL)
 	{
-	    ml_delete(curbuf->b_ml.ml_line_count, TRUE);
+	    ml_delete_flags(curbuf->b_ml.ml_line_count, ML_DEL_MESSAGE);
 	    deleted_lines(curbuf->b_ml.ml_line_count + 1, 1);
 
 	    // If the cursor was in that line, move it to the end of the last
diff --git a/src/popupmenu.c b/src/popupmenu.c
index 2fe4cff..197cdca 100644
--- a/src/popupmenu.c
+++ b/src/popupmenu.c
@@ -817,7 +817,7 @@
 		{
 		    // Already a "wipeout" buffer, make it empty.
 		    while (!BUFEMPTY())
-			ml_delete((linenr_T)1, FALSE);
+			ml_delete((linenr_T)1);
 		}
 		else
 		{
@@ -860,7 +860,7 @@
 			}
 		    }
 		    // delete the empty last line
-		    ml_delete(curbuf->b_ml.ml_line_count, FALSE);
+		    ml_delete(curbuf->b_ml.ml_line_count);
 
 		    // Increase the height of the preview window to show the
 		    // text, but no more than 'previewheight' lines.
diff --git a/src/popupwin.c b/src/popupwin.c
index cee848a..fbda48b 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -1537,7 +1537,7 @@
     // Clear the buffer, then replace the lines.
     curbuf = buf;
     for (lnum = buf->b_ml.ml_line_count; lnum > 0; --lnum)
-	ml_delete(lnum, FALSE);
+	ml_delete(lnum);
     curbuf = curwin->w_buffer;
 
     // Add text to the buffer.
@@ -1563,7 +1563,7 @@
 
     // delete the line that was in the empty buffer
     curbuf = buf;
-    ml_delete(buf->b_ml.ml_line_count, FALSE);
+    ml_delete(buf->b_ml.ml_line_count);
     curbuf = curwin->w_buffer;
 }
 
diff --git a/src/proto/memline.pro b/src/proto/memline.pro
index de11868..364f0aa 100644
--- a/src/proto/memline.pro
+++ b/src/proto/memline.pro
@@ -26,7 +26,7 @@
 int ml_append_buf(buf_T *buf, linenr_T lnum, char_u *line, colnr_T len, int newfile);
 int ml_replace(linenr_T lnum, char_u *line, int copy);
 int ml_replace_len(linenr_T lnum, char_u *line_arg, colnr_T len_arg, int has_props, int copy);
-int ml_delete(linenr_T lnum, int message);
+int ml_delete(linenr_T lnum);
 int ml_delete_flags(linenr_T lnum, int flags);
 void ml_setmarked(linenr_T lnum);
 linenr_T ml_firstmarked(void);
diff --git a/src/quickfix.c b/src/quickfix.c
index 4b3f164..f3ad4cd 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -4499,7 +4499,7 @@
 
 	// delete all existing lines
 	while ((curbuf->b_ml.ml_flags & ML_EMPTY) == 0)
-	    (void)ml_delete((linenr_T)1, FALSE);
+	    (void)ml_delete((linenr_T)1);
     }
 
     // Check if there is anything to display
@@ -4533,7 +4533,7 @@
 
 	if (old_last == NULL)
 	    // Delete the empty line which is now at the end
-	    (void)ml_delete(lnum + 1, FALSE);
+	    (void)ml_delete(lnum + 1);
     }
 
     // correct cursor position
diff --git a/src/spell.c b/src/spell.c
index dab6aea..20826f3 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -3810,7 +3810,7 @@
 
     // Delete the empty line that we started with.
     if (curbuf->b_ml.ml_line_count > 1)
-	ml_delete(curbuf->b_ml.ml_line_count, FALSE);
+	ml_delete(curbuf->b_ml.ml_line_count);
 
     redraw_later(NOT_VALID);
 }
diff --git a/src/terminal.c b/src/terminal.c
index 59bf039..86a1a0f 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -1609,7 +1609,7 @@
     {
 	// Delete the empty line that was in the empty buffer.
 	curbuf = buf;
-	ml_delete(1, FALSE);
+	ml_delete(1);
 	curbuf = curwin->w_buffer;
     }
 }
@@ -1683,7 +1683,7 @@
     while (curbuf->b_ml.ml_line_count > term->tl_scrollback_scrolled
 							    && gap->ga_len > 0)
     {
-	ml_delete(curbuf->b_ml.ml_line_count, FALSE);
+	ml_delete(curbuf->b_ml.ml_line_count);
 	line = (sb_line_T *)gap->ga_data + gap->ga_len - 1;
 	vim_free(line->sb_cells);
 	--gap->ga_len;
@@ -3142,7 +3142,7 @@
 	{
 	    vim_free(((sb_line_T *)gap->ga_data + i)->sb_cells);
 	    if (update_buffer)
-		ml_delete(1, FALSE);
+		ml_delete(1);
 	}
 	curbuf = curwin->w_buffer;
 
@@ -5148,7 +5148,7 @@
 	{
 	    buf = curbuf;
 	    while (!(curbuf->b_ml.ml_flags & ML_EMPTY))
-		ml_delete((linenr_T)1, FALSE);
+		ml_delete((linenr_T)1);
 	    free_scrollback(curbuf->b_term);
 	    redraw_later(NOT_VALID);
 	}
@@ -5183,7 +5183,7 @@
 	}
 
 	// Delete the empty line that was in the empty buffer.
-	ml_delete(1, FALSE);
+	ml_delete(1);
 
 	// For term_dumpload() we are done here.
 	if (!do_diff)
@@ -5374,7 +5374,7 @@
 	if (p == NULL)
 	    return OK;
 	ml_append(bot_start, p, 0, FALSE);
-	ml_delete(1, FALSE);
+	ml_delete(1);
 	vim_free(p);
     }
 
@@ -5384,7 +5384,7 @@
 	p = vim_strsave(ml_get(bot_start + lnum));
 	if (p == NULL)
 	    return OK;
-	ml_delete(bot_start + lnum, FALSE);
+	ml_delete(bot_start + lnum);
 	ml_append(lnum - 1, p, 0, FALSE);
 	vim_free(p);
     }
@@ -5394,14 +5394,14 @@
     if (p == NULL)
 	return OK;
     ml_append(line_count - top_rows - 1, p, 0, FALSE);
-    ml_delete(bot_rows + 1, FALSE);
+    ml_delete(bot_rows + 1);
     vim_free(p);
 
     // move bottom title to top
     p = vim_strsave(ml_get(line_count - top_rows));
     if (p == NULL)
 	return OK;
-    ml_delete(line_count - top_rows, FALSE);
+    ml_delete(line_count - top_rows);
     ml_append(bot_rows, p, 0, FALSE);
     vim_free(p);
 
diff --git a/src/version.c b/src/version.c
index f60d1a4..3bd012b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    853,
+/**/
     852,
 /**/
     851,
