diff --git a/src/main/distrib/data/defaults.properties b/src/main/distrib/data/defaults.properties
index 5258a3c..dae2e61 100644
--- a/src/main/distrib/data/defaults.properties
+++ b/src/main/distrib/data/defaults.properties
@@ -1354,6 +1354,32 @@
 # SINCE 1.3.0
 web.forceDefaultLocale = 
 
+# The following two settings serve to avoid browser overload when trying to
+# render very large diffs. Both limits apply to commitdiffs, not to single-file
+# diffs.
+
+# Maximum number of diff lines to display for a single file diff in a commitdiff.
+# Defaults to 4000; can be adjusted in the range [500 .. 4000]. Smaller values
+# set the limit to 500, larger values to 4000. The count includes context lines
+# in the diff.
+# 
+# If a file diff in a commitdiff produces more lines, the diff for that file is
+# not shown in the commitdiff.
+#
+# SINCE 1.7.0
+web.maxDiffLinesPerFile = 4000
+
+# Total maximum number of diff lines to show in a commitdiff. Defaults to 20000;
+# can be adjusted in the range [1000 .. 20000]. Smaller values set the limit to
+# 1000, larger values to 20000. The count includes context lines in diffs.
+#
+# If a commitdiff produces more lines, it is truncated after the first file
+# that exceeds the limit. Diffs for subsequent files in the commit are not shown
+# at all in the commitdiff. Omitted files are listed, though.
+#
+# SINCE 1.7.0
+web.maxDiffLines = 20000
+
 # Enable/disable global regex substitutions (i.e. shared across repositories)
 #
 # SINCE 0.5.0
diff --git a/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java b/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java
index 0b16c37..a1751d2 100644
--- a/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java
+++ b/src/main/java/com/gitblit/utils/GitBlitDiffFormatter.java
@@ -22,6 +22,8 @@
 import java.text.MessageFormat;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Localizer;
@@ -37,13 +39,16 @@
 
 /**
  * Generates an html snippet of a diff in Gitblit's style, tracks changed paths, and calculates diff stats.
- * 
+ *
  * @author James Moger
  * @author Tom <tw201207@gmail.com>
- * 
+ *
  */
 public class GitBlitDiffFormatter extends DiffFormatter {
 
+	/** Regex pattern identifying trailing whitespace. */
+	private static final Pattern trailingWhitespace = Pattern.compile("(\\s+?)\r?\n?$");
+
 	/**
 	 * gitblit.properties key for the per-file limit on the number of diff lines.
 	 */
@@ -129,7 +134,7 @@
 
 	/**
 	 * Determines a limit to use for HTML diff output.
-	 * 
+	 *
 	 * @param key
 	 *            to use to read the value from the GitBlit settings, if available.
 	 * @param minimum
@@ -156,7 +161,7 @@
 
 	/**
 	 * Returns a localized message string, if there is a localization; otherwise the given default value.
-	 * 
+	 *
 	 * @param key
 	 *            message key for the message
 	 * @param defaultValue
@@ -268,7 +273,7 @@
 
 	/**
 	 * Output a hunk header
-	 * 
+	 *
 	 * @param aStartLine
 	 *            within first source
 	 * @param aEndLine
@@ -369,16 +374,38 @@
 				os.write("<td class='diff-cell context2'>".getBytes());
 				break;
 			}
-			String line = text.getString(cur);
-			line = StringUtils.escapeForHtml(line, false);
-			os.write(encode(line));
+			os.write(encode(codeLineToHtml(prefix, text.getString(cur))));
 			os.write("</td></tr>\n".getBytes());
 		}
 	}
 
 	/**
+	 * Convert the given code line to HTML.
+	 *
+	 * @param prefix
+	 *            the diff prefix (+/-) indicating whether the line was added or removed.
+	 * @param line
+	 *            the line to format as HTML
+	 * @return the HTML-formatted line, safe for inserting as is into HTML.
+	 */
+	private String codeLineToHtml(final char prefix, final String line) {
+		if ((prefix == '+' || prefix == '-')) {
+			// Highlight trailing whitespace on deleted/added lines.
+			Matcher matcher = trailingWhitespace.matcher(line);
+			if (matcher.find()) {
+				StringBuilder result = new StringBuilder(StringUtils.escapeForHtml(line.substring(0, matcher.start()), false));
+				result.append("<span class='trailingws-").append(prefix == '+' ? "add" : "sub").append("'>");
+				result.append(StringUtils.escapeForHtml(matcher.group(1), false));
+				result.append("</span>");
+				return result.toString();
+			}
+		}
+		return StringUtils.escapeForHtml(line, false);
+	}
+
+	/**
 	 * Workaround function for complex private methods in DiffFormatter. This sets the html for the diff headers.
-	 * 
+	 *
 	 * @return
 	 */
 	public String getHtml() {
@@ -420,7 +447,7 @@
 					sb.append("</tbody></table></div>\n");
 					inFile = false;
 				}
-
+				line = StringUtils.escapeForHtml(line, false);
 				sb.append(MessageFormat.format("<div class='header'><div class=\"diffHeader\" id=\"{0}\"><i class=\"icon-file\"></i> ", line)).append(line)
 						.append("</div></div>");
 				sb.append("<div class=\"diff\">");
@@ -435,6 +462,7 @@
 					} else {
 						sb.append("<th class='diff-state diff-state-sub'></th><td class=\"diff-cell remove2\">");
 					}
+					line = StringUtils.escapeForHtml(line.substring(1), false);
 				}
 				sb.append(line);
 				if (gitLinkDiff) {
@@ -456,9 +484,9 @@
 				String path = StringUtils.escapeForHtml(s.getKey(), false);
 				String comment = s.getValue();
 				if (comment != null) {
-					sb.append("<span id='" + path + "'>" + path + ' ' + StringUtils.escapeForHtml(comment, false) + "</span>");
+					sb.append("<span id=\"" + path + "\">" + path + ' ' + StringUtils.escapeForHtml(comment, false) + "</span>");
 				} else {
-					sb.append("<span id='" + path + "'>" + path + "</span>");
+					sb.append("<span id=\"" + path + "\">" + path + "</span>");
 				}
 				first = false;
 			}
diff --git a/src/main/resources/gitblit.css b/src/main/resources/gitblit.css
index 43b1be8..f398244 100644
--- a/src/main/resources/gitblit.css
+++ b/src/main/resources/gitblit.css
@@ -1380,6 +1380,14 @@
 	background-color: #fbfbfb;
 }
 
+.trailingws-add {
+    background-color: #99FF99;	
+}
+
+.trailingws-sub {
+    background-color: #FF9999;	
+}
+
 div.diff > table {
 	border-radius: 0;
 	border-right: 1px solid #bbb;
