diff --git a/Driver/HTMLDiagnostics.cpp b/Driver/HTMLDiagnostics.cpp
index cb333b9..22e2538 100644
--- a/Driver/HTMLDiagnostics.cpp
+++ b/Driver/HTMLDiagnostics.cpp
@@ -160,16 +160,17 @@
   // Get the full directory name of the analyzed file.
 
   const FileEntry* Entry = SMgr.getFileEntryForID(FileID);
-  std::string DirName(Entry->getDir()->getName());
   
   // This is a cludge; basically we want to append either the full
   // working directory if we have no directory information.  This is
   // a work in progress.
 
-  if (DirName == ".")
-    DirName = llvm::sys::Path::GetCurrentDirectory().toString();
-  else if (llvm::sys::Path(Entry->getName()).isAbsolute())
-    DirName = "";
+  std::string DirName = "";
+  
+  if (!llvm::sys::Path(Entry->getName()).isAbsolute()) {
+    llvm::sys::Path P = llvm::sys::Path::GetCurrentDirectory();
+    DirName = P.toString() + "/";
+  }
     
   // Add the name of the file as an <h1> tag.  
   
diff --git a/utils/scan-build b/utils/scan-build
index 0024c8e..e35bc2f 100755
--- a/utils/scan-build
+++ b/utils/scan-build
@@ -17,6 +17,7 @@
 use File::Temp qw/ :mktemp /;
 use FindBin qw($RealBin);
 use Digest::MD5;
+use File::Basename;
 
 my $Verbose = 0;       # Verbose output from this script.
 my $Prog = "scan-build";
@@ -140,6 +141,58 @@
 }
 
 ##----------------------------------------------------------------------------##
+#  UpdatePrefix - Compute the common prefix of files.
+##----------------------------------------------------------------------------##
+
+my $Prefix;
+
+sub UpdatePrefix {
+  
+  my $x = shift;
+  my $y = basename($x);
+  $x =~ s/\Q$y\E$//;
+  
+  # Ignore /usr, /Library, /System, /Developer
+
+  return if ( $x =~ /^\/usr/ or $x =~ /^\/Library/
+              or $x =~ /^\/System/ or $x =~ /^\/Developer/);
+
+  
+  if (!defined $Prefix) {
+    $Prefix = $x;
+    return;
+  }
+  
+  chop $Prefix while (!($x =~ /^$Prefix/));
+}
+
+sub GetPrefix {
+  return $Prefix;
+}
+
+##----------------------------------------------------------------------------##
+#  UpdateInFilePath - Update the path in the report file.
+##----------------------------------------------------------------------------##
+
+sub UpdateInFilePath {
+  my $fname = shift;
+  my $regex = shift;
+  my $newtext = shift;
+  
+  open (RIN, $fname) or die "cannot open $fname";
+  open (ROUT, ">$fname.tmp") or die "cannot open $fname.tmp";
+  
+  while (<RIN>) {
+    s/$regex/$newtext/;
+    print ROUT $_;
+  }
+  
+  close (ROUT);
+  close (RIN);
+  `mv $fname.tmp $fname`;
+}
+
+##----------------------------------------------------------------------------##
 # ScanFile - Scan a report file for various identifying attributes.
 ##----------------------------------------------------------------------------##
 
@@ -185,6 +238,7 @@
     }
     elsif (/<!-- BUGFILE (.*) -->$/) {
       $BugFile = $1;
+      UpdatePrefix($BugFile);
     }
     elsif (/<!-- BUGPATHLENGTH (.*) -->$/) {
       $BugPathLength = $1;
@@ -351,6 +405,16 @@
 </tr>
 ENDTEXT
 
+  my $prefix = GetPrefix();
+  my $regex;
+  my $InFileRegex;
+  my $InFilePrefix = "File:</td><td>";
+  
+  if (defined($prefix)) { 
+    $regex = qr/^\Q$prefix\E/is;    
+    $InFileRegex = qr/\Q$InFilePrefix$prefix\E/is;
+  }    
+
   for my $row ( sort { $a->[1] cmp $b->[1] } @Index ) {
     
     my $x = lc($row->[1]);
@@ -364,7 +428,20 @@
     print OUT lc($row->[1]);
     print OUT "</td>\n";
     
-    for my $j ( 2 .. $#{$row} ) {
+    # Update the file prefix.
+    
+    my $fname = $row->[2];
+    if (defined($regex)) {      
+      $fname =~ s/$regex//;
+      UpdateInFilePath("$Dir/$ReportFile", $InFileRegex, $InFilePrefix)
+    }
+    
+    print "Prefix is '$prefix'\n";
+    print OUT "<td>$fname</td>\n";
+
+    # Print the rest of the columns.
+    
+    for my $j ( 3 .. $#{$row} ) {
       print OUT "<td>$row->[$j]</td>\n"
     }
 
