diff --git a/src/screen.c b/src/screen.c
index 4166928..322efce 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -3051,6 +3051,38 @@
 }
 #endif /* FEAT_FOLDING */
 
+#ifdef FEAT_TEXT_PROP
+static textprop_T	*current_text_props = NULL;
+static buf_T		*current_buf = NULL;
+
+    static int
+#ifdef __BORLANDC__
+_RTLENTRYF
+#endif
+text_prop_compare(const void *s1, const void *s2)
+{
+    int  idx1, idx2;
+    proptype_T  *pt1, *pt2;
+    colnr_T col1, col2;
+
+    idx1 = *(int *)s1;
+    idx2 = *(int *)s2;
+    pt1 = text_prop_type_by_id(current_buf, current_text_props[idx1].tp_type);
+    pt2 = text_prop_type_by_id(current_buf, current_text_props[idx2].tp_type);
+    if (pt1 == pt2)
+	return 0;
+    if (pt1 == NULL)
+	return -1;
+    if (pt2 == NULL)
+	return 1;
+    if (pt1->pt_priority != pt2->pt_priority)
+	return pt1->pt_priority > pt2->pt_priority ? 1 : -1;
+    col1 = current_text_props[idx1].tp_col;
+    col2 = current_text_props[idx2].tp_col;
+    return col1 == col2 ? 0 : col1 > col2 ? 1 : -1;
+}
+#endif
+
 /*
  * Display line "lnum" of window 'wp' on the screen.
  * Start at row "startrow", stop when "endrow" is reached.
@@ -4322,34 +4354,32 @@
 			   && vcol >= text_props[text_prop_next].tp_col - 1)
 		    text_prop_idxs[text_props_active++] = text_prop_next++;
 
-		text_prop_type = NULL;
+		text_prop_attr = 0;
 		if (text_props_active > 0)
 		{
-		    int max_priority = INT_MIN;
-		    int max_col = 0;
+		    // Sort the properties on priority and/or starting last.
+		    // Then combine the attributes, highest priority last.
+		    current_text_props = text_props;
+		    current_buf = wp->w_buffer;
+		    qsort((void *)text_prop_idxs, (size_t)text_props_active,
+					       sizeof(int), text_prop_compare);
 
-		    // Get the property type with the highest priority
-		    // and/or starting last.
 		    for (pi = 0; pi < text_props_active; ++pi)
 		    {
-			int		tpi = text_prop_idxs[pi];
-			proptype_T  *pt;
+			int	    tpi = text_prop_idxs[pi];
+			proptype_T  *pt = text_prop_type_by_id(wp->w_buffer, text_props[tpi].tp_type);
 
-			pt = text_prop_type_by_id(
-				curwin->w_buffer, text_props[tpi].tp_type);
-			if (pt != NULL
-				&& (pt->pt_priority > max_priority
-				    || (pt->pt_priority == max_priority
-				    && text_props[tpi].tp_col >= max_col)))
+			if (pt != NULL)
 			{
+			    int pt_attr = syn_id2attr(pt->pt_hl_id);
+
 			    text_prop_type = pt;
-			    max_priority = pt->pt_priority;
-			    max_col = text_props[tpi].tp_col;
+			    if (text_prop_attr == 0)
+				text_prop_attr = pt_attr;
+			    else
+				text_prop_attr = hl_combine_attr(text_prop_attr, pt_attr);
 			}
 		    }
-		    if (text_prop_type != NULL)
-			text_prop_attr =
-				     syn_id2attr(text_prop_type->pt_hl_id);
 		}
 	    }
 #endif
@@ -4775,10 +4805,6 @@
 		if (has_spell && v >= word_end && v > cur_checked_col)
 		{
 		    spell_attr = 0;
-# ifdef FEAT_SYN_HL
-		    if (!attr_pri)
-			char_attr = syntax_attr;
-# endif
 		    if (c != 0 && (
 # ifdef FEAT_SYN_HL
 				!has_syntax ||
