diff --git a/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.1 b/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.1
index 7902ca5977..a81d9e21ed 100644
--- a/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.1
+++ b/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.1
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd June 15, 2008
+.Dd July 9, 2008
 .Dt CHECKUPDATE 1
 .Os
 .Sh NAME
@@ -32,7 +32,7 @@
 .Nd "check a translation of the FreeBSD doc/ tree for source updates"
 .Sh SYNOPSIS
 .Nm
-.Op Fl aenpqtv
+.Op Fl acenpPqtv
 .Op Fl R Ar workspace
 .Sh DESCRIPTION
 The
@@ -54,6 +54,12 @@ The options are as follows:
 .Bl -tag -width ".Fl f Ar flist"
 .It Fl a
 Enable all file checks for each input file.
+.It Fl c
+Generate compact report primarily suitable for commit logs.  It will
+only contain revision difference information and names of the affected
+files.  This will automatically disable
+.Dq patch preview
+mode.
 .It Fl e
 Report everything.
 File revision information is displayed for all the files of our input
@@ -67,6 +73,11 @@ mode.
 Whenever a difference is found in the revisions of the original
 translated file and the current English revision, show a patch of the
 untranslated changes.
+.It Fl P
+Do not be so
+.Dq picky
+and show all the information even if files do not contain tags.  It is
+disabled by default and it is not recommended to use.
 .It Fl q
 Run in
 .Dq quiet
diff --git a/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.py b/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.py
index 95dc0ee362..762967e4be 100644
--- a/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.py
+++ b/el_GR.ISO8859-7/share/tools/checkupdate/checkupdate.py
@@ -57,6 +57,7 @@ import getopt
 import os
 import re
 import sys
+import subprocess
 
 # Alias some functions from other modules, to shorter, easier to use names.
 exit = sys.exit
@@ -68,11 +69,13 @@ progname = os.path.basename(sys.argv[0])
 
 allchecks = None                # All the file check functions we support.
 checks = None                   # No checks are done by default.
-patchmode = False               # Snow patches that need translation.
+patchmode = False               # Show patches that need translation.
 root = "."                      # The default workspace directory.
 verbose = None                  # Run in `quiet' mode by default.
 everything = False              # Report everything, i.e. all input files.
 tuplemode = False               # Use the standard output mode
+compactmode = False             # Generate compact stdout suitable for commit logs.
+pickymode = True                # Skip files without '%SRCID%' and '%SOURCE%' (default).
 
 # -------------------- useful functions --------------------------------
 
@@ -259,19 +262,65 @@ def fileinfo(fname):
 def reportfile(fname, frev, srcfile, srcexists, srcid, srcrev):
     """Report that an update is needed for a translated file."""
 
-    text = "%s%s" % (fname, frev and " rev. " + str(frev) or "")
+    if not compactmode:
+        text = "%s%s" % (fname, frev and " rev. " + str(frev) or "")
     revtext = "%-10s -> %-10s" % (srcid or "NO-%SRCID%", srcrev or "NONE")
-    if srcfile and not srcexists:
-        filetext = "%s (MISSING)" % srcfile
-    elif srcfile:
-        filetext = "%s" % srcfile
-    else:
-        filetext = "NO-%SOURCE%"
+    if not compactmode:
+        if srcfile and not srcexists:
+            filetext = "%s (MISSING)" % srcfile
+        elif srcfile:
+            filetext = "%s" % srcfile
+        else:
+            filetext = "NO-%SOURCE%"
 
