diff --git a/bundles/org.eclipse.build.tools/buildTools.jar b/bundles/org.eclipse.build.tools/buildTools.jar
index 8005864..aab6138 100644
--- a/bundles/org.eclipse.build.tools/buildTools.jar
+++ b/bundles/org.eclipse.build.tools/buildTools.jar
Binary files differ
diff --git a/bundles/org.eclipse.build.tools/buildTools.jar.jardesc b/bundles/org.eclipse.build.tools/buildTools.jar.jardesc
index 6e7e319..d53d7f5 100644
--- a/bundles/org.eclipse.build.tools/buildTools.jar.jardesc
+++ b/bundles/org.eclipse.build.tools/buildTools.jar.jardesc
@@ -10,14 +10,14 @@
         </sealing>
     </manifest>
     <selectedElements exportClassFiles="true" exportJavaFiles="true" exportOutputFolder="false">
-        <file path="/org.eclipse.build.tools/build.properties"/>
-        <folder path="/org.eclipse.build.tools/META-INF"/>
-        <file path="/org.eclipse.build.tools/.gitignore"/>
-        <file path="/org.eclipse.build.tools/plugin.xml"/>
-        <file path="/org.eclipse.build.tools/about.html"/>
-        <file path="/org.eclipse.build.tools/plugin.properties"/>
-        <javaElement handleIdentifier="=org.eclipse.build.tools/src"/>
         <file path="/org.eclipse.build.tools/.classpath"/>
         <file path="/org.eclipse.build.tools/.project"/>
+        <folder path="/org.eclipse.build.tools/META-INF"/>
+        <file path="/org.eclipse.build.tools/build.properties"/>
+        <file path="/org.eclipse.build.tools/about.html"/>
+        <file path="/org.eclipse.build.tools/plugin.xml"/>
+        <javaElement handleIdentifier="=org.eclipse.build.tools/src"/>
+        <file path="/org.eclipse.build.tools/.gitignore"/>
+        <file path="/org.eclipse.build.tools/plugin.properties"/>
     </selectedElements>
 </jardesc>
\ No newline at end of file
diff --git a/bundles/org.eclipse.build.tools/src/org/eclipse/releng/UnpackUpdateJars.java b/bundles/org.eclipse.build.tools/src/org/eclipse/releng/UnpackUpdateJars.java
index 81a1528..2a0b730 100644
--- a/bundles/org.eclipse.build.tools/src/org/eclipse/releng/UnpackUpdateJars.java
+++ b/bundles/org.eclipse.build.tools/src/org/eclipse/releng/UnpackUpdateJars.java
@@ -62,8 +62,8 @@
     public static void main(final String[] args) {
         // TODO Auto-generated method stub
         final UnpackUpdateJars up = new UnpackUpdateJars();
-        up.site = "C:\\updatejars\\eclipse";
-        up.output = "C:\\updatejars\\newsite";
+        up.site = "/home/davidw/builds/workspaces/davidwrepos2/compare/4.4";
+        up.output = "/home/davidw/builds/workspaces/davidwrepos2/compare/4.4";
         up.execute();
     }
 
diff --git a/bundles/org.eclipse.build.tools/src/org/eclipse/releng/VersionNumberStripper.java b/bundles/org.eclipse.build.tools/src/org/eclipse/releng/VersionNumberStripper.java
index a68b2df..bdd09e2 100644
--- a/bundles/org.eclipse.build.tools/src/org/eclipse/releng/VersionNumberStripper.java
+++ b/bundles/org.eclipse.build.tools/src/org/eclipse/releng/VersionNumberStripper.java
@@ -28,7 +28,7 @@
 
     // the directory containing the directories and files from which to remove
     // version information
