diff --git a/src/drawline.c b/src/drawline.c
index 764d0fb..a14dd90 100644
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -1223,6 +1223,8 @@
 #ifdef FEAT_DIFF
     int		change_start = MAXCOL;	// first col of changed area
     int		change_end = -1;	// last col of changed area
+    diffline_T	line_changes;
+    int		change_index = -1;
 #endif
     colnr_T	trailcol = MAXCOL;	// start of trailing spaces
     colnr_T	leadcol = 0;		// start of leading spaces
@@ -1471,16 +1473,37 @@
     int linestatus = 0;
     wlv.filler_lines = diff_check_with_linestatus(wp, lnum, &linestatus);
 
+    CLEAR_FIELD(line_changes);
+
     if (wlv.filler_lines < 0 || linestatus < 0)
     {
 	if (wlv.filler_lines == -1 || linestatus == -1)
 	{
-	    if (diff_find_change(wp, lnum, &change_start, &change_end))
+	    if (diff_find_change(wp, lnum, &line_changes))
+	    {
 		wlv.diff_hlf = HLF_ADD;	// added line
-	    else if (change_start == 0)
-		wlv.diff_hlf = HLF_TXD;	// changed text
+	    }
+	    else if (line_changes.num_changes > 0)
+	    {
+		int added = diff_change_parse(
+			&line_changes, &line_changes.changes[0],
+			&change_start, &change_end);
+		if (change_start == 0)
+		{
+		    if (added)
+			wlv.diff_hlf = HLF_TXA;	// added text on changed line
+		    else
+			wlv.diff_hlf = HLF_TXD;	// changed text on changed line
+		}
+		else
+		    wlv.diff_hlf = HLF_CHD;	// unchanged text on changed line
+		change_index = 0;
+	    }
 	    else
+	    {
 		wlv.diff_hlf = HLF_CHD;	// changed line
+		change_index = 0;
+	    }
 	}
 	else
 	    wlv.diff_hlf = HLF_ADD;
@@ -2438,13 +2461,28 @@
 #ifdef FEAT_DIFF
 	    if (wlv.diff_hlf != (hlf_T)0)
 	    {
+		if (line_changes.num_changes > 0
+			&& change_index >= 0
+			&& change_index < line_changes.num_changes - 1)
+		{
+		    if (ptr - line >= line_changes.changes[change_index+1].dc_start[line_changes.bufidx])
+			change_index += 1;
+		}
+		int added = FALSE;
+		if (line_changes.num_changes > 0 && change_index >= 0 && change_index < line_changes.num_changes)
+		{
+		    added = diff_change_parse(&line_changes,
+			    &line_changes.changes[change_index],
+			    &change_start,
+			    &change_end);
+		}
 		// When there is extra text (e.g. virtual text) it gets the
 		// diff highlighting for the line, but not for changed text.
 		if (wlv.diff_hlf == HLF_CHD && ptr - line >= change_start
 							   && wlv.n_extra == 0)
-		    wlv.diff_hlf = HLF_TXD;		// changed text
-		if (wlv.diff_hlf == HLF_TXD
-			&& ((ptr - line > change_end && wlv.n_extra == 0)
+		    wlv.diff_hlf = added ? HLF_TXA : HLF_TXD;	// added/changed text
+		if ((wlv.diff_hlf == HLF_TXD || wlv.diff_hlf == HLF_TXA)
+			&& ((ptr - line >= change_end && wlv.n_extra == 0)
 			       || (wlv.n_extra > 0 && wlv.extra_for_textprop)))
 		    wlv.diff_hlf = HLF_CHD;		// changed line
 		wlv.line_attr = HL_ATTR(wlv.diff_hlf);
@@ -3502,7 +3540,7 @@
 			wlv.char_attr = wlv.sattr.sat_linehl;
 #endif
 # ifdef FEAT_DIFF
-		    if (wlv.diff_hlf == HLF_TXD)
+		    if (wlv.diff_hlf == HLF_TXD || wlv.diff_hlf == HLF_TXA)
 		    {
 			wlv.diff_hlf = HLF_CHD;
 			if (vi_attr == 0 || wlv.char_attr != vi_attr)
