diff --git a/src/sign.c b/src/sign.c
index 8aa043b..1ae714d 100644
--- a/src/sign.c
+++ b/src/sign.c
@@ -34,6 +34,7 @@
     int		sn_text_hl;	// highlight ID for text
     int		sn_cul_hl;	// highlight ID for text on current line when 'cursorline' is set
     int		sn_num_hl;	// highlight ID for line number
+    int		sn_priority;	// default priority of this sign, -1 means SIGN_DEF_PRIO
 };
 
 static sign_T	*first_sign = NULL;
@@ -1047,7 +1048,8 @@
 	char_u	*text,
 	char_u	*texthl,
 	char_u	*culhl,
-	char_u	*numhl)
+	char_u	*numhl,
+	int	prio)
 {
     sign_T	*sp_prev;
     sign_T	*sp;
@@ -1083,6 +1085,8 @@
     if (text != NULL && (sign_define_init_text(sp, text) == FAIL))
 	return FAIL;
 
+    sp->sn_priority = prio;
+
     if (linehl != NULL)
     {
 	if (*linehl == NUL)
@@ -1206,6 +1210,10 @@
     if (*sign_id == 0)
 	*sign_id = sign_group_get_next_signid(buf, sign_group);
 
+    // Use the default priority value for this sign.
+    if (prio == -1)
+	prio = (sp->sn_priority != -1) ? sp->sn_priority : SIGN_DEF_PRIO;
+
     if (lnum > 0)
 	// ":sign place {id} line={lnum} name={name} file={fname}":
 	// place a sign
@@ -1338,6 +1346,7 @@
     char_u	*texthl = NULL;
     char_u	*culhl = NULL;
     char_u	*numhl = NULL;
+    int		prio = -1;
     int		failed = FALSE;
 
     // set values for a defined sign.
@@ -1377,6 +1386,12 @@
 	    arg += 6;
 	    numhl = vim_strnsave(arg, p - arg);
 	}
+	else if (STRNCMP(arg, "priority=", 9) == 0)
+	{
+	    arg += 9;
+	    prio = atoi((char *)arg);
+	    arg = skiptowhite(arg);
+	}
 	else
 	{
 	    semsg(_(e_invalid_argument_str), arg);
@@ -1386,7 +1401,7 @@
     }
 
     if (!failed)
-	sign_define_by_name(sign_name, icon, linehl, text, texthl, culhl, numhl);
+	sign_define_by_name(sign_name, icon, linehl, text, texthl, culhl, numhl, prio);
 
     vim_free(icon);
     vim_free(text);
@@ -1721,7 +1736,7 @@
 	linenr_T	lnum = -1;
 	char_u		*sign_name = NULL;
 	char_u		*group = NULL;
-	int		prio = SIGN_DEF_PRIO;
+	int		prio = -1;
 
 	// Parse command line arguments
 	if (parse_sign_cmd_args(idx, arg, &sign_name, &id, &group, &prio,
@@ -1750,6 +1765,8 @@
 	dict_add_string(retdict, "icon", sp->sn_icon);
     if (sp->sn_text != NULL)
 	dict_add_string(retdict, "text", sp->sn_text);
+    if (sp->sn_priority > 0)
+	dict_add_number(retdict, "priority", sp->sn_priority);
     if (sp->sn_line_hl > 0)
     {
 	p = get_highlight_name_ext(NULL, sp->sn_line_hl - 1, FALSE);
@@ -1913,6 +1930,7 @@
 sign_list_defined(sign_T *sp)
 {
     char_u	*p;
+    char	lbuf[MSG_BUF_LEN];
 
     smsg("sign %s", sp->sn_name);
     if (sp->sn_icon != NULL)
@@ -1931,6 +1949,11 @@
 	msg_puts(" text=");
 	msg_outtrans(sp->sn_text);
     }
+    if (sp->sn_priority > 0)
+    {
+	vim_snprintf(lbuf, MSG_BUF_LEN, " priority=%d", sp->sn_priority);
+	msg_puts(lbuf);
+    }
     if (sp->sn_line_hl > 0)
     {
 	msg_puts(" linehl=");
@@ -2088,7 +2111,8 @@
 	{
 	    char *define_arg[] =
 	    {
-		"culhl=", "icon=", "linehl=", "numhl=", "text=", "texthl=", NULL
+		"culhl=", "icon=", "linehl=", "numhl=", "text=", "texthl=", "priority=",
+		NULL
 	    };
 	    return (char_u *)define_arg[idx];
 	}
@@ -2261,6 +2285,7 @@
     char_u	*texthl = NULL;
     char_u	*culhl = NULL;
     char_u	*numhl = NULL;
+    int		prio = -1;
     int		retval = -1;
 
     if (name_arg == NULL)
@@ -2281,9 +2306,10 @@
 	texthl = dict_get_string(dict, "texthl", TRUE);
 	culhl = dict_get_string(dict, "culhl", TRUE);
 	numhl = dict_get_string(dict, "numhl", TRUE);
+	prio = dict_get_number_def(dict, "priority", -1);
     }
 
-    if (sign_define_by_name(name, icon, linehl, text, texthl, culhl, numhl) == OK)
+    if (sign_define_by_name(name, icon, linehl, text, texthl, culhl, numhl, prio) == OK)
 	retval = 0;
 
 cleanup:
@@ -2511,7 +2537,7 @@
     buf_T	*buf = NULL;
     dictitem_T	*di;
     linenr_T	lnum = 0;
-    int		prio = SIGN_DEF_PRIO;
+    int		prio = -1;
     int		notanum = FALSE;
     int		ret_sign_id = -1;
 
