diff --git a/release-scripts/index.sh b/release-scripts/index.sh
new file mode 100755
index 0000000..2de6823
--- /dev/null
+++ b/release-scripts/index.sh
@@ -0,0 +1,241 @@
+#/bin/sh
+
+set -x
+
+cd $(dirname $0)
+
+echo '<html><head><link rel="stylesheet" href="default.css">' > index.html
+
+echo '<title>Eclipse Jetty Downloads</title></head>' >> index.html
+
+echo '<body>' >> index.html
+
+echo '<center><img src="http://www.eclipse.org/jetty/images/jetty-logo-80x22.png" alt="Jetty logo"/></center>' >> index.html
+
+echo '<h1>Jetty Downloads</h1>' >> index.html
+
+echo '<p><b>Jetty Website</b>: <a href="http://www.eclipse.org/jetty">http://www.eclipse.org/jetty</a></p>' >> index.html
+
+echo '<p><b>Jetty Documentation Hub</b>: <a href="http://www.eclipse.org/jetty/documentation">http://www.eclipse.org/jetty/documentation</a></p>' >> index.html
+
+echo '<p>The latest release of all minor releases are below, earlier releases in a minor release version are available under the archived releases link below.</p>' >> index.html
+
+echo '<table border=0>' >> index.html
+
+echo '<tr><td align=LEFT valign=TOP colspan="2" bgcolor="#0080C0"><b><font color="#FFFFFF" face="Arial,Helvetica">Downloads</font></b></td></tr>' >> index.html
+
+find * -maxdepth 1 -type d -name dist | sort -r | while read DIST
+do
+  F=$(dirname $DIST)
+  echo $DIST $F
+
+  echo "<tr><th align=right>$F:</th><td>" >> index.html
+  [ $(ls $F/dist/ | wc -l) -gt 1 ] && echo "<a href=$F/dist/jetty-distribution-$(expr $F/dist/*.zip : '.*-\([0-9].*\).zip').zip>.zip</a> <a href=$F/dist/jetty-distribution-$(expr $F/dist/*.tar.gz : '.*-\([0-9].*\).tar.gz').tar.gz>.tgz</a> <a href=$F/dist/>(all)</a></td>" >> index.html
+  echo "</td><td>" >> index.html
+  [ -d $F/apidocs ] && echo "<a href=$F/apidocs>apidocs</a>" >> index.html
+  echo "</td><td>" >> index.html
+  [ -d $F/xref ] && echo "<a href=$F/xref>xref</a>" >> index.html
+  echo "</td><td>" >> index.html
+  if [ -d $F/repository ]; then
+    echo "<a href=$F/repository>P2</a>" >> index.html
+  elif [ -d updates/jetty-bundles-7.x/$F ]; then
+    echo "<a href=updates/jetty-bundles-7.x/$F>P2</a>" >> index.html
+  elif [ -d updates/jetty-bundles-8.x/$F ]; then
+    echo "<a href=updates/jetty-bundles-8.x/$F>P2</a>" >> index.html
+  elif [ -d updates/jetty-bundles-9.x/$F ]; then
+    echo "<a href=updates/jetty-bundles-9.x/$F>P2</a>" >> index.html
+  elif [ -d updates/jetty-bundles-9.1.x/$F ]; then
+    echo "<a href=updates/jetty-bundles-9.1.x/$F>P2</a>" >> index.html
+  fi
+  echo "</td><td>" >> index.html
+  [ -d $F/dist-eclipse ] && echo "<a href=$F/dist-eclipse/>EclipseRTJetty</a>" >> index.html
+  echo "</td><td>" >> index.html
+  case $F in
+    stable-7* ) echo "Stable $(expr stable-7/dist/*.tar.gz : '.*-\([0-9].*\).tar.gz')" >> index.html
+    ;;
+    stable-8* ) echo "Stable $(expr stable-8/dist/*.tar.gz : '.*-\([0-9].*\).tar.gz')" >> index.html
+    ;;    
+    stable-9* ) echo "Stable $(expr stable-9/dist/*.tar.gz : '.*-\([0-9].*\).tar.gz')" >> index.html
+    ;;
+    *M[0-9] ) echo "Milestone $(date -r $F '+%Y-%m-%d')" >> index.html
+    ;;
+    *RC[0-9] ) echo "Release Candidate $(date -r $F '+%Y-%m-%d')" >> index.html
+    ;;
+    *v* ) echo "Release" >> index.html
+    ;;
+  esac
+
+
+  echo "</td></tr>" >> index.html
+
+  echo '<html><head><link rel="stylesheet" href="../../default.css">' > $F/dist/index.html 
+  echo "<h1>$F:</h1>" >> $F/dist/index.html
+  echo '<ul>' >> $F/dist/index.html
+  echo '<li><a href=http://download.eclipse.org/jetty/>all jetty distributions</a></li>' >> $F/dist/index.html
+
+  find $F/dist -type f | while read D
+  do
+    D=$(basename $D)
+    [ $D != index.html ] && echo "<li><a href=http://eclipse.org/downloads/download.php?file=/jetty/$F/dist/$D&r=1>$D</a>" >> $F/dist/index.html
+  done
+  echo '</ul>' >> $F/dist/index.html
+  echo "<script type="text/javascript">
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-1149868-7']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>" >> $F/dist/index.html
+  echo '</body></html>' >> $F/dist/index.html
+done
+echo '</table>' >> index.html
+
+echo '<br/>' >> index.html
+
+echo '<p>Note: Releases are *.zip and *tar.gz files.  There are also other files containing signatures and checksums under (all) that you can use to validate content.</p>' >> index.html
+
+echo '<p>You can find all archived Jetty releases (for Jetty 7+) <a href="http://archive.eclipse.org/jetty/index.html">here</a>.</p><br/><br/>' >> index.html
+
+echo '<h3>Jetty P2 Repositories</h3>' >> index.html
+
+echo "<p>These are not for general use and are provided strictly for OSGI users.</p>" >> index.html
+
+echo "<p>Composite Jetty7  P2 repo - <a href="http://download.eclipse.org/jetty/updates/jetty-bundles-7.x">jetty-bundles-7.x</a></p>" >> index.html
+echo "<p>Composite Jetty8 P2 repo - <a href="updates/jetty-bundles-8.x">http://download.eclipse.org/jetty/updates/jetty-bundles-8.x</a></p>" >> index.html
+
+echo "<p>Composite Jetty9 P2 repo - <a href="updates/jetty-bundles-9.x">http://download.eclipse.org/jetty/updates/jetty-bundles-9.x</a></p>" >> index.html
+
+
+echo '<p><a href=orbit>Jetty orbit dependencies</a></p>' >> index.html
+
+  echo "<script type="text/javascript">
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-1149868-7']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>" >> index.html
+
+echo '</body></html>' >> index.html
+
+cd orbit
+
+echo '<html><head><link rel="stylesheet" href="../default.css">' > index.html
+echo '<h1>Jetty-Orbit@eclipse downloads</h1>' > index.html
+echo '<ul>' >> index.html
+find -name '*.jar' | sort | while read JAR
+do
+  echo "<li><a href=$JAR/dist/>$(basename $JAR)</a></li>" >> index.html
+done
+echo '</ul>' >> index.html
+  echo "<script type="text/javascript">
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-1149868-7']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>" >> index.html
+
+echo '</body></html>' >> index.html
+
+cd /home/data/httpd/archive.eclipse.org/jetty
+
+echo '<html><head><link rel="stylesheet" href="http://download.eclipse.org/jetty/default.css">' > index.html
+echo '<h1>Jetty Archived Releases</h1>' >> index.html
+
+echo '<table border=0>' >> index.html
+
+find * -maxdepth 1 -type d -name dist | sort -r | while read DIST
+do
+  F=$(dirname $DIST)
+  echo $DIST $F
+
+  echo "<tr><th align=right>$F:</th><td>" >> index.html
+  [ $(ls $F/dist/ | wc -l) -gt 1 ] && echo "<a href=$F/dist/>download</a></td>" >> index.html
+  echo "</td><td>" >> index.html
+  [ -d $F/apidocs ] && echo "<a href=$F/apidocs>apidocs</a>" >> index.html
+  echo "</td><td>" >> index.html
+  [ -d $F/xref ] && echo "<a href=$F/xref>xref</a>" >> index.html
+  echo "</td><td>" >> index.html
+  if [ -d $F/repository ]; then
+    echo "<a href=$F/repository>P2</a>" >> index.html
+  elif [ -d updates/jetty-bundles-7.x/$F ]; then
+    echo "<a href=updates/jetty-bundles-7.x/$F/repository>P2</a>" >> index.html
+  elif [ -d updates/jetty-bundles-8.x/$F ]; then
+    echo "<a href=updates/jetty-bundles-8.x/$F/repository>P2</a>" >> index.html
+  elif [ -d updates/jetty-bundles-9.x/$F ]; then
+    echo "<a href=updates/jetty-bundles-9.x/$F>P2</a>" >> index.html
+  fi
+  echo "</td><td>" >> index.html
+  [ -d $F/dist-eclipse ] && echo "<a href=$F/dist-eclipse/>EclipseRTJetty</a>" >> index.html
+  echo "</td><td>" >> index.html
+  case $F in
+    stable* ) echo "Stable $(expr stable-7/dist/*.tar.gz : '.*-\([0-9].*\).tar.gz')" >> index.html
+    ;;
+    *M[0-9] ) echo "Milestone $(date -r $F '+%Y-%m-%d')" >> index.html
+    ;;
+    *RC[0-9] ) echo "Release Candidate $(date -r $F '+%Y-%m-%d')" >> index.html
+    ;;
+    *v* ) echo "Release" >> index.html
+    ;;
+  esac
+
+
+  echo "</td></tr>" >> index.html
+ 
+  echo '<html><head><link rel="stylesheet" href="http://download.eclipse.org/jetty/default.css">' > $F/dist/index.html
+
+  echo "<h1>$F:</h1>" >> $F/dist/index.html
+  echo '<ul>' >> $F/dist/index.html
+  echo '<li><a href=http://download.eclipse.org/jetty/>all jetty distributions</a></li>' >> $F/dist/index.html
+  find $F/dist -type f | while read D
+  do
+    D=$(basename $D)
+    [ $D != index.html ] && echo "<li><a href=http://eclipse.org/downloads/download.php?file=/jetty/$F/dist/$D&r=1>$D</a>" >> $F/dist/index.html
+  done
+  echo '</ul>' >> $F/dist/index.html
+  echo "<script type="text/javascript">
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-1149868-7']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>" >> $F/dist/index.html
+echo '</body></html>' >> $F/dist/index.html
+done
+echo '</table>' >> index.html
+  echo "<script type="text/javascript">
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-1149868-7']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>" >> index.html
+echo '</body></html>' >> index.html
+
+
