diff --git a/src/diff.c b/src/diff.c
index 0bf0ef2..149022a 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -24,13 +24,17 @@
 static int	diff_busy = FALSE;	/* ex_diffgetput() is busy */
 
 /* flags obtained from the 'diffopt' option */
-#define DIFF_FILLER	1	// display filler lines
-#define DIFF_ICASE	2	// ignore case
-#define DIFF_IWHITE	4	// ignore change in white space
-#define DIFF_HORIZONTAL	8	// horizontal splits
-#define DIFF_VERTICAL	16	// vertical splits
-#define DIFF_HIDDEN_OFF	32	// diffoff when hidden
-#define DIFF_INTERNAL	64	// use internal xdiff algorithm
+#define DIFF_FILLER	0x001	// display filler lines
+#define DIFF_IBLANK	0x002	// ignore empty lines
+#define DIFF_ICASE	0x004	// ignore case
+#define DIFF_IWHITE	0x008	// ignore change in white space
+#define DIFF_IWHITEALL	0x010	// ignore all white space changes
+#define DIFF_IWHITEEOL	0x020	// ignore change in white space at EOL
+#define DIFF_HORIZONTAL	0x040	// horizontal splits
+#define DIFF_VERTICAL	0x080	// vertical splits
+#define DIFF_HIDDEN_OFF	0x100	// diffoff when hidden
+#define DIFF_INTERNAL	0x200	// use internal xdiff algorithm
+#define ALL_WHITE_DIFF (DIFF_IWHITE | DIFF_IWHITEALL | DIFF_IWHITEEOL)
 static int	diff_flags = DIFF_INTERNAL | DIFF_FILLER;
 
 static long diff_algorithm = 0;
@@ -1050,6 +1054,12 @@
 
     if (diff_flags & DIFF_IWHITE)
 	param.flags |= XDF_IGNORE_WHITESPACE_CHANGE;
+    if (diff_flags & DIFF_IWHITEALL)
+	param.flags |= XDF_IGNORE_WHITESPACE;
+    if (diff_flags & DIFF_IWHITEEOL)
+	param.flags |= XDF_IGNORE_WHITESPACE_AT_EOL;
+    if (diff_flags & DIFF_IBLANK)
+	param.flags |= XDF_IGNORE_BLANK_LINES;
 
     emit_cfg.ctxlen = 0; // don't need any diff_context here
     emit_cb.priv = &diffio->dio_diff;
@@ -1106,7 +1116,7 @@
 	// Build the diff command and execute it.  Always use -a, binary
 	// differences are of no use.  Ignore errors, diff returns
 	// non-zero when differences have been found.
