diff --git a/downloads/buildIndex.php b/downloads/buildIndex.php
new file mode 100755
index 0000000..8534946
--- /dev/null
+++ b/downloads/buildIndex.php
@@ -0,0 +1,284 @@
+<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav	= new Nav(); $Menu = new Menu(); include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
+	# Begin: page-specific settings.  Change these. 
+	$pageTitle = "Equinox Nightly Build: N20101007-2000";
+	$pageKeywords = "equinox, osgi, framework, runtime, download";
+	$pageAuthor = "Equinox committers";
+
+ini_set('display_errors', 1); ini_set('error_reporting', E_ALL);
+
+	$specs;
+	$categories;
+	$buildTime = "";
+	$buildTitle = "";
+	$buildDir;
+	
+	function generateDropSize($zipfile) {
+		$filesize = getDropSize($zipfile);
+		return "<td>$filesize</td>";
+	}
+	
+	function getDropSize($zipfile) {
+		$filesize = "N/A";
+		$filesizebytes  = filesize($zipfile);
+		if($filesizebytes > 0) {
+			if($filesizebytes < 1048576)
+				$filesize = round($filesizebytes / 1024, 0) . "K";
+			else if ($filesizebytes >= 1048576 && $filesizebytes < 10485760)
+				$filesize = round($filesizebytes / 1048576, 1) . "M";
+			else
+				 	$filesize = round($filesizebytes / 1048576, 0) . "M";
+		}
+		return($filesize);
+	}
+	
+	function generateChecksumLinks($zipfile, $buildLabel) {
+		$result = <<<EOHTML
+<td><a href="http://download.eclipse.org/equinox/drops/$buildLabel/checksum/$zipfile.md5"><img src="/equinox/images/md5.png" alt="md5"/></a><a href="http://download.eclipse.org/equinox/drops/$buildLabel/checksum/$zipfile.sha1"><img src="/equinox/images/sha1.png" alt="sha1"/></a></td>
+
+EOHTML;
+		return $result;	
+	}
+	
+	function endsWith($source, $target)	{
+		$pos = strrpos($source, $target);
+		return $pos === FALSE ? FALSE : ($pos + strlen($target)) == strlen ($source); 
+	}
+
+	function startsWith($source, $target) {
+		$pos = strpos($source, $target);
+		$result = $pos !== false && $pos == 0;
+		return $result;
+	}
+	
+	function match($source, $template) {
+		$i = strpos($template, "|");
+		if ($i === FALSE || $i == (strlen($template) - 1))
+			return startsWith($source, $template);
+		$beginning = strstr($template, "|", true);
+		$end = substr($template, $i + 1);
+		return startsWith($source, $beginning) && endsWith($source, $end);
+	}
+	
+	function getSpec($file) {
+		global $specs;
+		foreach ($specs as $spec) 
+			if (match($file, $spec["name"]))
+				return $spec;
+		return null;
+	}
+
+	function loadSpecs($dir) {
+		global $categories;
+		global $specs;
+		global $buildDir;
+		global $buildLabel;
+		global $buildTime;
+		global $buildTitle;
+		
+		$buildDir =$dir;
+		$specs = array(); 
+		$categories = array(); 
+		$contents = substr(file_get_contents('buildspec.txt'),0,-1);
+		$lines = explode("\n", $contents);
+		$buildTitle = $lines[0];
+		$buildTime = $lines[1];
+		$buildLabel = $lines[2];
+		unset($lines[0], $lines[1], $lines[2]);
+		
+		foreach ($lines as $line) {
+			$line = trim($line);
+			$values = explode(",", $line);
+			$spec = array();
+			$name = trim($values[0]);
+			$spec["name"] = $name;
+			$spec["category"] = trim($values[1]);
+			$spec["status"] = trim($values[2]);
+			if (count ($values) > 3)
+				$spec["images"] = explode("&", $values[3]);
+			$specs[$name] = $spec;
+		}
+	}
+		
+	function analyzeBuild($dir) {	
+		global $categories;
+		loadSpecs($dir);
+		
+		while ($anEntry = $dir->read()) {
+			$spec = getSpec($anEntry);
+			if ($spec != null) {
+ 				$spec["file"] = $anEntry;
+				$categories[$spec["category"]][] = $spec;
+				continue;
+			}
+		}			
+	}
+
+	function generateTable($name) {
+		global $categories;
+		global $buildLabel;
+		
+		if (! array_key_exists($name, $categories))
+			return "";
+		$category = $categories[$name];
+		$result = <<<EOHTML
+		<table border="0" cellspacing="0" cellpadding="0" width="100%">
+			<tr><td width="5%"/><td width="78%"/><td width="9%"/><td width="8%"/></tr>
+
+EOHTML;
+
+		foreach ($category as $element) {
+			$status = $element["status"];
+			if ($status == "F")
+				$status = "/equinox/images/FAIL.gif";
+			else if ($status == "P")
+				$status = "/equinox/images/pending.gif";
+			else if ($status == "O")
+				$status = "/equinox/images/OK.gif";
+			
+			$images = "";
+			if (array_key_exists("images", $element)) {
+				$imageSpec = $element["images"];
+				$images = "<img src=\"";
+				foreach ($imageSpec as $entry)
+					$images .= trim($entry) . "\"/>&nbsp;";
+			}
+			$file = $element["file"];
+			$downloadSize = generateDropSize($file);
+			$checksumLinks = generateChecksumLinks($file, $buildLabel);
+
+			$result .= <<<EOHTML
+			<tr><td align="center"><img src="$status"/></td>
+				<td>$images<a href="download.php?dropFile=$file">$file</a></td>
+				$downloadSize
+				$checksumLinks
+			</tr>
+
+EOHTML;
+		}
+		$result .= "</table>";
+		return $result;		
+	}
+
+	$root = $App->getDownloadBasePath();
+//	$root = $_SERVER['DOCUMENT_ROOT'];
+	$build = array_pop(split("=", "build", -1));
+	$path = "/equinox/drops/" . $build;
+
+	analyzeBuild(dir($root . $path));
+	$generateTable = 'generateTable';
+
+	$html = <<<EOHTML
+
+<script type="text/javascript" src="http://eclipse.org/equinox/expand.js"></script>
+
+<div id="midcolumn">
+	<h3>$buildTitle</h3>
+	<p><b>$buildTime</b></p> 
+	<p>These downloads are provided under the <a href="http://www.eclipse.org/legal/epl/notice.html">
+	Eclipse Foundation Software User Agreement</a>. Click <a href="verifyMD5.html">here</a> for instructions
+	on verifying download integrity.</p>
+
+	<p><a href="apitools/index.html">API Version Verification Report</a> -- Verification of this build's versions
+	against those of Eclipse 3.6. See <a href="org.eclipse.releng/apiexclude/exclude_list_external.txt">here</a> for exclusions.</p> 
+
+	<p><a href="apitools/apitoolsdeprecations/apideprecation.html">API Deprecation Report</a> --
+	Report of API deprecated since 3.6.</p> 
+ 
+	<!--p><a href="apitools/report.html">API Tools Post-API Freeze Report</a> -- This report describes API changes 
+	since 3.6M6.  Exclusions are listed in org.eclipse.releng/apiexclude/exclude_list.txt.</p--> 
+
+	<div class="homeitem3col">
+		<h3>All of Equinox</h3>
+		<p> A complete set of all bundles and launchers produced by the Equinox project. This zip is also a p2 repo. </p>
+{$generateTable("Equinox")}
+	</div>
+
+	<div class="homeitem3col">
+		<h3>Framework Only</h3>
+		<p>The Equinox OSGi R4 <a href="http://eclipse.org/equinox/framework">framework</a> implementation in a standalone package.
+		See the <a href="http://eclipse.org/equinox/quickstart.html">Quick Start Guide</a> for details on how to use this JAR.</p>
+{$generateTable("Framework")}
+	</div>
+
+	<div class="homeitem3col">
+		<h3><a onclick="expandCollapse('addon.bundles');"><img id="addon.bundles.button" src="http://eclipse.org/equinox/images/arrow.png"/></a>&nbsp;Add-on Bundles</h3>
+		<p>Individual <a href="http://eclipse.org/equinox/bundles">bundles</a> that provide 
+		standalone OSGi specified services or add-on mechanisms (e.g., the Eclipse extension registry) of interest to OSGi programmers.</p>
+		<div id="addon.bundles" class="collapsable"> 
+{$generateTable("Addon")}
+		</div>
+	</div>
+
+	<div class="homeitem3col">
+		<h3><a onclick="expandCollapse('other.bundles');"><img id="other.bundles.button" src="http://eclipse.org/equinox/images/arrow.png"/></a>&nbsp;Other Required Bundles</h3>
+		<p>A convenient set of bundles that are required by some of the Equinox bundles.</p>
+		<div id="other.bundles" class="collapsable"> 
+{$generateTable("Other")}
+		</div>
+	</div>
+
+	<div class="homeitem3col">
+		<h3><a onclick="expandCollapse('incubator.bundles');"><img id="incubator.bundles.button" src="http://eclipse.org/equinox/images/arrow.png"/></a>&nbsp;Incubator</h3>
+		<p>Equinox Incubator downloads supplied as a convenience. While some are quite complete, all should be considered experimental.</p>
+		<div id="incubator.bundles" class="collapsable"> 
+{$generateTable("Incubator")}
+		</div>
+	</div>
+
+	<div class="homeitem3col">
+		<h3><a onclick="expandCollapse('provisioning.bundles');"><img  id="provisioning.bundles.button" src="http://eclipse.org/equinox/images/arrow.png"/></a>&nbsp;p2 Provisioning Tools</h3>
+		<p>The following downloads are produced by the Provisioning team. For more about provisoning, see 
+		the <a href="http://wiki.eclipse.org/Category:Provisioning">provisioning articles</a> on the eclipse.org wiki.</p>
+		<div id="provisioning.bundles" class="collapsable">
+{$generateTable("Provisioning")}
+		</div>
+	</div>
+
+	<div class="homeitem3col">
+		<h3><a onclick="expandCollapse('launcher.bundles');"><img  id="launcher.bundles.button" src="http://eclipse.org/equinox/images/arrow.png"/></a>&nbsp;Native Launchers</h3>
+		<p>Platform-specific native launchers (e.g., eclipse.exe) for the Equinox framework. See the list 
+		of <a href="http://www.eclipse.org/projects/project-plan.php?projectid=eclipse#target_environments">supported OS configurations</a>.</>
+		<div id="launcher.bundles" class="collapsable">
+{$generateTable("Launchers")}
+		</div>
+	</div>
+
+	<div class="homeitem3col"> 
+		<h3>Legend</h3> 
+		<table border="0" cellspacing="0" cellpadding="0" width="100%"> 
+			<tr><td width="5%"/></tr> 
+			<tr> 
+				<td align="center"><img src="/equinox/images/OK.gif"/></td> 
+				<td>Build completed OK</td> 
+			</tr> 
+			<tr> 
+				<td align="center"><img src="/equinox/images/FAIL.gif"/></td> 
+				<td>Build failed to complete</td> 
+			</tr> 
+			<tr> 
+				<td align="center"><img src="/equinox/images/pending.gif"/></td> 
+				<td>Build is still pending</td> 
+			</tr> 
+			<tr> 
+				<td align="center"><img src="/equinox/images/repo.gif"/></td> 
+				<td>Build artifact is also a p2 repository</td> 
+			</tr> 
+			<tr> 
+				<td align="center"><img src="/equinox/images/md5.png"/></td> 
+				<td>Click to get the MD5 hash for the corresponding build artifact</td> 
+			</tr> 
+			<tr> 
+				<td align="center"><img src="/equinox/images/sha1.png"/></td> 
+				<td>Click to get the SHA1 hash for the corresponding build artifact</td> 
+			</tr> 
+			<tr> 
+				<td align="center"><img src="/equinox/images/egg.gif"/></td> 
+				<td>Build artifact is from the Equinox incubator and may not be fully complete or tested.</td> 
+			</tr> 
+		</table> 
+	</div>
+</div>
+
+EOHTML;
+	generateRapPage( $App, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html );
+?>
