diff --git a/.project b/.project
new file mode 100644
index 0000000..5812651
--- /dev/null
+++ b/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>emf-validation</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/_projectCommon.php b/_projectCommon.php
new file mode 100644
index 0000000..f0d0561
--- /dev/null
+++ b/_projectCommon.php
@@ -0,0 +1,77 @@
+<?php
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 Eclipse Foundation and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*		Eclipse Foundation - Initial version
+*		Anthony Hunter - changes for EMF Query
+********************************************************************************/
+$Nav->setLinkList(null);
+
+$projectname = "emf-query";
+$projectdisplayname = "EMF Query";
+$modelingprojectname = "modeling";
+$topprojectname = "emf"; 
+$shortprojectname = "query";
+
+$debug = (isset ($_GET["debug"]) && preg_match("/^\d+$/", $_GET["debug"]) ? $_GET["debug"] : -1);
+
+include_once($_SERVER["DOCUMENT_ROOT"] . "/emf-query/downloads/scripts.php");
+
+$regs = null;
+$buildtypes = array(
+		"R" => "Release",
+		"S" => "Stable",
+		"I" => "Integration",
+		"M" => "Maintenance",
+		"N" => "Nightly"
+);
+
+# Set the theme for your project's web pages.
+# See http://eclipse.org/phoenix/
+$theme = "Nova";
+
+# Define your project-wide Navigation here
+# This appears on the left of the page if you define a left nav
+# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
+# these are optional
+
+# If you want to override the eclipse.org navigation, uncomment below.
+# $Nav->setLinkList(array());
+
+# Break the navigation into sections
+$Nav->addNavSeparator("EMF Query", 	"/emf-query");
+$Nav->addCustomNav("Downloads", "/emf-query/downloads.php", "_self", 3);
+$Nav->addCustomNav("Documentation", "/emf-query/documentation.php", "_self", 3);
+$Nav->addCustomNav("Wiki", "http://wiki.eclipse.org/EMF", "_self", 3);
+$Nav->addCustomNav("Support", "/emf-query/support.php", "_self", 3);
+$Nav->addCustomNav("Newsgroup", "http://dev.eclipse.org/newslists/news.eclipse.modeling.emf/maillist.html", "_self", 3);
+$Nav->addCustomNav("Mailing List", "https://dev.eclipse.org/mailman/listinfo/emf-dev", "_self", 3);
+$Nav->addCustomNav("Modeling Corner", "http://wiki.eclipse.org/Modeling_Corner", "_self", 3);
+
+# Define keywords, author and title here, or in each PHP page specifically
+$pageKeywords	= "eclipse, emf, emf query";
+$pageAuthor		= "Anthony Hunter";
+
+# top navigation bar
+# To override and replace the navigation with your own, uncomment the line below.
+$Menu->setMenuItemList(array());
+$Menu->addMenuItem("Eclipse", "/", "_self");
+$Menu->addMenuItem("EMF Query", "/emf-query", "_self");
+$Menu->addMenuItem("Downloads", "/emf-query/downloads.php", "_self");
+$Menu->addMenuItem("Documentation", "/emf-query/documentation.php", "_self");
+$Menu->addMenuItem("About", "http://www.eclipse.org/projects/project_summary.php?projectid=modeling.emf.emf-query", "_self");
+
+# To define additional CSS or other pre-body headers
+$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/emf-query/style.css"/>');
+
+# To enable occasional Eclipse Foundation Promotion banners on your pages (EclipseCon, etc)
+$App->Promotion = TRUE;
+
+# If you have Google Analytics code, use it here
+# $App->SetGoogleAnalyticsTrackingCode("YOUR_CODE");
+?>
\ No newline at end of file
diff --git a/description.html b/description.html
deleted file mode 100644
index 10edabc..0000000
--- a/description.html
+++ /dev/null
@@ -1 +0,0 @@
-This project was just provisioned, so there isn't much to see here. You can find links to the propsal on this page.  Stay tuned for great things. 
\ No newline at end of file
diff --git a/documentation.php b/documentation.php
new file mode 100644
index 0000000..ef440ae
--- /dev/null
+++ b/documentation.php
@@ -0,0 +1,34 @@
+<?php
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 Eclipse Foundation and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*		Eclipse Foundation - Initial version
+*		Anthony Hunter - changes for EMF Query
+********************************************************************************/
+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());
+
+$pageTitle 		= "EMF Query Documentation";
+$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/emf-query/style.css"/>');
+
+$html  = <<<EOHTML
+<div id="midcolumn">
+<h2>$pageTitle</h2>
+<h3>Reference Documentation</h3>
+<p>Reference information can be found on the <a href="http://www.eclipse.org/modeling/emf/docs/">EMF Documentation</a> page.</p>
+</div>
+EOHTML;
+
+# Generate the web page
+$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
diff --git a/downloads.php b/downloads.php
new file mode 100644
index 0000000..1d65d5f
--- /dev/null
+++ b/downloads.php
@@ -0,0 +1,53 @@
+<?php  																														
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 Eclipse Foundation and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*		Eclipse Foundation - Initial version
+*		Anthony Hunter - changes for EMF Query
+********************************************************************************/
+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());
+
+$pageTitle = "EMF Query Downloads";
+$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/emf-query/style.css"/>');
+
+$html  = <<<EOHTML
+<div id="midcolumn">
+<h2>$pageTitle</h2>
+<p>All downloads are provided under the terms and conditions of the
+<a href="/legal/epl/notice.php">Eclipse Foundation Software User Agreement</a>
+unless otherwise specified.</p>
+
+<h3>Installation via Eclipse Update Manager</h3>
+<p>Using the Eclipse Update Manager (see <a href="http://help.eclipse.org/juno/index.jsp?topic=/org.eclipse.platform.doc.user/tasks/tasks-129.htm">Eclipse Help</a> for detailed instructions) EMF Query can be installed from the following update sites:
+<ul>
+	<li>Releases: <a href="http://download.eclipse.org/modeling/emf/query/updates/releases/">http://download.eclipse.org/modeling/emf/query/updates/releases/</a></li>
+	<li>Milestones: <a href="http://download.eclipse.org/modeling/emf/query/updates/milestones/">http://download.eclipse.org/modeling/emf/query/updates/milestones/</a></li>
+	<li>Integration: <a href="http://download.eclipse.org/modeling/emf/query/updates/interim/">http://download.eclipse.org/modeling/emf/query/updates/interim/</a></li>
+</ul>
+
+<h3>Downloadable P2 Repositories and SDK dropins</h3>
+<p>If you prefer an update-site or an SDK archive, you can download it from <a href="downloads/index.php">here directly</a>.</p>
+
+<h3>Nightly Builds</h3>
+<p>The nightly builds can also be used as a P2 repository. The nightly builds for the Luna simultaneous release can be accessed from <a href="https://hudson.eclipse.org/query/job/emf-query-master/">Hudson</a>.</p>
+
+<h3>Translations</h3>
+<p>Translations packages can be downloaded from the <a href="http://www.eclipse.org/babel/downloads.php">Babel project downloads page</a>.</p>
+
+</div>
+EOHTML;
+
+# Generate the web page
+$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
\ No newline at end of file
diff --git a/downloads/downloads-common.php b/downloads/downloads-common.php
new file mode 100644
index 0000000..20cbf08
--- /dev/null
+++ b/downloads/downloads-common.php
@@ -0,0 +1,128 @@
+<?php
+/******************************************************************************
+ * Copyright (c) 2013, 2014 IBM Corporation and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*    IBM Corporation - initial implementation
+****************************************************************************/
+
+$deps = array(
+	"eclipse" => "<a href=\"http://www.eclipse.org/eclipse/\">Eclipse</a>",
+);
+
+require_once($_SERVER["DOCUMENT_ROOT"] . "/$projectname/downloads/downloads-scripts.php");
+
+$numzips = 0;
+if (isset($dls[$shortprojectname]) && is_array($dls[$shortprojectname]))
+{
+	foreach (array_keys($dls[$shortprojectname]) as $z)
+	{
+		$numzips += sizeof($dls[$shortprojectname][$z]);
+	}
+}
+
+# store an array of paths to hide
+$hiddenBuilds = is_readable($_SERVER["DOCUMENT_ROOT"] . "/$projectname/downloads/hidden.txt") ? file($_SERVER["DOCUMENT_ROOT"] . "/$projectname/downloads/hidden.txt") : array();
+
+// include extras-$projectname.php
+$extras = $_SERVER["DOCUMENT_ROOT"] . "/$projectname/downloads/extras-$projectname.php";
+if (file_exists($extras))
+{
+	include_once($extras);
+}
+
+$hadLoadDirSimpleError = 1; //have we echoed the loadDirSimple() error msg yet? if 1, omit error; if 0, echo at most 1 error
+$sortBy = (isset($_GET["sortBy"]) && preg_match("/^(date)$/", $_GET["sortBy"], $regs) ? $regs[1] : "");
+$showAll = (isset($_GET["showAll"]) && preg_match("/^(1)$/", $_GET["showAll"], $regs) ? $regs[1] : "0");
+$showMax = (isset($_GET["showMax"]) && preg_match("/^(\d+)$/", $_GET["showMax"], $regs) ? $regs[1] : ($sortBy == "date" ? "10" : "5"));
+
+$PWD = "/home/data2/httpd/download.eclipse.org/$modelingprojectname/$topprojectname/$shortprojectname/downloads/drops";
+
+$downloadScript = getdownloadScript();
+$downloadPre = "";
+
+print "<div id=\"midcolumn\">\n";
+print "<h2>$projectdisplayname P2 Repositories & SDK Dropins</h2>\n";
+print "<p>This page provides a bundled P2 repository and different SDK dropins (in runnable form) for each build.</p>";
+
+$branches = loadDirSimple($PWD, ".*", "d");
+rsort($branches);
+$buildTypes = getBuildTypes($branches, $buildtypes);
+
+$builds = getBuildsFromDirs();
+$releases = array();
+if ($sortBy != "date")
+{
+
+	$builds = reorderAndSplitArray($builds, $buildTypes);
+	$releases = $builds[1];
+	$builds = $builds[0];
+}
+else
+{
+	krsort($builds); reset($builds);
+}
+
+print "<div id=\"midcolumn\">\n";
+if (sizeof($builds) == 0 && sizeof($releases) == 0)
+{
+	print "<h2>Builds</h2>\n";
+	print "<ul>\n";
+	if (is_array($projectArray) && !in_array($shortprojectname, $projectArray))
+	{
+		print "<li><i><b>Sorry!</b></i> There are no builds yet available for this component.</li>";
+	}
+	else
+	{
+		print "<li><i><b>Error!</b></i> No builds found on this server!</li>";
+	}
+	print "</ul>\n";
+}
+
+if ($sortBy != "date")
+{
+	doLatest($releases, "Releases");
+
+	$c = 0;
+	foreach ($builds as $branch => $types)
+	{
+		foreach ($types as $type => $IDs)
+		{
+			print "<h3>" . $buildTypes[$branch][$type] . "s</h3>\n";
+			print "<ul>\n";
+			$i = 0;
+			foreach ($IDs as $ID)
+			{
+				print outputBuild($branch, $ID, $c++);
+				$i++;
+
+				if (!$showAll && $i == $showMax && $i < sizeof($IDs))
+				{
+					print showToggle($showAll, $showMax, $sortBy, sizeof($IDs));
+					break;
+				}
+				else if ($showAll && sizeof($IDs) > $showMax && $i == sizeof($IDs))
+				{
+					print showToggle($showAll, $showMax, $sortBy, sizeof($IDs));
+				}
+			}
+			print "</ul>\n";
+		}
+	}
+}
+else if ($sortBy == "date")
+{
+	doLatest($builds, "Builds");
+}
+
+if (isset($oldrels) && is_array($oldrels) && sizeof($oldrels) > 0)
+{
+	showArchived($oldrels);
+	showNotes();
+}
+print "</div>\n";
+?>
diff --git a/downloads/downloads-scripts.php b/downloads/downloads-scripts.php
new file mode 100644
index 0000000..5e3d6d5
--- /dev/null
+++ b/downloads/downloads-scripts.php
@@ -0,0 +1,429 @@
+<?php
+/******************************************************************************
+ * Copyright (c) 2013, 2014 IBM Corporation and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*    IBM Corporation - initial implementation
+****************************************************************************/
+
+function doLatest($releases, $label = "Releases")
+{
+	#global $rssfeed, $showMax, $showAll, $sortBy;
+	global $showMax, $showAll, $sortBy;
+	if (sizeof($releases)>0)
+	{
+		print "<div class=\"homeitem3col\">\n";
+		#print "<a name=\"latest\"></a><h3>${rssfeed}Latest $label</h3>\n";
+		print "<a name=\"latest\"></a><h3>Latest $label</h3>\n";
+		print "<ul class=\"releases\">\n";
+		$c = 0;
+		foreach ($releases as $rID => $rbranch)
+		{
+			$ID = preg_replace("/^(\d{12})([IMNRS])$/", "$2$1", $rID);
+			$branch = preg_replace("/.$/", "", $rbranch);
+			print outputBuild($branch, $ID, $c++);
+			if (!$showAll && $c == $showMax && $c < sizeof($releases))
+			{
+				print showToggle($showAll, $showMax, $sortBy, sizeof($releases));
+				break;
+			}
+			else if ($showAll && sizeof($releases) > $showMax && $c == sizeof($releases))
+			{
+				print showToggle($showAll, $showMax, $sortBy, sizeof($releases));
+			}
+		}
+		print "</ul>\n";
+		print "</div>\n";
+	}
+}
+
+function reorderAndSplitArray($arr, $buildTypes)
+{
+	// the first dimension's order is preserved (kept as it is in the config file)
+	// sort the second dimension using the IMNRS order in $buildTypes
+	// rsort the third dimension
+
+	$new = array();
+	$rels = array();
+	foreach ($buildTypes as $br => $types)
+	{
+		foreach ($types as $bt => $names)
+		{
+			if ($bt == "R" && isset($arr[$br][$bt]))
+			{
+				$id = $arr[$br][$bt][0];
+				$rels[substr($id,1) . $bt] = $br . $bt;
+			}
+			else if (array_key_exists($br, $arr) && array_key_exists($bt, $arr[$br]) && is_array($arr[$br][$bt]))
+			{
+				$new[$br][$bt] = $arr[$br][$bt];
+				rsort($new[$br][$bt]);
+			}
+		}
+	}
+	return array($new,$rels);
+}
+
+function getBuildsFromDirs() // massage the builds into more useful structures
+{
+	global $PWD, $sortBy;
+
+	$branchDirs = loadDirSimple($PWD, ".*", "d");
+	$buildDirs = array();
+
+	foreach ($branchDirs as $branch)
+	{
+		if ($branch != "OLD")
+		{
+			$buildDirs[$branch] = loadDirSimple("$PWD/$branch", "[IMNRS]\d{12}", "d");
+		}
+	}
+
+	$builds_temp = array();
+	foreach ($buildDirs as $br => $dirList)
+	{
+		foreach ($dirList as $dir)
+		{
+			$ty = substr($dir, 0, 1); //first char
+
+			if ($sortBy != "date")
+			{
+				$builds_temp[$br][$ty][] = $dir;
+			}
+			else
+			{
+				$dttm = substr($dir, 1); // last 12 digits
+				$a = $dttm . $ty;
+				$b = $br . $ty;
+
+				$builds_temp[$a] = $b;
+			}
+		}
+	}
+
+	return $builds_temp;
+}
+
+function getBuildTypes($branches, $buildtypes)
+{
+	$arr = array();
+
+	foreach ($branches as $branch)
+	{
+		foreach (array_keys($buildtypes) as $z)
+		{
+			if (!array_key_exists($branch, $arr))
+			{
+				$arr[$branch] = array();
+			}
+
+			// [2.0][N]
+			$arr[$branch][$z] = "$branch {$buildtypes[$z]} Build";
+		}
+	}
+
+	return $arr;
+}
+
+function IDtoDateStamp($ID, $style) // given N200402121441, return date("D, j M Y -- H:i (O)")
+{
+	$styles = array('Y/m/d H:i', "D, j M Y -- H:i (O)", 'Y/m/d');
+	$m = null;
+	if (preg_match("/(\d{4})(\d\d)(\d\d)(?:_)?(\d\d)(\d\d)/", $ID, $m))
+	{
+		$ts = mktime($m[4], $m[5], 0, $m[2], $m[3], $m[1]);
+		return date($styles[$style], $ts);
+	}
+
+	return "";
+}
+
+function createFileLinks($dls, $PWD, $branch, $ID, $pre2, $filePreProj, $ziplabel = "") // the new way - use a ziplabel pregen'd from a dir list!
+{
+	global $projectname, $suf, $modelingprojectname, $shortprojectname, $filePreStatic;
+	$uu = 0;
+
+	if (!$ziplabel)
+	{
+		$zips_in_folder = loadDirSimple("$PWD/$branch/$ID/", "(\.zip|\.tar\.gz)", "f");
+		$ziplabel = preg_replace("/(.+)\-([^\-]+)(\.zip|\.tar\.gz)/", "$2", $zips_in_folder[0]); // grab first entry
+	}
+
+	$cnt=-1; // for use with static prefix list
+
+	$echo_out_all = "";
+
+	foreach (array_keys($dls[$shortprojectname]) as $z)
+	{
+		$echo_out = "";
+		foreach ($dls[$shortprojectname][$z] as $label => $u)
+		{
+			$cnt++;
+			if (!is_array($u))
+			{
+				$u = $u ? array("$u") : array("");
+			}
+
+			// support a page with three different valid prefixes which can
+			// overlap when searched using dynamic check below
+			if ($filePreStatic && is_array($filePreStatic) && array_key_exists($modelingprojectname,$filePreStatic))
+			{
+				$filePreProj = array($filePreStatic[$modelingprojectname][$cnt]); // just one value to check
+			}
+
+			$tries = array();
+			foreach ($u as $ux)
+			{
+				foreach ($filePreProj as $filePre)
+				{ 
+					$tries[] = "$branch/$ID/$pre2$filePre$ux-$ziplabel.zip"; 
+					$tries[] = "$branch/$ID/$filePre$ux-$ziplabel.zip"; 
+					$tries[] = "$branch/$ID/$pre2$filePre$ux-incubation-$ziplabel.zip"; 
+					$tries[] = "$branch/$ID/$filePre$ux-incubation-$ziplabel.zip"; 
+					$tries[] = "$branch/$ID/$ux-$ziplabel.zip"; 
+				}
+			}
+			$outNotFound = "<i><b>$pre2</b>$filePre";
+			if (sizeof($u) > 1 ) {
+				$outNotFound .= "</i>{"; foreach ($u as $ui => $ux) {
+					$outNotFound .= ($ui>0 ? "," : "") . $ux;
+				} $outNotFound .= "}<i>";
+			}
+			else
+			{
+				$outNotFound .= $u[0];
+			}
+			$outNotFound .= "-$ziplabel ...</i>";
+			$out = "";
+			foreach ($tries as $y)
+			{
+				if (is_file("$PWD/$y"))
+				{
+					$out = fileFound("$PWD/", $y, $label);
+					break;
+				}
+			}
+			if ($out)
+			{
+				$echo_out .= "<li class=\"separator\">\n";
+				$echo_out .= $out;
+				$echo_out .= "</li>\n";
+			}
+			else if (!isset($extraZips) || !is_array($extraZips) || !in_array($filePre . $u[0],$extraZips)) // $extraZips defined in downloads/index.php if necessary
+			{
+				$echo_out .= "<li>\n";
+				$echo_out .= $outNotFound;
+				$echo_out .= "</li>\n";
+			}
+			$uu++;
+		}
+		if ($echo_out) // if the whole category is empty, don't show it (eg., GEF)
+		{
+			$echo_out_all .= "<li><img src=\"/$projectname/images/dl.gif\" alt=\"Download\"/> $z\n<ul>\n" . $echo_out . "</ul>\n</li>\n";
+		}
+	}
+	return $echo_out_all;
+}
+
+function fileFound($PWD, $url, $label, $md5AlignRight = true, $icon = null)
+{
+	global $downloadScript, $downloadPre, $projectname, $modelingprojectname, $topprojectname, $shortprojectname;
+
+	$out = "";
+	$mid = "$downloadPre/$modelingprojectname/$topprojectname/$shortprojectname/downloads/drops/"; 
+	$md5files = array("$url.md5", preg_replace("#/([^/]+$)#", "/checksum/$1", $url) . ".md5");
+	foreach ($md5files as $md5file)
+	{
+		if (is_file($PWD.$md5file))
+		{
+			$out .= "<span style=\"float:right;\">&nbsp;&nbsp;" . pretty_size(filesize("$PWD$url")) . " (<a href=\"" . "http://download.eclipse.org" .
+			"$mid$md5file\">md5</a>)</span>"; break;
+		}
+	}
+	#return $md5AlignRight ? $out . "<a href=\"$downloadScript$mid$url\">$label</a>" :
+	#	"<a href=\"$downloadScript$mid$url\">$icon</a>&nbsp;<a href=\"$downloadScript$mid$url\">$label</a>" . $out;
+	return "<span style=\"float:left;clear:left;\"><a href=\"$downloadScript$mid$url\">$icon</a>&nbsp;<a href=\"$downloadScript$mid$url\">$label</a></span>" . $out;
+}
+
+function doNLSLinksList($packs, $cols, $subcols, $packSuf, $folder, $isArchive = false)
+{
+	global $downloadScript, $downloadPre, $projectname, $modelingprojectname, $shortprojectname;
+
+	foreach ($packs as $name => $packPre)
+	{
+		foreach ($cols as $alt => $packMid)
+		{
+			print "<li><img src=\"/$projectname/images/dl.gif\" alt=\"$alt\"/> $alt: ";
+			$ret = array();
+			if (sizeof($subcols) > 2)
+			{
+				print "<ul>\n";
+				$cnt = 0;
+				foreach ($subcols as $alt2 => $packMid2)
+				{
+					if ($cnt > 0 && $cnt % 2 == 0)
+					{
+						print "<li>" . join(", ", $ret) . "</li>\n";
+						$ret = array();
+					}
+					$ret[] = "<a href=\"" . ($isArchive ? "http://archive.eclipse.org" : $downloadScript) .
+					"$downloadPre/$projectname/$modelingprojectname/downloads/drops/$folder$packPre$packMid-$packMid2$packSuf\">$alt2</a>";
+					$cnt++;
+				}
+				if (sizeof($ret) > 0)
+				{
+					print "<li>" . join(", ", $ret) . "</li>\n";
+				}
+				print "</ul>\n";
+			}
+			else
+			{
+				foreach ($subcols as $alt2 => $packMid2)
+				{
+					$ret[] = "<a href=\"" . ($isArchive ? "http://archive.eclipse.org" : $downloadScript) .
+					"$downloadPre/$projectname/$modelingprojectname/downloads/drops/$folder$packPre$packMid-$packMid2$packSuf\">$alt2</a>";
+				}
+				print join(", ", $ret);
+			}
+			print "</li>\n";
+		}
+	}
+}
+
+function grep($pattern, $file, $file_cache = null)
+{
+	$filec = $file_cache ? $file_cache : loadFile($file);
+
+	foreach ($filec as $z)
+	{
+		if (preg_match($pattern, $z))
+		{
+			$filec = array();
+			return true;
+		}
+	}
+
+	$filec = array();
+	return false;
+}
+
+function loadFile($file)
+{
+	$maxfilesize = 64*1024; // 64K file limit
+	$filec = array();
+	if (is_file($file) && is_readable($file))
+	{
+		if (filesize($file) < ($maxfilesize))
+		{
+			$filec = file($file);
+		}
+		else
+		{
+			exec("tail -n50 $file", $filec); // just grab the last n lines
+		}
+	}
+
+	return $filec;
+}
+
+function outputBuild($branch, $ID, $c)
+{
+	global $PWD, $dls, $filePre, $modelingprojectname, $sortBy, $shortprojectname, $jdk14testsPWD, $jdk50testsPWD, $jdk60testsPWD, $testsPWD, $deps, $projectname, $hiddenBuilds;
+
+	# suppress hidden builds for public server
+	foreach ($hiddenBuilds as $hb) {
+		if (trim($hb) == "$projectname/$branch/$ID")
+		{
+			debug("Build $projectname/$branch/$ID is hidden, pending mirror replication.", 1);
+			return "";
+		}
+	}
+	$pre2 = (is_dir("$PWD/$branch/$ID/eclipse/$ID/") ? "eclipse/$branch/$ID/" : "");
+
+	$zips_in_folder = loadDirSimple("$PWD/$branch/$ID/", "(\.zip|\.tar\.gz)", "f");
+	$ziplabel = (sizeof($zips_in_folder) < 1) ? $ID :
+	preg_replace("/(.+)\-([^\-]+)(\.zip|\.tar\.gz)/", "$2", $zips_in_folder[0]); // grab first entry
+
+	// generalize for any relabelled build, thus 2.0.1/M200405061234/*-2.0.2.zip is possible; label = 2.0.2
+	$IDlabel = $ziplabel;
+
+	$ret = "<li>\n";
+	$ret .= "<a href=\"javascript:toggle('r$ID')\">" .
+	"<i>" . ($sortBy == "date" && $IDlabel != $branch ? "$branch / " : "") . "$IDlabel</i> " .
+	"(" . IDtoDateStamp($ID, 2) . ")" .
+	"</a>" .
+	"<a name=\"$ID\"></a> " .
+	"<a href=\"?showAll=1&amp;hlbuild=$ID" .
+	($sortBy == "date" ? "&amp;sortBy=date" : "") .
+	"&amp;project=$shortprojectname#$ID\">" .
+	"<img alt=\"Link to this build\" src=\"/$projectname/images/link.png\"/>" .
+	"</a>" .
+	((isset($opts["noclean"]) && $opts["noclean"]) || is_dir("$PWD/$branch/$ID/eclipse/$ID") ? doNoclean("$PWD/$branch/$ID") : "");
+
+	$ret .= "<ul id=\"r$ID\"" . (($c == 0 && !isset($_GET["hlbuild"])) || isset($_GET["hlbuild"]) && $ID == $_GET["hlbuild"] ? "" : " style=\"display: none\"") . ">\n";
+
+	if (!isset($filePre[$modelingprojectname]) && isset($filePre["/"]))
+	{
+		$filePre[$modelingprojectname] = $filePre["/"];
+	}
+	if (!isset($filePre[$modelingprojectname]))
+	{
+		$topProj = preg_replace("#.+/(.+)#","$1", $projectname);
+		$filePre[$modelingprojectname] = array($shortprojectname);
+	}
+	
+	$ret .= createFileLinks($dls, $PWD, $branch, $ID, $pre2, $filePre[$modelingprojectname], $ziplabel);
+
+	$ret .= "</ul>\n";
+	$ret .= "</li>\n";
+
+	return $ret;
+}
+
+function showToggle($showAll, $showMax, $sortBy, $count)
+{
+	global $shortprojectname;
+	$ret = "<li><a href=\"" . $_SERVER["PHP_SELF"] . "?project=".$shortprojectname."&amp;showAll=" . ($showAll == "1" ? "" : "1") . "&amp;showMax=$showMax&amp;sortBy=$sortBy\">" . ($showAll != "1" ? "show all $count" : "show only $showMax") . "...</a></li>\n";
+	return $ret;
+}
+
+function showArchived($oldrels)
+{
+	global $projectname, $modelingprojectname, $projectdisplayname;
+
+	$thresh = sizeof($oldrels) > 5 ? ceil(sizeof($oldrels)/3) : 6;
+	print "<h3><a name=\"archives\"></a>Archived Releases</h3>\n";
+	print "<p>Older $projectdisplayname releases have been moved to archive.eclipse.org, and can be accessed here:</p>";
+	print '<table cellspacing="0" cellpadding="0" border="0" style="margin:0"><tr valign="top">'."\n";
+	print "<td><ul id=\"archives\">\n";
+	$cnt=-1;
+	foreach (array_keys($oldrels) as $z)
+	{
+		$cnt++;
+		if ($cnt % $thresh == 0)
+		{
+			print "</ul></td><td><ul id=\"archives\">\n";
+		}
+		if (!$z || $oldrels[$z] === null)
+		{
+			$cnt--; # spacer
+		}
+		else if (!is_array($oldrels[$z]))
+		{
+			print "<li style=''><a href=\"http://archive.eclipse.org/$projectname/$modelingprojectname/downloads/drops/$z/R$oldrels[$z]/\">$z</a> (" . IDtoDateStamp($oldrels[$z], 2) . ")</li>\n";
+		}
+		else 
+		{
+			print "<li><a href=\"" . $oldrels[$z][1] . "\">$z</a> (" . $oldrels[$z][0] . ")</li>\n";
+		}
+	}
+	print "</ul>\n";
+	print "</td>";
+	print "</tr></table>\n";
+	#print "</div>\n";
+}
+?>
diff --git a/downloads/downloads.js b/downloads/downloads.js
new file mode 100644
index 0000000..8af1892
--- /dev/null
+++ b/downloads/downloads.js
@@ -0,0 +1,5 @@
+function toggle(id)
+{
+        e = document.getElementById(id);
+        e.style.display = (e.style.display == "" ? "none" : "");
+}
diff --git a/downloads/extras-emf-query.php b/downloads/extras-emf-query.php
new file mode 100644
index 0000000..84b77fa
--- /dev/null
+++ b/downloads/extras-emf-query.php
@@ -0,0 +1,28 @@
+<?php
+/******************************************************************************
+ * Copyright (c) 2013, 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    IBM Corporation - initial implementation 
+ ****************************************************************************/
+
+$oldrels = array(
+	"1.1.0" => array("2007/06/20","http://archive.eclipse.org/modeling/emf/query/downloads/drops/1.1.0/R200706201159"),
+	"1.0.2" => array("2006/11/16","http://archive.eclipse.org/modeling/emf/query/downloads/drops/1.0.2/R200611161603"),
+	"1.0.1" => array("2006/09/25","http://archive.eclipse.org/modeling/emf/query/downloads/drops/1.0.1/R200609250852"),
+	"1.0.0" => array("2006/06/26","http://archive.eclipse.org/modeling/emf/query/downloads/drops/1.0.0/R200606261130"),
+);
+
+function showNotes()
+{
+?>
+	<div class="homeitem3col">
+		<p>All downloads are provided under the terms and conditions of the <a href="http://www.eclipse.org/legal/epl/notice.html">Eclipse Foundation Software User Agreement</a> unless otherwise specified.</p>
+	</div>
+<?php
+}
+?>
diff --git a/downloads/hidden.txt b/downloads/hidden.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/downloads/hidden.txt
diff --git a/downloads/index.php b/downloads/index.php
new file mode 100644
index 0000000..b455bbc
--- /dev/null
+++ b/downloads/index.php
@@ -0,0 +1,67 @@
+<?php
+/******************************************************************************
+ * Copyright (c) 2013, 2014 IBM Corporation and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*    IBM Corporation - initial implementation
+****************************************************************************/
+$defaultProj = "";
+unset($_GET["project"]); // gef has no subprojects, so this should be blank
+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());
+ob_start();
+
+/* $project => sections/Project Name => (prettyname => filename) */
+$dls = array(
+		/*"/newProj" => array(
+		 "Project Name" => array( 
+		 		"<acronym title=\"Click to download archived All-In-One p2 Repo Update Site\"><img alt=\"Click to download archived All-In-One p2 Repo Update Site\" src=\"/$projectname/images/dl-icon-update-zip.gif\"/> <b style=\"color:green\">All-In-One Update Site</b></acronym>" => "Update",
+		 		"SDK (Runtime, Source)" => "SDK",
+		 		"Runtime" => "runtime",
+		 		"Examples" => "examples",
+		 		"Automated Tests" => "automated-tests"
+		 )
+		),*/
+		"$shortprojectname" => array(
+				"$projectdisplayname" => array(
+						"<acronym title=\"Click to download archived All-In-One p2 Repo Update Site\"><img alt=\"Click to download archived All-In-One p2 Repo Update Site\" src=\"/$projectname/images/dl-icon-update-zip.gif\"/> <b style=\"color:green\">All-In-One Update Site</b></acronym>" => "$projectname-Update",
+			 		"SDK (Runtime, Source)" => "$projectname-SDK",
+			 		"Runtime" => "$projectname-runtime",
+			 		"Examples" => "$projectname-examples",
+		 			"Automated Tests" => "$projectname-automated-tests"
+				)
+		),
+);
+
+/* list of valid file prefixes for projects who have been renamed; keys have leading / to match $modelingprojectname */
+/* only required if using something other than the default; otherwise will be generated */
+$filePre = array( 
+		"/$projectname" => array("$topprojectname"),
+);
+
+/* define showNotes(), $oldrels, doLanguagePacks() in extras-$projectname.php if necessary, downloads-common.php will include them */
+/* end config */
+require_once($_SERVER["DOCUMENT_ROOT"] . "/$projectname/downloads/downloads-common.php");
+
+$html = ob_get_contents();
+ob_end_clean();
+
+$pageTitle = "$projectdisplayname P2 Repositories and Zip Downloads";
+$pageKeywords = "$topprojectname $projectname $shortprojectname";
+$pageAuthor = "Anthony Hunter";
+
+# Generate the web page
+$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/' . $projectname . '/style.css"/>' . "\n");
+$App->AddExtraHtmlHeader('<script src="/' . $projectname . '/downloads/downloads.js" type="text/javascript"></script>' . "\n"); //ie doesn't understand self closing script tags, and won't even try to render the page if you use one
+$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+
+?>
diff --git a/downloads/scripts.php b/downloads/scripts.php
new file mode 100644
index 0000000..e13556f
--- /dev/null
+++ b/downloads/scripts.php
@@ -0,0 +1,237 @@
+<?php
+/******************************************************************************
+ * Copyright (c) 2013, 2014 IBM Corporation and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*    IBM Corporation - initial implementation
+****************************************************************************/
+
+function loadDirSimple($dir, $ext, $type) // 1D array, not 2D
+{
+	$stuff = array();
+
+	if(is_dir($dir) && is_readable($dir))
+	{
+		$handle = opendir($dir);
+		while(($file = readdir($handle)) !== false)
+		{
+			if(preg_match("/$ext$/", $file) && !preg_match("/^\.{1,2}$/", $file))
+			{
+				if(($type == "d" && is_dir("$dir/$file")) ||($type == "f" && is_file("$dir/$file")))
+				{
+					$stuff[] = $file;
+				}
+			}
+		}
+		closedir($handle);
+	}
+	else
+	{
+		global $hadLoadDirSimpleError;
+		if(!$hadLoadDirSimpleError)
+		{
+			$issue =(!is_dir($dir) ? "NOT FOUND" :(!is_readable($dir) ? "NOT READABLE" : "PROBLEM"));
+			print "<p>Directory ($dir) <b>$issue</b> on mirror: <b>" . $_SERVER["HTTP_HOST"] . "</b>!</p>";
+			print "<p>Please report this error to <a href=\"mailto:webmaster@eclipse.org?Subject=Directory ($dir) $issue in scripts.php::loadDirSimple() on mirror " . $_SERVER["HTTP_HOST"] . "\">webmaster@eclipse.org</a>, or make directory readable.</p>";
+			$hadLoadDirSimpleError = 1;
+		}
+	}
+
+	return $stuff;
+}
+
+/* TODO: remove this when we upgrade php to >= 4.3.0 everywhere */
+if(!function_exists("file_get_contents"))
+{
+	function file_get_contents($file)
+	{
+		return(is_file($file) ? join("", file($file)) : "");
+	}
+}
+
+function debug($str, $level = 0)
+{
+	global $debug;
+
+	if($debug > $level)
+	{
+		print "<div class=\"debug\">$str</div>\n";
+	}
+}
+
+function debug_r($str, $header = "", $footer = "", $level = 0, $isPreformatted = false)
+{
+	global $debug;
+
+	if($debug > $level)
+	{
+		if($header)
+		{
+			print "<div class=\"debug\">";
+			print $header;
+			print "</div>\n";
+		}
+		print "<div class=\"debug\">";
+		print $isPreformatted ? "<pre><small>" : "";
+		print_r($str);
+		print $isPreformatted ? "</small></pre>" : "";
+		print "</div>\n";
+		if($footer)
+		{
+			print "<div class=\"debug\">";
+			print $footer;
+			print "</div>\n";
+		}
+	}
+}
+
+function domainSuffix($domain)
+{
+	return preg_replace("/.*([^\.]+\.[^\.]+)$/", "$1", $domain);
+}
+
+/* convert a wiki category page into a series of <li> items */
+function wikiCategoryToListItems($category)
+{
+	$wiki_contents = "";
+
+	// insert wiki content
+	$host = "wiki.eclipse.org";
+	$url = "/Category:" . $category;
+
+	$header = "Host: $host\r\n";
+	$header .= "User-Agent: PHP Script\r\n";
+	$header .= "Connection: close\r\n\r\n";
+
+	$fp = fsockopen($host, 80, $errno, $errstr, 30);
+	if(!$fp)
+	{
+		$out .= "<li><i>$errstr ($errno)</i></li>\n";
+	}
+	else
+	{
+		fputs($fp, "GET $url HTTP/1.1\r\n");
+		fputs($fp, $header);
+		while(!feof($fp))
+		{
+			$wiki_contents .= fgets($fp, 128);
+		}
+		fclose($fp);
+	}
+
+	$out = "";
+	if($wiki_contents)
+	{
+		$m = null;
+		if(preg_match("#<div id=\"mw-pages\">(.+)</div>[ \t\n]*<div class=\"printfooter\">#s", $wiki_contents, $m))
+		{
+			$links = null;
+			if(preg_match_all("#<a href=\"([^\"]+)\" title=\"([^\"]+)\">([^<]+)</a>#", $m[1], $links, PREG_SET_ORDER))
+			{
+				foreach($links as $z)
+				{
+					$out .= "<li><a href=\"http://wiki.eclipse.org/$z[1]\" title=\"$z[2]\">$z[3]</a></li>\n";
+				}
+			}
+		}
+	}
+	return $out;
+}
+
+function getProjectFromPath($projectname)
+{
+	$m = null;
+	return preg_match("#/" . $projectname . "/([^/]+)/build/.+#", $_SERVER["PHP_SELF"], $m) ? $m[1] :(preg_match("#/(" .
+			$projectname . ")/build/.+#", $_SERVER["PHP_SELF"], $m) ? $m[1] : "");
+}
+
+function cvsminus($rev)
+{
+	if(preg_match("/^1\.1$/", $rev)) // "1.10" == "1.1" returns true, curiously enough
+	{
+		return $rev;
+	}
+	else
+	{
+		if(preg_match("/\.1$/", $rev))
+		{
+			return preg_replace("/^(\d+\.\d+)\..+$/", "$1", $rev);
+		}
+		else
+		{
+			return preg_replace("/^(.+\.)(\d+)$/e", "\"$1\" . ($2 - 1);", $rev);
+		}
+	}
+}
+
+function getDownloadScript()
+{
+	global $projectname;
+	if(strstr($projectname, "/") !== false)
+	{
+		list($topProj, $parentProj) = explode("/", $projectname); 
+	}
+	else
+	{
+		list($topProj, $parentProj) = array("NONE", $projectname); 
+	}
+
+	# if this is a Modeling page, use /modeling/download.php;
+	# if this is a GEF page, use /gef/download.php
+	# if /foo/download.php doesn't exist, revert to /downloads/download.php
+	$dlScriptFile = $_SERVER["DOCUMENT_ROOT"] . "/" .($topProj == "NONE" ? $parentProj : $topProj) . "/download.php";
+	#print "[$dlScriptFile =? " . is_file($dlScriptFile) . "]<br>";
+	if(is_file($dlScriptFile))
+	{
+		$downloadScript = "http://www.eclipse.org/" .($topProj == "NONE" ? $parentProj : $topProj) . "/download.php?file=";
+	}
+	else
+	{
+		$downloadScript = "http://www.eclipse.org/downloads/download.php?file=";
+	}
+	return $downloadScript;
+}
+
+/* thanks to http://www.php.net/manual/en/function.filesize.php#80995 */
+function dirsize($path)
+{
+	$dirsize = exec("du -s $path");
+	if($dirsize)
+	{
+		$dirsize = explode(" ", $dirsize);
+		return($dirsize[0] - 0) * 1024;
+	}
+	if(!is_dir($path))
+	{
+		return filesize($path);
+	}
+	$size = 0;
+	foreach(scandir($path) as $file)
+	{
+		if($file != '.' && $file != '..')
+		{
+			$size += dirsize($path . '/' . $file);
+		}
+	}
+	return $size;
+}
+
+function pretty_size($bytes)
+{
+	$sufs = array("B", "K", "M", "G", "T", "P"); //we shouldn't be larger than 999.9 petabytes any time soon, hopefully
+	$suf = 0;
+
+	while($bytes >= 1000)
+	{
+		$bytes /= 1024;
+		$suf++;
+	}
+
+	return sprintf("%3.1f%s", $bytes, $sufs[$suf]);
+}
+
+?>
diff --git a/getting_involved.php b/getting_involved.php
new file mode 100644
index 0000000..596b6d6
--- /dev/null
+++ b/getting_involved.php
@@ -0,0 +1,45 @@
+<?php
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 Eclipse Foundation and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*		Eclipse Foundation - Initial version
+*		Anthony Hunter - changes for EMF Query
+********************************************************************************/
+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());
+
+$pageTitle 		= "EMF Query Getting Involved";
+$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/emf-query/style.css"/>');
+
+$html  = <<<EOHTML
+<div id="midcolumn">
+<h2>$pageTitle</h2>
+
+<p>As every Eclipse project, EMF Query is strongly dependent on active support by its community.
+You may become part of that community and get involved by reporting bugs or enhancement request,
+by contributing patches, by participation in discussions on the mailing list, or by supporting the
+maintaining of the EMF wiki.</p>
+
+<h3>Contributor Mailing List</h3>
+<p>Technical or organizational discussions (no help wanted questions) around the EMF project take place
+at the <a href="http://dev.eclipse.org/mailman/listinfo/emf-dev">EMF Developer Mailing List</a>.
+It is intended for use by developers actually working on or otherwise contributing to day-to-day
+development of the EMF project itself. Older discussions can be found in the
+<a href="http://dev.eclipse.org/mhonarc/lists/emf-dev/maillist.html">Mailing List Archive</a>.</p>
+
+</div>
+EOHTML;
+
+# Generate the web page
+$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
\ No newline at end of file
diff --git a/images/backgroundMain.png b/images/backgroundMain.png
new file mode 100644
index 0000000..f06df02
--- /dev/null
+++ b/images/backgroundMain.png
Binary files differ
diff --git a/images/buttonDocumentation.png b/images/buttonDocumentation.png
new file mode 100644
index 0000000..bbfdde0
--- /dev/null
+++ b/images/buttonDocumentation.png
Binary files differ
diff --git a/images/buttonDocumentation_sel.png b/images/buttonDocumentation_sel.png
new file mode 100644
index 0000000..8affb93
--- /dev/null
+++ b/images/buttonDocumentation_sel.png
Binary files differ
diff --git a/images/buttonDownload.png b/images/buttonDownload.png
new file mode 100644
index 0000000..e620092
--- /dev/null
+++ b/images/buttonDownload.png
Binary files differ
diff --git a/images/buttonDownload_sel.png b/images/buttonDownload_sel.png
new file mode 100644
index 0000000..d3a0330
--- /dev/null
+++ b/images/buttonDownload_sel.png
Binary files differ
diff --git a/images/buttonInvolved.png b/images/buttonInvolved.png
new file mode 100644
index 0000000..b3e9a82
--- /dev/null
+++ b/images/buttonInvolved.png
Binary files differ
diff --git a/images/buttonInvolved_sel.png b/images/buttonInvolved_sel.png
new file mode 100644
index 0000000..346a452
--- /dev/null
+++ b/images/buttonInvolved_sel.png
Binary files differ
diff --git a/images/buttonSupport.png b/images/buttonSupport.png
new file mode 100644
index 0000000..bd36086
--- /dev/null
+++ b/images/buttonSupport.png
Binary files differ
diff --git a/images/buttonSupport_sel.png b/images/buttonSupport_sel.png
new file mode 100644
index 0000000..a535fe8
--- /dev/null
+++ b/images/buttonSupport_sel.png
Binary files differ
diff --git a/images/dl-icon-update-zip.gif b/images/dl-icon-update-zip.gif
new file mode 100644
index 0000000..a16254b
--- /dev/null
+++ b/images/dl-icon-update-zip.gif
Binary files differ
diff --git a/images/dl.gif b/images/dl.gif
new file mode 100644
index 0000000..9d2f23a
--- /dev/null
+++ b/images/dl.gif
Binary files differ
diff --git a/images/link.png b/images/link.png
new file mode 100644
index 0000000..8b624d9
--- /dev/null
+++ b/images/link.png
Binary files differ
diff --git a/index.php b/index.php
index c8992df..1d4a695 100644
--- a/index.php
+++ b/index.php
@@ -1 +1,82 @@
-<?php header('Location: http://www.eclipse.org/projects/project.php?id=modeling.emf.validation'); ?>
\ No newline at end of file
+<?php
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 Eclipse Foundation and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*		Eclipse Foundation - Initial version
+*		Anthony Hunter - changes for EMF Query
+********************************************************************************/
+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());
+
+$localVersion = false;
+
+$pageTitle 		= "Eclipse EMF Query";
+
+// 	# Paste your HTML content between the EOHTML markers!
+$html = <<<EOHTML
+<div id="bigbuttons">
+<h3>Primary Links</h3>
+<ul>
+<li><a id="buttonDownload" href="downloads.php" title="Download">
+	Downloads, Software Install Site</a></li>
+<li><a id="buttonDocumentation" href="documentation.php" title="Documentation">
+	Tutorials, Examples, Reference Documentation</a></li>
+<li><a id="buttonSupport" href="support.php" title="Support">
+	Bug Tracker, Newsgroup</a></li>
+<li><a id="buttonInvolved" href="getting_involved.php" title="Getting Involved">
+	git, Workspace Setup, Wiki, Committers</a></li>
+</ul>
+</div>
+
+<div id="midcolumn">
+<h3>Eclipse Modeling Framework (EMF) Model Query</h3>
+
+<div id="introText">
+
+<p>EMF model query facilitates the process of search and retrieval of model elements of interest in a flexible yet controlled and structured manner. Provides API support for the basic EObject based Condition objects that are used to formulate queries for EMF models.</p>
+<p>EMF model query provides the following classes/interfaces to support queries.</p>
+<p><ol>
+	<li>The IEObjectSource interface provides the search scope elements to be used in a query.</li>
+	<li>The SELECT class implements a template-function that does the iteration over model elements and applies the search condition on each; it collects the resulting elements into a QueryResultSet object and returns it to the caller.</li>
+	<li>The FROM class represents the elements to search. It is responsible of providing an appropriate iterator for the elements in the search space.</li>
+	<li>The WHERE class applies the search conditions over the elements in the search set.</li>
+	<li>The UPDATE class passes the elements who satisfy the search condition to a caller-supplied modification function. It collects the modified elements into a QueryResultSet object and returns it to the caller.</li>
+	<li>The QueryResultSet class represents the set of elements returned by a given query.</li>
+	<li>The EObjectCondition class is the abstract parent of all conditions that deal with model-elements (i.e., EObjects). It incorporates the services of a PruneHandler in order to answers whether or not to prune the element tree at a specific element and thus ignore its children.</li>
+	<li>The ConditionPolicy class is used to allow the user to decide how to apply a given condition on a collection of a model-element EAttributes or EReferences values. Supports both the: exists (ANY) and for-all (ALL) semantics.</li>
+	<li>The EObjectStructuralFeatureValueCondition class is the parent class for conditions that are responsible for checking the values held in model-elements attributes or references.</li>
+</ol></p>
+
+</div>
+
+</div>
+
+<div id="rightcolumn">
+
+<div>
+<h3>Current Status</h3>
+<p>Development is underway for the proposed EMF Query 1.8.0 release for Eclipse Luna, due June 2014.</p>
+</div>
+
+<div id="headlines">
+<h3>EMF Query 1.7.0 Now Available</h3>
+<p><i>June 26, 2013 -</i> EMF Query 1.7.0 for Eclipse Kepler has been released. Check the <a href="/emf-query/downloads.php">Download</a> page.</p>
+</div>
+
+</div>
+EOHTML;
+
+# Generate the web page
+$App->generatePage($theme, $Menu, null, $pageAuthor, $pageKeywords, $pageTitle, $html);
+
+?>
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..75d277a
--- /dev/null
+++ b/style.css
@@ -0,0 +1,181 @@
+@CHARSET "UTF-8";
+#novaContent {
+	background: url("images/backgroundMain.png") no-repeat;
+	padding-top: 210px;
+}
+
+#midcolumn {
+	width: 640px;
+	padding: 0 10px 10px 10px;
+}
+
+#rightcolumn {
+	width: 260px;
+}
+
+
+h3 {
+	clear: both;
+}
+
+h7 {
+	font-weight: bold;
+	padding: 5px;
+}
+
+a strong {
+	text-decoration: underline;
+}
+
+img.displayed {
+	display: block;
+	margin-left: auto;
+	margin-right: auto;
+}
+
+#novaContent {
+	background: url("images/backgroundMain.png") no-repeat white;
+	padding-top: 170px;
+}
+
+#introText p.left {
+	width: 48%;
+	float: left;
+}
+
+#introText p.right {
+	width: 48%;
+	float: right;
+}
+
+#feature_1 {
+	float: left;
+	width: 30%;
+	margin-right: 3%;
+}
+
+#feature_2 {
+	float: left;
+	width: 30%;
+	margin-right: 3%
+}
+
+#feature_3 {
+	float: left;
+	width: 30%;
+}
+
+#feature_4 {
+	clear: both;
+	float: left;
+	width: 63%;
+	margin-right: 3%;	
+}
+
+#feature_more {
+	float: left;
+	width: 30%;
+}
+	
+#bigbuttons {
+	position: relative;
+	left: 420px;
+	top: -170px;
+}
+#bigbuttons h3{
+	visibility: hidden;
+}
+
+#bigbuttons a {
+}
+
+#bigbuttons ul li {
+   display:block;
+   list-style-type:none;
+   background-color: red;
+   padding: 0;
+   margin: 0;
+}
+
+#bigbuttons a:hover {
+	text-decoration: none;
+}
+
+#bigbuttons a {
+   display: block;
+   height:77px; width:250px;
+   padding: 0;
+   margin: 20px;
+   text-indent: -9000px;
+   position: absolute;
+}
+
+#buttonDownload {
+   background:transparent url("images/buttonDownload.png") no-repeat 0 0;
+   top: 0px;
+   left: 0px;
+}
+
+#buttonDownload:hover {
+   background:transparent url("images/buttonDownload_sel.png") no-repeat 0 0;
+}
+
+   
+#buttonDocumentation {
+   background:transparent url("images/buttonDocumentation.png") no-repeat 0 0;
+   top: 87px;
+   left: 0px;
+}
+
+#buttonDocumentation:hover {
+   background:transparent url("images/buttonDocumentation_sel.png") no-repeat 0 0;
+}
+
+#buttonSupport {
+   background:transparent url("images/buttonSupport.png") no-repeat 0 0;
+   top: 0px;
+   left: 280px;
+}
+
+#buttonSupport:hover {
+   background:transparent url("images/buttonSupport_sel.png") no-repeat 0 0;
+}
+
+#buttonInvolved {
+   background:transparent url("images/buttonInvolved.png") no-repeat 0 0;
+   top: 87px;
+   left: 280px;
+}
+
+#buttonInvolved:hover {
+   background:transparent url("images/buttonInvolved_sel.png") no-repeat 0 0;
+}
+
+#bigbuttons a * {
+	visibility: hidden;
+}
+
+#headlines {
+}
+
+#headlines ul li {
+	margin: 0 0;
+	list-style-type: none;
+	list-style-image: none;
+}
+
+	
+#headlines div.title {
+	display: inline;
+	margin-right: 0.5em;
+}
+
+#headlines div.meta {
+	display: inline;
+	color: #444444;
+	font-size: smaller;  
+}
+
+#headlines div.item {
+	display: block;
+}
\ No newline at end of file
diff --git a/support.php b/support.php
new file mode 100644
index 0000000..ae82c5b
--- /dev/null
+++ b/support.php
@@ -0,0 +1,48 @@
+<?php
+/*******************************************************************************
+ * Copyright (c) 2009, 2014 Eclipse Foundation and others.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*		Eclipse Foundation - Initial version
+*		Anthony Hunter - changes for EMF Query
+********************************************************************************/
+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());
+
+$pageTitle 		= "EMF Query Support";
+$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/emf-query/style.css"/>');
+
+$html  = <<<EOHTML
+<div id="midcolumn">
+<h2>$pageTitle</h2>
+<p>EMF Query support is provided by the community on a volunteer basis. You may use the following means to reach this community.</p>
+
+<h3>Frequently Asked Questions (FAQs)</h3>
+<p>For frequently asked questions and known pitfalls please refer to the <a href="http://wiki.eclipse.org/EMF-Query-FAQ">EMF Query FAQ</a>. You might also consider the
+the <a href="http://wiki.eclipse.org/EMF/FAQ">EMF FAQ</a> or the <a href="http://wiki.eclipse.org/index.php/Eclipse_FAQs">Eclipse FAQs</a>.
+</p>
+
+<h3>Forum & Newsgroup</h3>
+<p>Ask questions on the <a href="http://www.eclipse.org/forums/index.php?t=thread&frm_id=108">EMF Community Forum</a>
+or the <a href="news://news.eclipse.org/eclipse.tools.emf" target="_top">EMF newsgroup</a> (same contents).
+</p>
+
+<h3>Bugzilla</h3>
+<p>Report defects and ask for enhancements by creating a
+<a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=EMF">new bug entry</a> in the <a href="https://bugs.eclipse.org/bugs/">Eclipse Bugzilla</a>.
+</p>
+</div>
+EOHTML;
+
+# Generate the web page
+$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
+?>
\ No newline at end of file