-	vim_snprintf((char *)cmd, len, "diff %s%s%s%s%s %s",
+	vim_snprintf((char *)cmd, len, "diff %s%s%s%s%s%s%s%s %s",
 		diff_a_works == FALSE ? "" : "-a ",
 #if defined(MSWIN)
 		diff_bin_works == TRUE ? "--binary " : "",
@@ -1114,6 +1124,9 @@
 		"",
 #endif
 		(diff_flags & DIFF_IWHITE) ? "-b " : "",
+		(diff_flags & DIFF_IWHITEALL) ? "-w " : "",
+		(diff_flags & DIFF_IWHITEEOL) ? "-Z " : "",
+		(diff_flags & DIFF_IBLANK) ? "-B " : "",
 		(diff_flags & DIFF_ICASE) ? "-i " : "",
 		tmp_orig, tmp_new);
 	append_redir(cmd, (int)len, p_srr, tmp_diff);
@@ -1946,17 +1959,25 @@
     char_u	*p1, *p2;
     int		l;
 
-    if ((diff_flags & (DIFF_ICASE | DIFF_IWHITE)) == 0)
+    if ((diff_flags & DIFF_IBLANK)
+	    && (*skipwhite(s1) == NUL || *skipwhite(s2) == NUL))
+	return 0;
+
+    if ((diff_flags & (DIFF_ICASE | ALL_WHITE_DIFF)) == 0)
 	return STRCMP(s1, s2);
-    if ((diff_flags & DIFF_ICASE) && !(diff_flags & DIFF_IWHITE))
+    if ((diff_flags & DIFF_ICASE) && !(diff_flags & ALL_WHITE_DIFF))
 	return MB_STRICMP(s1, s2);
 
-    /* Ignore white space changes and possibly ignore case. */
     p1 = s1;
     p2 = s2;
+
+    // Ignore white space changes and possibly ignore case.
     while (*p1 != NUL && *p2 != NUL)
     {
-	if (VIM_ISWHITE(*p1) && VIM_ISWHITE(*p2))
+	if (((diff_flags & DIFF_IWHITE)
+		    && VIM_ISWHITE(*p1) && VIM_ISWHITE(*p2))
+		|| ((diff_flags & DIFF_IWHITEALL)
+		    && (VIM_ISWHITE(*p1) || VIM_ISWHITE(*p2))))
 	{
 	    p1 = skipwhite(p1);
 	    p2 = skipwhite(p2);
@@ -1970,7 +1991,7 @@
 	}
     }
 
-    /* Ignore trailing white space. */
+    // Ignore trailing white space.
     p1 = skipwhite(p1);
     p2 = skipwhite(p2);
     if (*p1 != NUL || *p2 != NUL)
@@ -2142,11 +2163,26 @@
 	    p += 8;
 	    diff_context_new = getdigits(&p);
 	}
+	else if (STRNCMP(p, "iblank", 6) == 0)
+	{
+	    p += 6;
+	    diff_flags_new |= DIFF_IBLANK;
+	}
 	else if (STRNCMP(p, "icase", 5) == 0)
 	{
 	    p += 5;
 	    diff_flags_new |= DIFF_ICASE;
 	}
+	else if (STRNCMP(p, "iwhiteall", 9) == 0)
+	{
+	    p += 9;
+	    diff_flags_new |= DIFF_IWHITEALL;
+	}
+	else if (STRNCMP(p, "iwhiteeol", 9) == 0)
+	{
+	    p += 9;
+	    diff_flags_new |= DIFF_IWHITEEOL;
+	}
 	else if (STRNCMP(p, "iwhite", 6) == 0)
 	{
 	    p += 6;
@@ -2315,9 +2351,12 @@
 	    si_org = si_new = 0;
 	    while (line_org[si_org] != NUL)
 	    {
-		if ((diff_flags & DIFF_IWHITE)
-			&& VIM_ISWHITE(line_org[si_org])
-			&& VIM_ISWHITE(line_new[si_new]))
+		if (((diff_flags & DIFF_IWHITE)
+			    && VIM_ISWHITE(line_org[si_org])
+					      && VIM_ISWHITE(line_new[si_new]))
+			|| ((diff_flags & DIFF_IWHITEALL)
+			    && (VIM_ISWHITE(line_org[si_org])
+					    || VIM_ISWHITE(line_new[si_new]))))
 		{
 		    si_org = (int)(skipwhite(line_org + si_org) - line_org);
 		    si_new = (int)(skipwhite(line_new + si_new) - line_new);
@@ -2351,9 +2390,12 @@
 		while (ei_org >= *startp && ei_new >= si_new
 						&& ei_org >= 0 && ei_new >= 0)
 		{
-		    if ((diff_flags & DIFF_IWHITE)
-			    && VIM_ISWHITE(line_org[ei_org])
-			    && VIM_ISWHITE(line_new[ei_new]))
+		    if (((diff_flags & DIFF_IWHITE)
+				&& VIM_ISWHITE(line_org[ei_org])
+					      && VIM_ISWHITE(line_new[ei_new]))
+			    || ((diff_flags & DIFF_IWHITEALL)
+				&& (VIM_ISWHITE(line_org[ei_org])
+					    || VIM_ISWHITE(line_new[ei_new]))))
 		    {
 			while (ei_org >= *startp
 					     && VIM_ISWHITE(line_org[ei_org]))