-    print "%s" % text
-    print "    %s  %s" % (revtext, filetext)
+    if compactmode:
+        print "%s %s" % (revtext, fname)
+    else:
+        print "%s" % text
+        print "    %s  %s" % (revtext, filetext)
+        print ""
+
+def showdiff(fname, frev, srcfile, srcexists, srcid, srcrev):
+    """Show differences in the original file."""
+
+    if not (srcfile and srcexists and srcid and srcrev):
+        # Raise an exception?
+        print "    No patch could be retrieved."
+        print ""
+        return None
+
+    cvsdiff = ["cvs", "-R", "diff", "-u",
+               "-r%s" % srcid, "-r%s" % srcrev, "%s" % srcfile]
+
+    svndiff = ["svn", "diff",
+               "-r", "%s:%s" % (srcid, srcrev), "%s" % srcfile]
+
+    diffargs = None
+    if os.path.isdir(root + "/CVS"):
+        diffargs = cvsdiff
+    elif os.path.isdir(root + "/.svn"):
+        diffargs = svndiff
+
+    if not diffargs:
+        print "    Not a Subversion or CVS checkout."
+        print ""
+        return None
+
+    diffcmd = ""
+
+    for arg in diffargs:
+        diffcmd += (arg + " ")
+
+    print "    Patch review for:"
+    print "    %s" % diffcmd
     print ""
 
+    output = subprocess.Popen(diffargs, stdout=subprocess.PIPE, cwd=root).communicate()[0]
+
+    print output
+    print ""
+    return True
+
 def checkinfo(info):
     """Check the `info' tuple of file information.  The tuple should
     have at least six pieces of file information:
@@ -322,7 +371,16 @@ def checkinfo(info):
         reportfile(fname, frev, srcfile, srcexists, srcid, srcrev)
         return True
 
-    # The same is one of srcid, srcrev is unavailable.
+    # There is no frev, srcid, srcrev so do not report (has no sense).
+    if (pickymode and not everything) and (not srcid and not srcrev and not frev):
+        return None
+
+    # There is no srcid, srcrev, may be the user does not want to track
+    # this file.
+    if (pickymode and not everything) and (not srcid and not srcrev):
+        return None
+
+    # If one of srcid, srcrev is unavailable, we report it.
     if not srcid or not srcrev:
         reportfile(fname, frev, srcfile, srcexists, srcid, srcrev)
         return True
@@ -331,6 +389,8 @@ def checkinfo(info):
     # have different values for these two.
     if srcid != srcrev:
         reportfile(fname, frev, srcfile, srcexists, srcid, srcrev)
+        if patchmode:
+            return showdiff(fname, frev, srcfile, srcexists, srcid, srcrev)
         return True
 
     return None
@@ -358,15 +418,11 @@ def processfile(fname):
             print info
         else:
             checkinfo(info)
-            if patchmode:
-                # XXX: Add `patchmode' handling here, to show the diffs of the
-                # XXX: original  English text.
-                message("Patch preview mode not implemented for `%s'" % fname)
     return retval
 
 def usage():
     """Print a usage message, and exit."""
-    print "usage: %s [-aenpqtv] [-R workspace]" % progname
+    print "usage: %s [-acenpPqtv] [-R workspace]" % progname
     exit(1)
 
 # -------------------- main script body --------------------------------
@@ -374,7 +430,7 @@ def usage():
 if __name__ == "__main__":
     debug(3, "Parsing script options")
     try:
-        opts, args = getopt.getopt(sys.argv[1:], 'aenpqtR:v')
+        opts, args = getopt.getopt(sys.argv[1:], 'acenpPqtR:v')
     except getopt.GetoptError, err:
         usage()
 
@@ -384,6 +440,10 @@ if __name__ == "__main__":
         if o == '-a':
             debug(3, "Enabling all file checks")
             checks = allchecks  # All file checks enabled.
+        elif o == '-c':
+            debug(3, "Compact mode on")
+            compactmode = True  # Generate compact report.
+            patchmode = False   # No previews allowed.
         elif o == '-e':
             debug(3, "Reporting file revision info for everything")
             everything = True
@@ -391,8 +451,14 @@ if __name__ == "__main__":
             debug(3, "Disabling all file checks")
             checks = None       # No file checks enabled.
         elif o == '-p':
-            debug(3, "Enabling patch preview mode")
-            patchmode = True
+            if not compactmode:
+                debug(3, "Enabling patch preview mode")
+                patchmode = True# Show diffs for files to be merged.
+            else:
+                debug(3, "No patch preview due to compact mode")
+        elif o == '-P':
+            debug(3, "Disabling picky mode")
+            pickymode = False   # Picky mode: no check if no revision.
         elif o == '-q':
             debug(3, "Going into quiet mode.")
             verbose = False     # Quiet mode; no verbose messages.