Index: src/util.c
===================================================================
--- src/util.c	(revision 1617)
+++ src/util.c	(working copy)
@@ -424,6 +424,12 @@
 	{
 	  switch (ignore_white_space)
 	    {
+	    case IGNORE_ALL_NUMBERS:
+	      /* For -Z, just skip past digits and white space.  */
+	      while ((isspace (c1) || isxdigit (c1)) && c1 != '\n') c1 = *t1++;
+	      while ((isspace (c2) || isxdigit (c2)) && c2 != '\n') c2 = *t2++;
+	      break;
+
 	    case IGNORE_ALL_SPACE:
 	      /* For -w, just skip past any white space.  */
 	      while (isspace (c1) && c1 != '\n') c1 = *t1++;
Index: src/diff.h
===================================================================
--- src/diff.h	(revision 1617)
+++ src/diff.h	(working copy)
@@ -118,7 +118,10 @@
   IGNORE_SPACE_CHANGE,
 
   /* Ignore all horizontal white space (-w).  */
-  IGNORE_ALL_SPACE
+  IGNORE_ALL_SPACE,
+
+  /* Ignore all numbers  */
+  IGNORE_ALL_NUMBERS
 };
 XTERN enum DIFF_white_space ignore_white_space;
 
Index: src/sdiff.c
===================================================================
--- src/sdiff.c	(revision 1617)
+++ src/sdiff.c	(working copy)
@@ -135,7 +135,7 @@
   {"ignore-matching-lines", 1, 0, 'I'},
   {"ignore-space-change", 0, 0, 'b'},
   {"ignore-tab-expansion", 0, 0, 'E'},
-  {"ignore-trailing-space", 0, 0, 'Z'},
+  {"ignore-numbers", 0, 0, 'Z'},
   {"left-column", 0, 0, 'l'},
   {"minimal", 0, 0, 'd'},
   {"output", 1, 0, 'o'},
Index: src/io.c
===================================================================
--- src/io.c	(revision 1617)
+++ src/io.c	(working copy)
@@ -243,6 +243,12 @@
       /* Hash this line until we find a newline.  */
       switch (ig_white_space)
 	{
+	case IGNORE_ALL_NUMBERS:
+	  while ((c = *p++) != '\n')
+	    if ((! isspace (c)) && (! isxdigit (c)))
+	      h = HASH (h, ig_case ? tolower (c) : c);
+	  break;
+
 	case IGNORE_ALL_SPACE:
 	  while ((c = *p++) != '\n')
 	    if (! isspace (c))
Index: src/diff.c
===================================================================
--- src/diff.c	(revision 1617)
+++ src/diff.c	(working copy)
@@ -176,7 +176,7 @@
   {"ignore-matching-lines", 1, 0, 'I'},
   {"ignore-space-change", 0, 0, 'b'},
   {"ignore-tab-expansion", 0, 0, 'E'},
-  {"ignore-trailing-space", 0, 0, 'Z'},
+  {"ignore-numbers", 0, 0, 'Z'},
   {"inhibit-hunk-merge", 0, 0, INHIBIT_HUNK_MERGE_OPTION},
   {"initial-tab", 0, 0, 'T'},
   {"label", 1, 0, 'L'},
@@ -321,8 +321,8 @@
 	  break;
 
 	case 'Z':
-	  if (ignore_white_space < IGNORE_SPACE_CHANGE)
-	    ignore_white_space |= IGNORE_TRAILING_SPACE;
+	  if (ignore_white_space < IGNORE_ALL_NUMBERS)
+		ignore_white_space = IGNORE_ALL_NUMBERS;
 	  break;
 
 	case 'B':
@@ -491,7 +491,8 @@
 	  return EXIT_SUCCESS;
 
 	case 'w':
-	  ignore_white_space = IGNORE_ALL_SPACE;
+	  if (ignore_white_space < IGNORE_ALL_SPACE)
+		ignore_white_space = IGNORE_ALL_SPACE;
 	  break;
 
 	case 'x':