-    private String directory;
+    private String directory="/home/davidw/temp/4.4/R-4.4-201406061215/features";
 
     public VersionNumberStripper() {
         super();
diff --git a/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/EclipseTestResultsGeneratorNoMail.java b/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/EclipseTestResultsGeneratorNoMail.java
index 6557b46..c390d22 100644
--- a/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/EclipseTestResultsGeneratorNoMail.java
+++ b/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/EclipseTestResultsGeneratorNoMail.java
@@ -16,41 +16,26 @@
 public class EclipseTestResultsGeneratorNoMail extends TestResultsGenerator {
 
     public static void main(final String[] args) {
-        final String publishingContent = "C:\\Documents and Settings\\IBMEmployee\\workspace\\org.eclipse.releng.eclipsebuilder\\eclipse\\publishingFiles";
+        final String publishingContent = "/home/davidw/gitdavidw2/eclipse.platform.releng.aggregator/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles";
 
         final EclipseTestResultsGeneratorNoMail test = new EclipseTestResultsGeneratorNoMail();
-        test.buildType = "N";
+        test.buildType = "I";
         test.setIsBuildTested(true);
-        test.setDropTokenList("%sdk%,%tests%,%example%,%rcpruntime%,%rcpsdk%,%deltapack%,%icubase%,%runtime%,%platformsdk%,%jdt%,%jdtsdk%,%jdtc%,%jarprocessor%,%pde%,%pdesdk%,%cvs%,%cvssdk%,%teamextras%,%swt%,%relengtools%");
+        test.setDropTokenList("%sdk%,%tests%,%example%,%rcpruntime%,%rcpsdk%,%deltapack%,%runtime%,%jdt%,%jdtsdk%,%jdtc%,%pde%,%pdesdk%,%cvs%,%cvssdk%,%swt%,%relengtools%");
         test.getDropTokensFromList(test.getDropTokenList());
-        test.setXmlDirectoryName("C:\\junk\\testresults\\xml");
-        test.setHtmlDirectoryName("C:\\junk\\testresults\\html");
-        test.setDropDirectoryName("C:\\junk");
-        test.setTestResultsTemplateFileName(publishingContent + "\\templateFiles\\testResults.php.template");
-        test.setDropTemplateFileName(publishingContent + "\\templateFiles\\index.php.template");
+        test.setXmlDirectoryName("/data/shared/eclipse/builds/4I/siteDir/eclipse/downloads/drops4/I20140923-0105/testresults/xml");
+        test.setHtmlDirectoryName("/data/shared/eclipse/builds/4I/siteDir/eclipse/downloads/drops4/I20140923-0105/testresults/html");
+        test.setDropDirectoryName("/data/shared/eclipse/builds/4I/siteDir/eclipse/downloads/drops4/I20140923-0105");
+        test.setTestResultsTemplateFileName(publishingContent + "/templateFiles/testResults.php.template");
+        test.setDropTemplateFileName(publishingContent + "/templateFiles/index.php.template");
         test.setTestResultsHtmlFileName("testResults.php");
         test.setDropHtmlFileName("index.php");
         // test.setDropHtmlFileName("index.html");
         test.setPlatformIdentifierToken("%platform%");
-
-        test.setPlatformSpecificTemplateList("Windows," + publishingContent
-                + "/templateFiles/platform.php.template,winPlatform.php;Linux," + publishingContent
-                + "/templateFiles/platform.php.template,linPlatform.php;Solaris," + publishingContent
-                + "/templateFiles/platform.php.template,solPlatform.php;AIX," + publishingContent
-                + "/templateFiles/platform.php.template,aixPlatform.php;Macintosh," + publishingContent
-                + "/templateFiles/platform.php.template,macPlatform.php;Source Build," + publishingContent
-                + "/templateFiles/sourceBuilds.php.template,sourceBuilds.php");
-        /*
-         * <property name="platformIdentifierToken" value="%platform%" />
-         * <property name="platformSpecificTemplateList" value=
-         * "Windows,${publishingContent}/templateFiles/platform.php.template,winPlatform.php;Linux,${publishingContent}/templateFiles/platform.php.template,linPlatform.php;Solaris,${publishingContent}/templateFiles/platform.php.template,solPlatform.php;AIX,${publishingContent}/templateFiles/platform.php.template,aixPlatform.php;Macintosh,${publishingContent}/templateFiles/platform.php.template,macPlatform.php;Source Build,${publishingContent}/templateFiles/sourceBuilds.php.template,sourceBuilds.php"
-         * />
-         */
-
-        test.setHrefTestResultsTargetPath("testresults");
-        test.setCompileLogsDirectoryName("C:\\junk\\compilelogs");
+        test.setHrefTestResultsTargetPath("/shared/eclipse/builds/4I/siteDir/eclipse/downloads/drops4/I20140923-0105/testresults");
+        test.setCompileLogsDirectoryName("/shared/eclipse/builds/4I/siteDir/eclipse/downloads/drops4/I20140923-0105/compilelogs");
         test.setHrefCompileLogsTargetPath("compilelogs");
-        test.setTestManifestFileName("C:\\junk\\testManifest.xml");
+        test.setTestManifestFileName("/home/davidw/gitdavidw2/eclipse.platform.releng.aggregator/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles/testManifest.xml");
         test.execute();
     }
 
@@ -80,28 +65,9 @@
 
     @Override
     protected String processDropRow(final PlatformStatus aPlatform) {
-        String imageName = "";
-
-        if (aPlatform.hasErrors()) {
-            imageName = "<a href=\"" + getTestResultsHtmlFileName() + "\"><img src = \"FAIL.gif\" width=19 height=23></a>";
-            testResultsStatus = "failed";
-
-        } else {
-            if (testsRan()) {
-                imageName = "<img src = \"OK.gif\" width=19 height=23>";
-            } else {
-                if (isBuildTested()) {
-                    imageName = "<font size=\"-1\" color=\"#FF0000\">pending</font>";
-                    testResultsStatus = "pending";
-                } else {
-                    imageName = "<img src = \"OK.gif\" width=19 height=23>";
-                }
-            }
-        }
 
         String result = "<tr>";
 
-        result = result + "<td><div align=left>" + imageName + "</div></td>\n";
         result = result + "<td>" + aPlatform.getName() + "</td>";
 
         // generate http, md5 and sha1 links by calling php functions in the
diff --git a/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java b/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java
index 63ef2ee..1b56d30 100644
--- a/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java
+++ b/bundles/org.eclipse.build.tools/src/org/eclipse/releng/generators/TestResultsGenerator.java
@@ -109,7 +109,7 @@
      * the stream.
      * 
      * @throws IOException
-     *             if a problem occured reading the stream.
+     *             if a problem occurred reading the stream.
      */
     public static byte[] getInputStreamAsByteArray(final InputStream stream, final int length) throws IOException {
         byte[] contents;
@@ -168,19 +168,7 @@
         test.setHtmlDirectoryName("/home/shared/eclipse/eclipse4I/siteDir/equinox/drops/I20120514-1900/testresults");
         test.setDropDirectoryName("/home/shared/eclipse/eclipse4I/siteDir/equinox/drops/I20120514-1900");
         test.setTestResultsTemplateFileName("/home/davidw/git/eclipse.platform.releng.eclipsebuilder/equinox/publishingFiles/templateFiles/testResults.php.template");
-        test.setPlatformSpecificTemplateList("");
-        // test.setPlatformSpecificTemplateList(
-        // "Windows,C:\\junk\\templateFiles\\platform.php.template,winPlatform.php;"
-        // +
-        // "Linux,C:\\junk\\templateFiles\\platform.php.template,linPlatform.php;"
-        // +
-        // "Solaris,C:\\junk\\templateFiles\\platform.php.template,solPlatform.php;"
-        // +
-        // "AIX,C:\\junk\\templateFiles\\platform.php.template,aixPlatform.php;"
-        // +
-        // "Macintosh,C:\\junk\\templateFiles\\platform.php.template,macPlatform.php;"
-        // +
-        // "Source Build,C:\\junk\\templateFiles\\sourceBuilds.php.template,sourceBuilds.php");
+
         test.setDropTemplateFileName("/home/davidw/git/eclipse.platform.releng.eclipsebuilder/equinox/publishingFiles/templateFiles/index.php.template");
         test.setTestResultsHtmlFileName("testResults.php");
         test.setDropHtmlFileName("index.php");
@@ -245,11 +233,6 @@
     // Location and name of the template index.php file.
     public String           testResultsTemplateFileName;
 
-    // Platform specific template and output list (colon separated) in the
-    // following format:
-    // <descriptor, ie. OS name>,path to template file, path to output file
-    public String           platformSpecificTemplateList = "";
-
     // Location and name of the template drop index.php file.
     public String           dropTemplateFileName;
 
@@ -367,26 +350,6 @@
         testResultsTemplateString = readFile(testResultsTemplateFileName);
         dropTemplateString = readFile(dropTemplateFileName);
 
-        // Specific to the platform build-page
-        if (platformSpecificTemplateList != "") {
-            String description, platformTemplateFile, platformDropFile;
-            // Retrieve the different platforms and their info
-            getDifferentPlatformsFromList(platformSpecificTemplateList);
-            // Parses the platform info and retrieves the platform name,
-            // template file, and drop file
-            for (int i = 0; i < differentPlatforms.size(); i++) {
-                getPlatformSpecsFromList(differentPlatforms.get(i).toString());
-                description = platformSpecs.get(0).toString();
-                platformTemplateFile = platformSpecs.get(1).toString();
-                platformDropFile = platformSpecs.get(2).toString();
-                platformDescription.add(description);
-                platformTemplateString.add(readFile(platformTemplateFile));
-                platformDropFileName.add(platformDropFile);
-
-            }
-
-        }
-
         log("Begin: Generating test results index page");
         log("Parsing XML files");
         parseXml();
@@ -394,13 +357,7 @@
         parseCompileLogs();
         log("End: Generating test results index page");
         writeTestResultsFile();
-        // For the platform build-page, write platform files, in addition to the
-        // index file
-        if (platformSpecificTemplateList != "") {
-            writeDropFiles();
-        } else {
-            writeDropIndexFile();
-        }
+        writeDropIndexFile();
     }
 
     private int extractNumber(final String aString, final String endToken) {
@@ -767,10 +724,6 @@
         return platformIdentifierToken;
     }
 
-    public String getPlatformSpecificTemplateList() {
-        return platformSpecificTemplateList;
-    }
-
     protected void getPlatformSpecsFromList(final String list) {
         final StringTokenizer tokenizer = new StringTokenizer(list, ",");
         platformSpecs = new Vector();
@@ -979,8 +932,9 @@
                         anErrorTracker.registerError(fullName.substring(getXmlDirectoryName().length() + 1));
                     }
 
-                    final String tmp = ((platformSpecificTemplateList.equals("")) ? formatRow(xmlFileNames[i].getPath(),
-                            errorCount, true) : formatRowReleng(xmlFileNames[i].getPath(), errorCount, true));
+//                    final String tmp = ((platformSpecificTemplateList.equals("")) ? formatRow(xmlFileNames[i].getPath(),
+//                            errorCount, true) : formatRowReleng(xmlFileNames[i].getPath(), errorCount, true));
+                    String tmp = formatRow(xmlFileNames[i].getPath(), errorCount, true);
                     replaceString = replaceString + tmp;
 
                 }
@@ -1228,10 +1182,6 @@
         this.platformIdentifierToken = platformIdentifierToken;
     }
 
-    public void setPlatformSpecificTemplateList(final String platformSpecificTemplateList) {
-        this.platformSpecificTemplateList = platformSpecificTemplateList;
-    }
-
     /**
      * Sets the testManifestFileName.
      * 
@@ -1287,8 +1237,9 @@
             }
 
             anErrorTracker.registerError(testLogName);
-            final String tmp = ((platformSpecificTemplateList.equals("")) ? formatRow(testLogName, -1, false) : formatRowReleng(
-                    testLogName, -1, false));
+//            final String tmp = ((platformSpecificTemplateList.equals("")) ? formatRow(testLogName, -1, false) : formatRowReleng(
+//                    testLogName, -1, false));
+            String tmp = formatRow(testLogName, -1, false);
             if (missingCount == 0) {
                 replaceString = replaceString
                         + "</table></br>"
