diff --git a/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/buildresults.xsl b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/buildresults.xsl
new file mode 100644
index 0000000000000000000000000000000000000000..13176eb41204e076252dc6ac298ee9d3012f12be
--- /dev/null
+++ b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/buildresults.xsl
@@ -0,0 +1,79 @@
+<?xml version="1.0"?>
+<!--********************************************************************************
+ * CruiseControl, a Continuous Integration Toolkit
+ * Copyright (c) 2001, ThoughtWorks, Inc.
+ * 651 W Washington Ave. Suite 500
+ * Chicago, IL 60601 USA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *     + Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *
+ *     + Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *
+ *     + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
+ *       names of its contributors may be used to endorse or promote
+ *       products derived from this software without specific prior
+ *       written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ ********************************************************************************-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+  <xsl:import href="maven.xsl"/>
+  <xsl:import href="nant.xsl"/>
+  <xsl:import href="checkstyle.xsl"/>
+  <xsl:import href="classycle.xsl"/>
+  <xsl:import href="pmd.xsl"/>
+  <xsl:import href="macker.xsl"/>
+  <xsl:import href="errors.xsl"/>
+  <xsl:import href="compile.xsl"/>
+  <xsl:import href="javadoc.xsl"/>
+  <xsl:import href="unittests.xsl"/>
+  <xsl:import href="fittests.xsl"/>
+  <xsl:import href="modifications.xsl"/>
+  <xsl:import href="cvstagdiff.xsl"/>
+  <xsl:import href="distributables.xsl"/>
+
+  <xsl:output method="html"/>
+
+  <xsl:variable name="cruisecontrol.list" select="."/>
+
+  <xsl:template match="/">
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="maven"/></p>
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="nant"/></p>
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="checkstyle"/></p>
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="classycle"/></p>
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="pmd"/></p>
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="macker"/></p>
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="errors"/></p>
+    <!--
+      for traditional cc display of only compile errors and warnings
+      comment out mode="errors" and uncomment mode="compile" and mode="javadoc"
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="compile"/></p>
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="javadoc"/></p>
+    -->
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="unittests"/></p>
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="fittests"/></p>
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="modifications"/></p>
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="cvstagdiff"/></p>
+    <p><xsl:apply-templates select="$cruisecontrol.list" mode="distributables"/></p>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/classycle.xsl b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/classycle.xsl
new file mode 100644
index 0000000000000000000000000000000000000000..ce4ef45188f2a10bba3289445cf5568cac42ec47
--- /dev/null
+++ b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/classycle.xsl
@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="html"/>
+
+  <xsl:template match="/" mode="classycle">
+    <xsl:apply-templates select="cruisecontrol/build/target[@name='check-dependencies']" mode="classycle"/>
+  </xsl:template>
+
+  <xsl:template match="build/target" mode="classycle">
+    <table align="center" cellpadding="2" cellspacing="0" border="0" width="98%">
+      <tr><td class="compile-sectionheader">Classycle</td></tr>
+      <tr><td align="left"><pre class="compile-error-data"><xsl:apply-templates select="task"/></pre></td></tr>
+    </table>
+  </xsl:template>
+
+  <xsl:template match="message" mode="classycle">
+    <xsl:value-of select="text()"/>
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/testdetails.xsl b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/testdetails.xsl
new file mode 100644
index 0000000000000000000000000000000000000000..584f0b167ddc8cbb6286bf50f567900e92f6d410
--- /dev/null
+++ b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/testdetails.xsl
@@ -0,0 +1,267 @@
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
+<!--********************************************************************************
+ * CruiseControl, a Continuous Integration Toolkit
+ * Copyright (c) 2001, ThoughtWorks, Inc.
+ * 200 E. Randolph, 25th Floor
+ * Chicago, IL 60601 USA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *     + Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *
+ *     + Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *
+ *     + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
+ *       names of its contributors may be used to endorse or promote
+ *       products derived from this software without specific prior
+ *       written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ ********************************************************************************-->
+  <xsl:output method="html" encoding="UTF-8" indent="yes"/>
+  <xsl:decimal-format decimal-separator="." grouping-separator="," />
+
+  <!-- 
+    Root template
+  -->
+  <xsl:template match="/">
+        <script type="text/javascript" language="JavaScript">
+          <!--
+            Function show/hide given div
+          -->
+          function toggleDivVisibility(_div) {
+            if (_div.style.display=="none") {
+              _div.style.display="block";
+            } else {
+              _div.style.display="none";
+            }
+          }
+        </script>
+           
+        <!-- Main table -->
+        <table border="0" cellspacing="0" width="100%">
+          <colgroup>
+            <col width="10%"/>
+            <col width="45%"/>
+            <col width="25%"/>
+            <col width="10%"/>
+            <col width="10%"/>
+          </colgroup>
+          <tr valign="top" class="unittests-sectionheader" align="left">
+            <th colspan="3">Name</th>
+            <th>Status</th>
+            <th nowrap="nowrap">Time(s)</th>
+          </tr>
+
+          <!-- display test suites -->
+          <xsl:apply-templates select="//testsuite">
+            <xsl:sort select="count(testcase/error)" data-type="number" order="descending"/>
+            <xsl:sort select="count(testcase/failure)" data-type="number" order="descending"/>
+            <xsl:sort select="@package"/>
+            <xsl:sort select="@name"/>
+          </xsl:apply-templates>
+
+        </table>
+    
+  </xsl:template>
+  
+  <!--
+    Test Suite Template
+    Construct TestSuite section
+  -->
+  <xsl:template match="testsuite">
+    <tr>
+      <xsl:attribute name="class">
+        <xsl:choose>
+          <xsl:when test="testcase/error">unittests-error-title</xsl:when>
+          <xsl:when test="testcase/failure">unittests-failure-title</xsl:when>
+          <xsl:otherwise>unittests-title</xsl:otherwise>
+        </xsl:choose>
+      </xsl:attribute>
+      <td colspan="5"><xsl:value-of select="concat(@package,'.',@name)"/></td>
+    </tr>
+    <!-- Display tests -->
+    <xsl:apply-templates select="testcase"/>
+    <!-- Display details links -->
+    <xsl:apply-templates select="current()" mode="details"/>
+  </xsl:template>
+  
+  <!--
+    Testcase template
+    Construct testcase section
+  -->
+  <xsl:template match="testcase">
+    <tr>
+      <xsl:attribute name="class">
+        <xsl:choose>
+          <xsl:when test="error">unittests-error</xsl:when>
+          <xsl:when test="failure">unittests-failure</xsl:when>
+          <xsl:otherwise>unittests-data</xsl:otherwise>
+        </xsl:choose>
+      </xsl:attribute>
+      <xsl:if test="position() mod 2 = 0">
+        <xsl:attribute name="bgcolor">#EEEEEE</xsl:attribute>
+      </xsl:if>
+      <td>&#xA0;</td>
+      <td colspan="2">
+        <xsl:value-of select="@classname"/>.<xsl:value-of select="@name"/>
+      </td>
+      <td>
+        <xsl:choose>
+          <xsl:when test="error">
+            <a href="javascript:void(0)"
+               onClick="toggleDivVisibility(document.getElementById('{concat('error.',../@package,'.',../@name,'.',@name)}'))">Error &#187;</a>
+          </xsl:when>
+          <xsl:when test="failure">
+            <a href="javascript:void(0)"
+               onClick="toggleDivVisibility(document.getElementById('{concat('failure.',../@package,'.',../@name,'.',@name)}'))">Failure &#187;</a>
+          </xsl:when>
+          <xsl:otherwise>Success</xsl:otherwise>
+        </xsl:choose>
+      </td>
+      <xsl:choose>
+        <xsl:when test="not(failure|error)">
+          <td>
+            <xsl:value-of select="format-number(@time,'0.000')"/>
+          </td>
+        </xsl:when>
+        <xsl:otherwise>
+          <td/>
+        </xsl:otherwise>
+      </xsl:choose>
+    </tr>
+    <xsl:if test="error">
+      <tr>
+        <td colspan="5">
+          <div id="{concat('error.',../@package,'.',../@name,'.',@name)}" class="testresults-output-div" style="display: none;">
+            <span style="font-weight:bold">Error:</span><br/>
+            <xsl:apply-templates select="error/text()" mode="newline-to-br"/>
+          </div>
+        </td>
+      </tr>
+    </xsl:if>
+    <xsl:if test="failure">
+      <tr>
+        <td colspan="5">
+          <div id="{concat('failure.',../@package,'.',../@name,'.',@name)}" class="testresults-output-div" style="display: none;">
+            <span style="font-weight:bold">Failure:</span><br/>
+            <xsl:apply-templates select="failure/text()" mode="newline-to-br"/>
+          </div>
+        </td>
+      </tr>
+    </xsl:if>
+  </xsl:template>
+  
+  <!--
+    Display Properties and Output links
+    and construct hidden div's with data
+  -->
+  <xsl:template match="testsuite" mode="details">
+    <tr class="unittests-data">
+      <td colspan="2">
+        <xsl:if test="count(properties/property)&gt;0">
+          <a href="javascript:void(0)" onClick="toggleDivVisibility(document.getElementById('{concat('properties.',@package,'.',@name)}'))">Properties &#187;</a>
+        </xsl:if>&#xA0;
+      </td>
+      <td>
+        <xsl:if test="system-out/text()">
+          <a href="javascript:void(0)" onClick="toggleDivVisibility(document.getElementById('{concat('system_out.',@package,'.',@name)}'))">System.out &#187;</a>
+        </xsl:if>&#xA0;
+      </td>
+      <td>
+        <xsl:if test="system-err/text()">
+          <a href="javascript:void(0)" onClick="toggleDivVisibility(document.getElementById('{concat('system_err.',@package,'.',@name)}'))">System.err &#187;</a>
+        </xsl:if>&#xA0;
+      </td>
+      <td>&#xA0;</td>
+    </tr>
+    <tr>
+      <td colspan="5">
+        <!-- Construct details div's -->
+        <!-- System Error -->
+        <xsl:apply-templates select="system-err" mode="system-err-div">
+          <xsl:with-param name="div-id" select="concat('system_err.',@package,'.',@name)"/>
+        </xsl:apply-templates>
+        <!-- System Output -->
+        <xsl:apply-templates select="system-out" mode="system-out-div">
+          <xsl:with-param name="div-id" select="concat('system_out.',@package,'.',@name)"/>
+        </xsl:apply-templates>
+        <!-- Properties -->
+        <xsl:apply-templates select="properties" mode="properties-div">          
+          <xsl:with-param name="div-id" select="concat('properties.',@package,'.',@name)"/>
+        </xsl:apply-templates>
+        &#xA0;
+      </td>
+    </tr>
+  </xsl:template>
+  
+  <!--
+    Create div with detailed system output
+  -->
+  <xsl:template match="system-out" mode="system-out-div" >
+    <xsl:param name="div-id"/>
+    <div id="{$div-id}" class="testresults-output-div" style="display: none;">
+      <span style="font-weight:bold">System out:</span><br/>
+      <xsl:apply-templates select="current()" mode="newline-to-br"/>
+    </div>  
+  </xsl:template>
+  
+  <!--
+    Create div with detailed errors output
+  -->
+  <xsl:template match="system-err" mode="system-err-div" >
+    <xsl:param name="div-id"/>
+    <div id="{$div-id}" class="testresults-output-div" style="display: none;">
+      <span style="font-weight:bold">System err:</span><br/>
+      <xsl:apply-templates select="current()" mode="newline-to-br"/>
+    </div>  
+  </xsl:template>
+  
+  <!--
+    Create div with properties
+  -->
+  <xsl:template match="properties" mode="properties-div" >
+    <xsl:param name="div-id"/>
+    <div id="{$div-id}" class="testresults-output-div" style="display: none;">
+      <span style="font-weight:bold">Properties:</span><br/>
+      <table>
+        <tr>
+          <th>Property</th>
+          <th>Value</th>
+        </tr>
+        <xsl:for-each select="property">
+          <xsl:sort select="@name"/>
+          <tr>
+            <td><xsl:value-of select="@name"/>&#xA0;</td>
+            <td><xsl:value-of select="@value"/>&#xA0;</td>
+          </tr>          
+        </xsl:for-each>
+      </table>
+    </div>  
+  </xsl:template>
+  
+  <!--
+    Convert line brakes in given text into <br/>
+  -->
+  <xsl:template match="text()" mode="newline-to-br">    
+    <xsl:value-of select="replace(current(), '(\n)|(\r)|(\r\n)', '&lt;br/&gt;')" disable-output-escaping="yes"/>          
+  </xsl:template>   
+
+</xsl:stylesheet>
diff --git a/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/unittests.xsl b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/unittests.xsl
new file mode 100644
index 0000000000000000000000000000000000000000..3d29a496f1689bd25ce207fd964870bf769f0588
--- /dev/null
+++ b/config/cruisecontrol/version-2.8.1/webapps/cruisecontrol/xsl/unittests.xsl
@@ -0,0 +1,283 @@
+<?xml version="1.0"?>
+<!--********************************************************************************
+ * CruiseControl, a Continuous Integration Toolkit
+ * Copyright (c) 2001, ThoughtWorks, Inc.
+ * 200 E. Randolph, 25th Floor
+ * Chicago, IL 60601 USA
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *     + Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *
+ *     + Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *
+ *     + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
+ *       names of its contributors may be used to endorse or promote
+ *       products derived from this software without specific prior
+ *       written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ ********************************************************************************-->
+<xsl:stylesheet
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+    xmlns:lxslt="http://xml.apache.org/xslt">
+
+    <xsl:output method="html"/>
+
+    <xsl:variable name="testsuite.list" select="//testsuite"/>
+    <xsl:variable name="testsuite.error.count" select="count($testsuite.list/error)"/>
+    <xsl:variable name="testcase.list" select="$testsuite.list/testcase"/>
+    <xsl:variable name="testcase.error.list" select="$testcase.list/error"/>
+    <xsl:variable name="testcase.failure.list" select="$testcase.list/failure"/>
+    <xsl:variable name="totalErrorsAndFailures" select="count($testcase.error.list) + count($testcase.failure.list) + $testsuite.error.count"/>
+
+    <xsl:template match="/" mode="unittests">
+        <table align="center" cellpadding="2" cellspacing="0" border="0" width="98%">
+
+            <!-- Unit Tests -->
+            <tr>
+                <td class="unittests-sectionheader" colspan="4">
+                   &#160;Unit Tests: (<xsl:value-of select="count($testcase.list)"/>)
+                </td>
+            </tr>
+
+            <xsl:choose>
+                <xsl:when test="count($testsuite.list) = 0">
+                    <tr>
+                        <td colspan="2" class="unittests-data">
+                            No Tests Run
+                        </td>
+                    </tr>
+                    <tr>
+                        <td colspan="2" class="unittests-error">
+                            This project doesn't have any tests
+                        </td>
+                    </tr>
+                </xsl:when>
+
+                <xsl:when test="$totalErrorsAndFailures = 0">
+                    <tr>
+                        <td colspan="2" class="unittests-data">
+                            All Tests Passed
+                        </td>
+                    </tr>
+                </xsl:when>
+            </xsl:choose>
+            <tr>
+              <td>
+                 <table align="center" cellpadding="2" cellspacing="0" border="0" width="98%">
+                    <xsl:apply-templates select="$testcase.error.list" mode="unittests"/>
+                    <xsl:apply-templates select="$testcase.failure.list" mode="unittests"/>
+                 </table>
+              </td>
+            </tr>
+            <tr/>
+            <tr><td colspan="2">&#160;</td></tr>
+
+            <xsl:if test="$totalErrorsAndFailures > 0">
+
+              <tr>
+                <td class="unittests-sectionheader" colspan="4">
+                    &#160;Unit Test Error Details:&#160;(<xsl:value-of select="$totalErrorsAndFailures"/>)
+                </td>
+              </tr>
+
+              <!-- (PENDING) Why doesn't this work if set up as variables up top? -->
+              <xsl:call-template name="testdetail">
+                <xsl:with-param name="detailnodes" select="//testsuite/testcase[.//error]"/>
+              </xsl:call-template>
+
+              <xsl:call-template name="testdetail">
+                <xsl:with-param name="detailnodes" select="//testsuite/testcase[.//failure]"/>
+              </xsl:call-template>
+            </xsl:if>
+        </table>
+    </xsl:template>
+
+    <!-- UnitTest Errors -->
+    <xsl:template match="error" mode="unittests">
+        <tr>
+            <xsl:if test="position() mod 2 = 0">
+                <xsl:attribute name="class">unittests-oddrow</xsl:attribute>
+            </xsl:if>
+
+            <td class="unittests-data" width="50">
+                error
+            </td>
+            <td class="unittests-data" width="300">
+                <xsl:value-of select="../@name"/>
+            </td>
+            <td class="unittests-data" width="400">
+                <xsl:value-of select="../@classname"/>
+            </td>
+        </tr>
+    </xsl:template>
+
+    <!-- UnitTest Failures -->
+    <xsl:template match="failure" mode="unittests">
+        <tr>
+            <xsl:if test="($testsuite.error.count + position()) mod 2 = 0">
+                <xsl:attribute name="class">unittests-oddrow</xsl:attribute>
+            </xsl:if>
+
+            <td class="unittests-data" width="50">
+                failure
+            </td>
+            <td class="unittests-data" width="300">
+                <xsl:value-of select="../@name"/>
+            </td>
+            <td class="unittests-data" width="400">
+                <xsl:value-of select="../@classname"/>
+            </td>
+        </tr>
+    </xsl:template>
+
+    <!-- UnitTest Errors And Failures Detail Template -->
+    <xsl:template name="testdetail">
+      <xsl:param name="detailnodes"/>
+
+      <xsl:for-each select="$detailnodes">
+    <tr>
+        <td colspan="2">
+        <table width="100%" border="0" cellspacing="0">
+
+        <tr class="unittests-title">
+        <td width="50">Test:&#160;</td>
+            <td>
+                <xsl:value-of select="@name"/>
+            </td>
+        </tr>
+        <tr class="unittests-data">
+        <td>Class:&#160;</td>
+            <td>
+                <xsl:value-of select="@classname"/>
+            </td>
+        </tr>
+
+        <xsl:if test="error">
+        <xsl:call-template name="test-data">
+            <xsl:with-param name="word" select="error"/>
+            <xsl:with-param name="type" select="'error'"/>
+        </xsl:call-template>
+        </xsl:if>
+
+        <xsl:if test="failure">
+        <xsl:call-template name="test-data">
+            <xsl:with-param name="word" select="failure"/>
+            <xsl:with-param name="type" select="'failure'"/>
+        </xsl:call-template>
+        </xsl:if>
+
+              </table>
+        </td>
+    </tr>
+
+      </xsl:for-each>
+    </xsl:template>
+
+    <xsl:template name="test-data">
+        <xsl:param name="word"/>
+        <xsl:param name="type"/>
+        <tr>
+        <td/>
+            <td>
+        <xsl:call-template name="stack-trace">
+            <xsl:with-param name="word" select="$word"/>
+            <xsl:with-param name="type" select="$type"/>
+        </xsl:call-template>
+            </td>
+        </tr>
+    </xsl:template>
+
+    <xsl:template name="stack-trace">
+        <xsl:param name="word"/>
+        <xsl:param name="type"/>
+    <table width="100%" border="1" cellspacing="0" cellpadding="2">
+        <tr>
+            <td>
+                <table width="100%" border="0" cellspacing="0" cellpadding="0">
+                    <xsl:call-template name="br-replace">
+                    <xsl:with-param name="word" select="$word"/>
+                    <xsl:with-param name="type" select="$type"/>
+                    <xsl:with-param name="count" select="0"/>
+                    </xsl:call-template>
+                </table>
+            </td>
+        </tr>
+        </table>
+    </xsl:template>
+
+    <xsl:template name="br-replace">
+        <xsl:param name="word"/>
+        <xsl:param name="type"/>
+        <xsl:param name="count"/>
+<!-- </xsl:text> on next line on purpose to get newline -->
+<xsl:variable name="stackstart"><xsl:text>	at</xsl:text></xsl:variable>
+<xsl:variable name="cr"><xsl:text>
+</xsl:text></xsl:variable>
+        <xsl:choose>
+            <xsl:when test="contains($word,$cr)">
+        <tr>
+        <xsl:attribute name="class">unittests-<xsl:value-of select="$type"/></xsl:attribute>
+        <xsl:if test="$count mod 2 != 0">
+            <xsl:attribute name="bgcolor">#EEEEEE</xsl:attribute>
+        </xsl:if>
+        <xsl:if test="$count != 0 and starts-with($word,$stackstart)">
+            <td width="30"/>
+            <td>
+                <xsl:value-of select="substring-before($word,$cr)"/>&#160;
+            </td>
+        </xsl:if>
+        <xsl:if test="$count != 0 and not(starts-with($word,$stackstart))">
+            <td colspan="2">
+                <xsl:value-of select="substring-before($word,$cr)"/>&#160;
+            </td>
+        </xsl:if>
+        <xsl:if test="$count = 0">
+            <td colspan="2">
+                <xsl:value-of select="substring-before($word,$cr)"/>&#160;
+            </td>
+        </xsl:if>
+        </tr>
+                <xsl:call-template name="br-replace">
+                    <xsl:with-param name="word" select="substring-after($word,$cr)"/>
+            <xsl:with-param name="type" select="$type"/>
+                    <xsl:with-param name="count" select="$count + 1"/>
+                </xsl:call-template>
+            </xsl:when>
+            <xsl:otherwise>
+        <tr>
+        <xsl:attribute name="class">unittests-<xsl:value-of select="$type"/></xsl:attribute>
+        <xsl:if test="$count mod 2 != 0">
+            <xsl:attribute name="bgcolor">#EEEEEE</xsl:attribute>
+        </xsl:if>
+        <td width="30"/>
+        <td>
+                <xsl:value-of select="$word"/>
+        </td>
+        </tr>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+    <xsl:template match="/">
+        <xsl:apply-templates select="." mode="unittests"/>
+    </xsl:template>
+</xsl:stylesheet>