diff --git a/src/proto/screen.pro b/src/proto/screen.pro
index 665b772..2e5f2e0 100644
--- a/src/proto/screen.pro
+++ b/src/proto/screen.pro
@@ -5,6 +5,7 @@
 void redraw_all_later(int type);
 void redraw_curbuf_later(int type);
 void redraw_buf_later(buf_T *buf, int type);
+void redraw_buf_line_later(buf_T *buf, linenr_T lnum);
 void redraw_buf_and_status_later(buf_T *buf, int type);
 int redraw_asap(int type);
 void redraw_after_callback(int call_update_screen);
diff --git a/src/screen.c b/src/screen.c
index 880d784..926a090 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -264,6 +264,17 @@
 }
 
     void
+redraw_buf_line_later(buf_T *buf, linenr_T lnum)
+{
+    win_T	*wp;
+
+    FOR_ALL_WINDOWS(wp)
+	if (wp->w_buffer == buf && lnum >= wp->w_topline
+						  && lnum < wp->w_botline)
+	    redrawWinline(wp, lnum);
+}
+
+    void
 redraw_buf_and_status_later(buf_T *buf, int type)
 {
     win_T	*wp;
@@ -978,26 +989,13 @@
     win_foldinfo.fi_level = 0;
 # endif
 
-    /* update/delete a specific mark */
+    // update/delete a specific sign
+    redraw_buf_line_later(buf, lnum);
+
+    // check if it resulted in the need to redraw a window
     FOR_ALL_WINDOWS(wp)
-    {
-	if (buf != NULL && lnum > 0)
-	{
-	    if (wp->w_buffer == buf && lnum >= wp->w_topline
-						      && lnum < wp->w_botline)
-	    {
-		if (wp->w_redraw_top == 0 || wp->w_redraw_top > lnum)
-		    wp->w_redraw_top = lnum;
-		if (wp->w_redraw_bot == 0 || wp->w_redraw_bot < lnum)
-		    wp->w_redraw_bot = lnum;
-		redraw_win_later(wp, VALID);
-	    }
-	}
-	else
-	    redraw_win_later(wp, VALID);
 	if (wp->w_redr_type != 0)
 	    doit = TRUE;
-    }
 
     /* Return when there is nothing to do, screen updating is already
      * happening (recursive call), messages on the screen or still starting up.
diff --git a/src/sign.c b/src/sign.c
index 686a943..2cb39a5 100644
--- a/src/sign.c
+++ b/src/sign.c
@@ -327,8 +327,8 @@
     prev = NULL;
     FOR_ALL_SIGNS_IN_BUF(buf, sign)
     {
-	if (lnum == sign->lnum && id == sign->id &&
-		sign_in_group(sign, groupname))
+	if (lnum == sign->lnum && id == sign->id
+		&& sign_in_group(sign, groupname))
 	{
 	    // Update an existing sign
 	    sign->typenr = typenr;
@@ -427,9 +427,9 @@
     for (sign = buf->b_signlist; sign != NULL; sign = next)
     {
 	next = sign->next;
-	if ((id == 0 || sign->id == id) &&
-		(atlnum == 0 || sign->lnum == atlnum) &&
-		sign_in_group(sign, group))
+	if ((id == 0 || sign->id == id)
+		&& (atlnum == 0 || sign->lnum == atlnum)
+		&& sign_in_group(sign, group))
 
 	{
 	    *lastp = next;
@@ -439,7 +439,8 @@
 	    if (sign->group != NULL)
 		sign_group_unref(sign->group->sg_name);
 	    vim_free(sign);
-	    update_debug_sign(buf, lnum);
+	    redraw_buf_line_later(buf, lnum);
+
 	    // Check whether only one sign needs to be deleted
 	    // If deleting a sign with a specific identifer in a particular
 	    // group or deleting any sign at a particular line number, delete
@@ -453,13 +454,10 @@
 	    lastp = &sign->next;
     }
 
-    // When deleted the last sign need to redraw the windows to remove the
-    // sign column.
+    // When deleting the last sign the cursor position may change, because the
+    // sign columns no longer shows.
     if (buf->b_signlist == NULL)
-    {
-	redraw_buf_later(buf, NOT_VALID);
 	changed_cline_bef_curs();
-    }
 
     return lnum;
 }
@@ -932,7 +930,7 @@
 	// ":sign place {id} file={fname}": change sign type
 	lnum = buf_change_sign_type(buf, *sign_id, sign_group, sp->sn_typenr);
     if (lnum > 0)
-	update_debug_sign(buf, lnum);
+	redraw_buf_line_later(buf, lnum);
     else
     {
 	EMSG2(_("E885: Not possible to change sign %s"), sign_name);
@@ -1068,8 +1066,8 @@
 	//   :sign place
 	//   :sign place group={group}
 	//   :sign place group=*
-	if (lnum >= 0 || sign_name != NULL ||
-		(group != NULL && *group == '\0'))
+	if (lnum >= 0 || sign_name != NULL
+		|| (group != NULL && *group == '\0'))
 	    EMSG(_(e_invarg));
 	else
 	    sign_list_placed(buf, group);
@@ -1077,8 +1075,8 @@
     else
     {
 	// Place a new sign
-	if (sign_name == NULL || buf == NULL ||
-		(group != NULL && *group == '\0'))
+	if (sign_name == NULL || buf == NULL
+		|| (group != NULL && *group == '\0'))
 	{
 	    EMSG(_(e_invarg));
 	    return;
@@ -1174,8 +1172,8 @@
 	return;
     }
 
-    if (buf == NULL || (group != NULL && *group == '\0') ||
-					lnum >= 0 || sign_name != NULL)
+    if (buf == NULL || (group != NULL && *group == '\0')
+					     || lnum >= 0 || sign_name != NULL)
     {
 	// File or buffer is not specified or an empty group is used
 	// or a line number or a sign name is specified.
@@ -1330,7 +1328,7 @@
     // If the filename is not supplied for the sign place or the sign jump
     // command, then use the current buffer.
     if (filename == NULL && ((cmd == SIGNCMD_PLACE && lnum_arg)
-		|| cmd == SIGNCMD_JUMP))
+						       || cmd == SIGNCMD_JUMP))
 	*buf = curwin->w_buffer;
 
     return OK;
@@ -1522,10 +1520,10 @@
     {
 	if (!sign_in_group(sign, sign_group))
 	    continue;
-	if ((lnum == 0 && sign_id == 0) ||
-		(sign_id == 0 && lnum == sign->lnum) ||
-		(lnum == 0 && sign_id == sign->id) ||
-		(lnum == sign->lnum && sign_id == sign->id))
+	if ((lnum == 0 && sign_id == 0)
+		|| (sign_id == 0 && lnum == sign->lnum)
+		|| (lnum == 0 && sign_id == sign->id)
+		|| (lnum == sign->lnum && sign_id == sign->id))
 	{
 	    if ((sdict = sign_get_info(sign)) != NULL)
 		list_append_dict(l, sdict);
@@ -1864,8 +1862,8 @@
 	switch (cmd_idx)
 	{
 	    case SIGNCMD_DEFINE:
-		if (STRNCMP(last, "texthl", p - last) == 0 ||
-		    STRNCMP(last, "linehl", p - last) == 0)
+		if (STRNCMP(last, "texthl", p - last) == 0
+			|| STRNCMP(last, "linehl", p - last) == 0)
 		    xp->xp_context = EXPAND_HIGHLIGHT;
 		else if (STRNCMP(last, "icon", p - last) == 0)
 		    xp->xp_context = EXPAND_FILES;
diff --git a/src/version.c b/src/version.c
index 3375b1c..e1ea65e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -800,6 +800,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    709,
+/**/
     708,
 /**/
     707,
