diff --git a/src/buffer.c b/src/buffer.c
index c35477f..07b89e3 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -6077,10 +6077,10 @@
     int
 sign_in_group(signlist_T *sign, char_u *group)
 {
-    return ((group != NULL && STRCMP(group, "*") == 0) ||
-	    (group == NULL && sign->group == NULL) ||
-	    (group != NULL && sign->group != NULL &&
-				STRCMP(group, sign->group->sg_name) == 0));
+    return ((group != NULL && STRCMP(group, "*") == 0)
+	    || (group == NULL && sign->group == NULL)
+	    || (group != NULL && sign->group != NULL
+				 && STRCMP(group, sign->group->sg_name) == 0));
 }
 
 /*
@@ -6207,6 +6207,7 @@
     linenr_T
 buf_delsign(
     buf_T	*buf,		// buffer sign is stored in
+    linenr_T	atlnum,		// sign at this line, 0 - at any line
     int		id,		// sign id
     char_u	*group)		// sign group
 {
@@ -6220,7 +6221,9 @@
     for (sign = buf->b_signlist; sign != NULL; sign = next)
     {
 	next = sign->next;
-	if ((id == 0 || sign->id == id) && sign_in_group(sign, group))
+	if ((id == 0 || sign->id == id) &&
+		(atlnum == 0 || sign->lnum == atlnum) &&
+		sign_in_group(sign, group))
 
 	{
 	    *lastp = next;
@@ -6230,8 +6233,14 @@
 	    if (sign->group != NULL)
 		sign_group_unref(sign->group->sg_name);
 	    vim_free(sign);
+	    update_debug_sign(buf, lnum);
 	    // Check whether only one sign needs to be deleted
-	    if (group == NULL || (*group != '*' && id != 0))
+	    // If deleting a sign with a specific identifer in a particular
+	    // group or deleting any sign at a particular line number, delete
+	    // only one sign.
+	    if (group == NULL
+		    || (*group != '*' && id != 0)
+		    || (*group == '*' && atlnum != 0))
 		break;
 	}
 	else
@@ -6272,17 +6281,18 @@
 
 /*
  * Return the sign at line 'lnum' in buffer 'buf'. Returns NULL if a sign is
- * not found at the line.
+ * not found at the line. If 'groupname' is NULL, searches in the global group.
  */
     static signlist_T *
 buf_getsign_at_line(
     buf_T	*buf,		// buffer whose sign we are searching for
-    linenr_T	lnum)		// line number of sign
+    linenr_T	lnum,		// line number of sign
+    char_u	*groupname)	// sign group name
 {
     signlist_T	*sign;		// a sign in the signlist
 
     FOR_ALL_SIGNS_IN_BUF(buf, sign)
-	if (sign->lnum == lnum)
+	if (sign->lnum == lnum && sign_in_group(sign, groupname))
 	    return sign;
 
     return NULL;
@@ -6312,11 +6322,12 @@
     int
 buf_findsign_id(
     buf_T	*buf,		// buffer whose sign we are searching for
-    linenr_T	lnum)		// line number of sign
+    linenr_T	lnum,		// line number of sign
+    char_u	*groupname)	// sign group name
 {
     signlist_T	*sign;		// a sign in the signlist
 
-    sign = buf_getsign_at_line(buf, lnum);
+    sign = buf_getsign_at_line(buf, lnum, groupname);
     if (sign != NULL)
 	return sign->id;
 
@@ -6401,16 +6412,16 @@
 }
 
 /*
- * Delete all signs in all buffers.
+ * Delete all the signs in the specified group in all the buffers.
  */
     void
-buf_delete_all_signs(void)
+buf_delete_all_signs(char_u *groupname)
 {
     buf_T	*buf;		/* buffer we are checking for signs */
 
     FOR_ALL_BUFFERS(buf)
 	if (buf->b_signlist != NULL)
-	    buf_delete_signs(buf, (char_u *)"*");
+	    buf_delete_signs(buf, groupname);
 }
 
 /*
