Index: src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportMojoTest.java
===================================================================
--- src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportMojoTest.java	(revision 442960)
+++ src/test/java/org/apache/maven/plugins/surefire/report/SurefireReportMojoTest.java	(working copy)
@@ -43,7 +43,7 @@
 
         assertNotNull( mojo );
 
-        String outputDir = ( String ) getVariableValueFromObject( mojo, "outputDirectory" );
+        File outputDir = ( File ) getVariableValueFromObject( mojo, "outputDirectory" );
 
         boolean showSuccess = ( ( Boolean ) getVariableValueFromObject( mojo, "showSuccess" ) ).booleanValue();
 
@@ -55,7 +55,9 @@
 
         boolean linkXRef = ( ( Boolean ) getVariableValueFromObject( mojo, "linkXRef" ) ).booleanValue();
 
-        assertEquals( getBasedir() + "/target/site/unit/basic-surefire-report-test", outputDir );
+        assertEquals( getBasedir().replace('\\', '/') 
+            + "/target/site/unit/basic-surefire-report-test",
+            outputDir.getAbsolutePath().replace('\\', '/') );
 
         assertTrue( showSuccess );
 
Index: src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportMojo.java
===================================================================
--- src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportMojo.java	(revision 439989)
+++ src/main/java/org/apache/maven/plugins/surefire/report/SurefireReportMojo.java	(working copy)
@@ -16,21 +16,20 @@
  * limitations under the License.
  */
 
-import org.apache.maven.artifact.handler.ArtifactHandler;
+import java.io.File;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.ResourceBundle;
+
 import org.apache.maven.model.ReportPlugin;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.reporting.AbstractMavenReport;
 import org.apache.maven.reporting.MavenReportException;
 import org.codehaus.doxia.site.renderer.SiteRenderer;
-import org.codehaus.plexus.util.PathTool;
 import org.codehaus.plexus.util.StringUtils;
 
-import java.io.File;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-
 /**
  * Creates a nicely formatted Surefire Test Report in html format.
  *
@@ -47,7 +46,7 @@
      *
      * @parameter expression="${project.reporting.outputDirectory}"
      */
-    private String outputDirectory;
+    private File outputDirectory;
 
     /**
      * Doxia Site Renderer
@@ -118,12 +117,12 @@
 
         if ( linkXRef )
         {
-            String relativePath = PathTool.getRelativePath( outputDirectory, xrefLocation.getAbsolutePath() );
-            if ( StringUtils.isEmpty( relativePath ) )
-            {
-                relativePath = ".";
+            String relativePath = PathUtils.calculateRelativePath(
+                outputDirectory, xrefLocation);
+            if (relativePath != null && !relativePath.startsWith(".")) {
+                relativePath = "./" + relativePath;
             }
-            relativePath = relativePath + "/" + xrefLocation.getName();
+            
             if ( xrefLocation.exists() )
             {
                 // XRef was already generated by manual execution of a lifecycle binding
@@ -140,13 +139,17 @@
                     if ( "maven-jxr-plugin".equals( artifactId ) || "jxr-maven-plugin".equals( artifactId ) )
                     {
                         location = relativePath;
+                        break;
                     }
                 }
             }
 
-            if ( location == null )
-            {
-                getLog().warn( "Unable to locate Test Source XRef to link to - DISABLED" );
+            if (location == null) {
+                getLog().warn(
+                    "Unable to locate Test Source XRef to link to - DISABLED.");
+            } else {
+                getLog().info("Found relative path '" + location 
+                    + "' to link the Test Source XRef.");
             }
         }
         return location;
@@ -179,7 +182,7 @@
 
     protected String getOutputDirectory()
     {
-        return outputDirectory;
+        return outputDirectory.getAbsolutePath();
     }
 
     private ResourceBundle getBundle( Locale locale )

