diff --git a/scripts/globals.php b/scripts/globals.php
new file mode 100644
index 0000000..ab9fd12
--- /dev/null
+++ b/scripts/globals.php
@@ -0,0 +1,10 @@
+<?php
+	define("ENTERPRISE", 1);
+	define("EMBEDDED", 2);
+	define("RCP", 3);
+	define("RIA", 4);
+	define("AF", 5);
+	define("IDE", 6);
+	define("TOOL", 7);
+	define("EUROPA", 8);
+?>
diff --git a/scripts/projectsTable.php b/scripts/projectsTable.php
new file mode 100644
index 0000000..646a3f4
--- /dev/null
+++ b/scripts/projectsTable.php
@@ -0,0 +1,181 @@
+
+
+<? 
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/smartconnection.class.php");
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/projects/projectList.class.php");
+require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/projects/projectCategoryList.class.php");
+require_once($_SERVER['DOCUMENT_ROOT'] . "/home/categories/scripts/globals.php");
+
+function projectTable($pillarType)
+{
+
+	ob_start();
+	?> 
+	<table cellspacing=0 class="projectTable">
+		<tr>
+			<td colspan=5 class="tableHeaderTitle">Eclipse Europa Projects</td>
+		</tr>
+		<tr>
+			<td class="tableHeader" width="35%">Project Name</td>
+			<td class="tableHeader" width="10%" align="center">Homepage</td>
+			<td class="tableHeader" width="12%" align="center">Version</td>
+			<td class="tableHeader" width="13%" align="center">New And Noteworthy</td>
+			<td class="tableHeader" width="10%" align="center">Download</td>
+		</tr>
+
+		<tr class="tableRow">
+			<td>AspectJ Development Tools</td>
+			<td align="center"><a href="http://www.eclipse.org/ajdt/"><img src="images/homepage.gif"></a></td>
+			<td align="center">1.5</td>
+			<td align="center"><a href="http://www.eclipse.org/ajdt/newfeatures/"><img src="images/newsgroups.gif"></a></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>Business Intelligence and Reporting Tools</td>
+			<td align="center"><a href="http://www.eclipse.org/birt/"><img src="images/homepage.gif"></a></td>
+			<td align="center">2.2.0</td>
+			<td align="center">http://www.eclipse.org/birt/phoenix/project/notable2.2M6.php</td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>Buckminster</td>
+			<td align="center"><a href="http://www.eclipse.org/buckminster/"><img src="images/homepage.gif"></a></td>
+			<td align="center">0.1.0</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>CDT</td>
+			<td align="center"><a href="http://www.eclipse.org/cdt"><img src="images/homepage.gif"></a></td>
+			<td align="center">4.0</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>CORONA</td>
+			<td align="center"><a href="http://www.eclipse.org/corona/"><img src="images/homepage.gif"></a></td>
+			<td align="center">1.0</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>Data Tools Platform</td>
+			<td align="center"><a href="http://www.eclipse.org/datatools/"><img src="images/homepage.gif"></a></td>
+			<td align="center">1.5</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>Device Software Development Platform - Device Debugging</td>
+			<td align="center"><a href="http://www.eclipse.org/dsdp/dd/"><img src="images/homepage.gif"></a></td>
+			<td align="center">0.9</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>Device Software Development Platform - Target Management</td>
+			<td align="center"><a href="http://www.eclipse.org/dsdp/tm/"><img src="images/homepage.gif"></a></td>
+			<td align="center">2.0</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>Dynamic Languages Toolkit</td>
+			<td align="center"><a href="http://www.eclipse.org/dltk/"><img src="images/homepage.gif"></a></td>
+			<td align="center">1.0</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>Dash (Eclipse Monkey)</td>
+			<td align="center"><a href="http://www.eclipse.org/dash/"><img src="images/homepage.gif"></a></td>
+			<td align="center">1.0</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>Eclipse Platform </td>
+			<td align="center"><a href="http://www.eclipse.org/eclipse/"><img src="images/homepage.gif"></a></td>
+			<td align="center">3.3</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>		
+		<tr class="tableRow">
+			<td>Eclipse Modeling Framework</td>
+			<td align="center"><a href="http://www.eclipse.org/emf/"><img src="images/homepage.gif"></a></td>
+			<td align="center">2.3</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>Eclipse Modeling Framework Technologies</td>
+			<td align="center"><a href="http://eclipse.org/emft/"><img src="images/homepage.gif"></a></td>
+			<td align="center">1.1</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>Eclipse Modeling Framework Technologies - Jet</td>
+			<td align="center"><a href="http://eclipse.org/emft/"><img src="images/homepage.gif"></a></td>
+			<td align="center"></td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>
+		<tr class="tableRow">
+			<td>Graphical Editing Framework</td>
+			<td align="center"><a href="http://www.eclipse.org/gef"><img src="images/homepage.gif"></a></td>
+			<td align="center">3.3</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>	
+		<tr class="tableRow">
+			<td>Graphical Modeling Framework</td>
+			<td align="center"><a href="http://www.eclipse.org/gmf/"><img src="images/homepage.gif"></a></td>
+			<td align="center">2.0</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>	
+		<tr class="tableRow">
+			<td>Model Development Tools</td>
+			<td align="center"><a href="http://www.eclipse.org/modeling/mdt/"><img src="images/homepage.gif"></a></td>
+			<td align="center">1.0</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>	
+		<tr class="tableRow">
+			<td>Mylar</td>
+			<td align="center"><a href="http://www.eclipse.org/mylar/"><img src="images/homepage.gif"></a></td>
+			<td align="center">2.0</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>	
+		<tr class="tableRow">
+			<td>SOA Tools Platform</td>
+			<td align="center"><a href="http://www.eclipse.org/stp/"><img src="images/homepage.gif"></a></td>
+			<td align="center"></td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>	
+		<tr class="tableRow">
+			<td>Test and Performance Tools Platform</td>
+			<td align="center"><a href="http://www.eclipse.org/tptp/"><img src="images/homepage.gif"></a></td>
+			<td align="center">4.4</td>
+			<td align="center"></td>
+			<td align="center"><a href="" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>	
+		<tr class="tableRow">
+			<td>Web Tools Platform</td>
+			<td align="center"><a href=""><img src="images/homepage.gif"></a></td>
+			<td align="center">2.0</td>
+			<td align="center"></td>
+			<td align="center"><a href="http://www.eclipse.org/webtools/" Title="Download"><img src="images/download.gif"></a></td>
+		</tr>	
+				
+								
+	</table>
+	<?
+	$html = ob_get_contents();
+	ob_end_clean();
+	
+	return $html;
+} ?>
diff --git a/scripts/whatsnew.php b/scripts/whatsnew.php
new file mode 100644
index 0000000..ec4901b
--- /dev/null
+++ b/scripts/whatsnew.php
@@ -0,0 +1,422 @@
+<?php  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/xml_sax_parsing.php");
+
+function & get_news($file_name) {
+	$news_file = $file_name . ".rss";
+	$file_name = $_SERVER['DOCUMENT_ROOT'] . $news_file;
+	$handler = new RssFileHandler();
+	parse_xml_file($file_name, $handler);
+	return $handler->feed;
+}
+
+function rss_to_html($file_name) {
+	$rss = get_news($file_name);
+	ob_start();
+	?>
+	<div class="news box">
+	<?
+	foreach ($rss->channel as $channel) 
+	{
+		?>
+			<div class="boxHeader">Related News</div>
+					<div class="boxBody">
+						<ul class="newsItems">
+		<?
+		$count = 3;
+		foreach ($channel->item as $item) 
+		{
+			if ($count == 0) break;
+			$now = strtotime("now");
+			$then = $item->pubDate;
+			$stringDate = date("M d, Y H:i:s e I", $now);
+			$difference = $now - $then; 
+			switch ($difference) {
+				case $difference > 86400:
+					$ago = floor($difference / 84600);
+					$ago = "posted $ago days ago";
+					break;
+				case $difference > 3600;
+					$ago = floor($difference / 3600);
+					$ago = "posted $ago hours ago";
+					break;
+				case $difference > 0:
+					$ago = floor($difference / 60);
+					$ago = "posted $ago minutes ago";
+					break;
+					
+			}
+
+					?>
+							<li><div class="newsItem"><a href="<?=$item->link;?>"><span class="newsTitle"><?=$item->title;?></span></a></div>
+								<div class="newsDate"><?=$ago;?></div>
+							</li>
+					<?
+					$count--;
+
+			
+		}
+		?>
+						</ul>
+						<div class="newsMore"><a href="submitnews.php">Submit Content</a> - <a href="whatsnew.php">Read More</a></div>	
+					</div>
+		<?
+	}		
+	?>
+		</div>
+	<?
+	$html = ob_get_contents();
+	ob_end_clean();
+	return $html;
+}
+
+function rss_to_html_verbose($file_name, $count=3) {
+	$rss = get_news($file_name);
+	ob_start();
+	foreach ($rss->channel as $channel) 
+	{
+		?>
+			<h3><a href="/community/whatsnew.rss"><img src="images/rss.gif" align="right" title="RSS Feed" alt="[RSS]" /></a><?=$channel->title;?></h3><br/>
+			<ul>
+		<?
+		foreach ($channel->item as $item) 
+		{
+			if ($count == 0) break;
+			$then = $item->pubDate;
+			$stringDate = date("M d, Y", $then);
+			?>
+				<li>
+				<a href="<?=$item->link;?>"><?=$item->title;?></a> posted <?=$stringDate;?><br/><br/><?=$item->description;?><br/><br/>
+				</li>
+			<?
+			$count--;
+		}
+		?>
+			</ul><?
+	}		
+	$html = ob_get_contents();
+	ob_end_clean();
+	return $html;
+}
+
+function rss_to_sideitem_html($file_name, $count=3, $category="") {
+	$rss = get_news($file_name);
+	ob_start();
+	foreach ($rss->channel as $channel) 
+	{
+		?>
+			<h6><a href="/community/whatsnew.rss"><img src="/images/rss2.gif" align="right" title="RSS Feed" alt="[RSS]" /></a><?=ucfirst($category);?> News</h6>
+			<ul>
+		<?
+		foreach ($channel->item as $item) 
+		{
+			if ($count == 0) break;
+			$then = $item->pubDate;
+			$now = strtotime("now");
+			$stringDate = date("M d, Y H:i:s e I", $now);
+			$difference = $now - $then; 
+			switch ($difference) {
+				case $difference > 86400:
+					$ago = floor($difference / 84600);
+					$ago = "posted $ago days ago";
+					break;
+				case $difference > 3600;
+					$ago = floor($difference / 3600);
+					$ago = "posted $ago hours ago";
+					break;
+				case $difference > 0:
+					$ago = floor($difference / 60);
+					$ago = "posted $ago minutes ago";
+					break;
+					
+			}
+			foreach ($item->categories as $categoryIterator)
+			{				
+					if ($categoryIterator == $category)
+					{
+						?><li><a href="<?=$item->link;?>"><?=$item->title;?></a> <?=$ago;?></li><?
+						$count--;
+					}
+			}
+		}
+		?>
+			</ul>
+		<?
+	}		
+	$html = ob_get_contents();
+	ob_end_clean();
+	return $html;
+}
+
+/* Instances of the Feed class represent an RSS file.
+ */
+class Feed {
+	var $channel;
+	
+	function Feed() {
+		$this->channel = array();
+	}
+	
+	function add_channel(&$channel) {
+		array_push($this->channel, $channel);
+	}
+}
+
+/*
+ * Instances of the Channel class represent a channel in the RSS file.
+ */
+class Channel {
+	var $title;
+	var $link;
+	var $description;
+	var $image;	
+	var $item;
+	
+	function Channel() {
+		$this->item = array();
+	}
+	
+	function add_item(&$item) {
+		array_push($this->item, $item);
+	}
+}
+
+/*
+ * Instances of the Image class represent an image (presumably) on an
+ * image. We don't currently use this information.
+ */
+class Image {
+	var $url;
+	var $title;
+	var $link;
+}
+
+/*
+ * Instances of the Item class represent an item in a channel.
+ */
+class Item {
+	var $title;
+	var $link;
+	var $description;
+	var $pubDate;
+	var $categories = array();
+}
+
+
+/*
+ * The rest of the code in this file is concerned with reading XML
+ * into an object format. Once we update to PHP 5, we can get rid of
+ * all of this junk and just use the simpleXML apis.
+ */
+
+/*
+ * The RssFileHandler represents the file being parsed. It does
+ * only one thing: provides a handler for the contents of the
+ * the file.
+ */
+class RssFileHandler extends XmlFileHandler {
+	var $feed;
+	/*
+	 * This method returns the root handler for a RSS file
+	 * The root handler essentially represents the file itself
+	 * rather than any actual element in the file. The returned
+	 * element handler will deal with any elements that may occur
+	 * in the root of the XML file.
+	 */
+	function get_root_element_handler() {
+		$retVal = new RssRootHandler();
+		return $retVal;
+	}
+
+	function end_root_element_handler($handler) {
+		$this->feed = & $handler->feed;
+	}
+}
+
+/*
+ * The RssRootHandler class takes care of the root element 
+ * in the file. This handler doesn't correspond to any particular
+ * element that may occur in the XML file. It represents the file
+ * itself and must deal with any elements that occur at the root
+ * level in that file.
+ */
+class RssRootHandler extends XmlElementHandler {
+	var $feed;
+
+	/*
+	 * This method handles the <rss>...</rss> element.
+	 */
+	function & get_rss_handler($attributes) {
+		$retVal = new RssHandler();
+		return $retVal;
+	}
+
+	function end_rss_handler($handler) {
+		$this->feed = & $handler->feed;
+	}
+}
+
+/*
+ * The FeedHandler class takes care of the root element in the file.
+ */
+class RssHandler extends XmlElementHandler {
+	var $feed;
+	
+	function RssHandler() {
+		$this->feed = new Feed();
+	}
+	
+	/*
+	 * This method handles the <channel>...</channel> element.
+	 */
+	function & get_channel_handler($attributes) {
+		$retVal = new ChannelHandler();
+		return $retVal;
+	}
+
+	function end_channel_handler($handler) {
+		$this->feed->add_channel($handler->channel);
+	}
+}
+
+class ChannelHandler extends XmlElementHandler {
+	var $channel;
+	
+	function ChannelHandler() {
+		$this->channel = new Channel();
+	}
+	
+	/*
+	 * This method handles the <title>...</title> element.
+	 */
+	function & get_title_handler($attributes) {
+		$retVal = new SimplePropertyHandler($this->channel, "title");
+		return $retVal;
+	}
+	/*
+	 * This method handles the <link>...</link> element.
+	 */
+	function & get_link_handler($attributes) {
+		$retVal = new SimplePropertyHandler($this->channel, "link");
+		return $retVal;
+	}
+	/*
+	 * This method handles the <description>...</description> element.
+	 */
+	function & get_description_handler($attributes) {
+		$retVal = new SimplePropertyHandler($this->channel, "description");
+		return $retVal;
+	}
+	
+	/*
+	 * This method handles the <title>...</title> element.
+	 */
+	function & get_item_handler($attributes) {
+		$retVal = new ItemHandler();
+		return $retVal;
+	}
+	
+	function end_item_handler($handler) {
+		$this->channel->add_item($handler->item);
+	}
+	
+	/*
+	 * This method handles the <image>...</image> element.
+	 */
+	function & get_image_handler($attributes) {
+		$retVal = new ImageHandler();
+		return $retVal;
+	}
+	
+	function end_image_handler($handler) {
+		$this->channel->image = $handler->image;
+	}
+}
+
+class ItemHandler extends XmlElementHandler {
+	var $item;
+	
+	function ItemHandler() {
+		$this->item = new Item();
+	}
+	
+	/*
+	 * This method handles the <title>...</title> element.
+	 */
+	function & get_title_handler($attributes) {
+		$retVal = new SimplePropertyHandler($this->item, "title");
+		return $retVal;
+	}
+	/*
+	 * This method handles the <link>...</link> element.
+	 */
+	function & get_link_handler($attributes) {
+		$retVal = new SimplePropertyHandler($this->item, "link");
+		return $retVal;
+	}
+	/*
+	 * This method handles the <description>...</description> element.
+	 */
+	function & get_description_handler($attributes) {
+		$retVal = new SimplePropertyHandler($this->item, "description"); 
+		return $retVal;
+	}
+	/*
+	 * This method handles the <category>...</category> element.
+	 */
+	function & get_category_handler($attributes) {
+		$retVal = new SimpleTextHandler();
+		return $retVal;
+	}	
+	
+	function end_category_handler(& $handler) {
+		array_push($this->item->categories, $handler->text);	
+	}
+	
+	/*
+	 * This method handles the <pubDate>...</pubDate> element.
+	 */
+	function & get_pubdate_handler($attributes) {
+		$retVal = new SimpleTextHandler();
+		return $retVal;
+	}
+	
+	function end_pubdate_handler($handler) {
+		$value = trim($handler->text);
+		if (strlen($value)>0) {
+			$this->item->pubDate = strtotime($value);
+		}
+	}
+}
+
+class ImageHandler extends XmlElementHandler {
+	var $image;
+	
+	function ImageHander() {
+		$this->image = new Image();
+	}	
+		
+	/*
+	 * This method handles the <title>...</title> element.
+	 */
+	function & get_title_handler($attributes) {
+		$retVal = new SimplePropertyHandler($this->image, "title");
+		return $retVal;
+	}
+	/*
+	 * This method handles the <url>...</url> element.
+	 */
+	function & get_url_handler($attributes) {
+		$retVal = new SimplePropertyHandler($this->image, "url");
+		return $retVal;
+	}
+	/*
+	 * This method handles the <link>...</link> element.
+	 */
+	function & get_link_handler($attributes) {
+		$retVal = new SimplePropertyHandler($this->image, "link");
+		return $retVal;
+	}
+}
+
+
+
+?>
\ No newline at end of file
diff --git a/scripts/whatsnew.rss b/scripts/whatsnew.rss
new file mode 100644
index 0000000..95930b9
--- /dev/null
+++ b/scripts/whatsnew.rss
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+ <rss version="2.0">
+  <channel>
+    <title>News</title>
+    <link>http://eclipse.org</link>
+    <description>News, articles about Eclipse</description>
+    <image>
+      <url>http://eclipse.org/images/EclipseBannerPic.jpg</url>
+      <title>eclipse.org</title>
+      <link>http://eclipse.org</link>
+    </image>
+  	<item>
+		<title>New RCP Case Study: Adobe Chooses Eclipse for Key Product Component</title>
+		<link><![CDATA[http://www.eclipse.org/community/rcp.php]]></link>
+		<description><![CDATA[<div class="newsQuote">Selecting Eclipse as the platform for the Version Cue?s new architecture was an easy decision for the Version Cue team. Members of the Version Cue development team already had expertise in Eclipse, and they liked what they saw.</div>]]></description>
+		<pubDate>Wed, 12 Jul 2006 10:43:00 EDT</pubDate>
+	</item>
+    <item>
+		<title><![CDATA[New Commercial RCP App : Actuate BIRT Report Designer]]></title>
+		<link><![CDATA[http://www.eclipse.org/community/rcpcp.php]]></link>
+		<description><![CDATA[]]></description>
+		<pubDate>Mon, 10 Jul 2006 13:21:05 EDT</pubDate> 
+	</item>
+    <item>
+		<title><![CDATA[New Commercial RCP App : DeltaLearn Advanced Editor]]></title>
+		<link><![CDATA[http://www.eclipse.org/community/rcpcp.php]]></link>
+		<description><![CDATA[]]></description>
+		<pubDate>Thu, 06 Jul 2006 14:09:05 EDT</pubDate> 
+	</item>
+	<item>
+		<title>New RCP Case Study: Refractions has the World Covered with Eclipse</title>
+		<link>http://www.eclipse.org/community/rcp.php</link>
+		<description><![CDATA[<div class="newsQuote">Refractions Research of British Columbia, Canada built the Userfriendly Desktop Internet GIS (uDig) system to fill these gaps, providing a powerful, extensible and net-aware geospatial application toolkit. uDig allows users to quickly and easily integrate the various parts that make up a customized and robust GIS system.</div>]]></description>
+		<pubDate>Wed, 28 Jun 2006 14:10:00 EDT</pubDate>
+	</item>
+	<item>
+		<title>Eclipse Summit Europe 2006 (Esslingen, Germany)</title>
+		<link>http://www.eclipsecon.org/summiteurope2006/</link>
+		<description>
+			<![CDATA[The Eclipse Foundation is pleased to announce Eclipse Summit Europe, the inaugural European conference for the Eclipse community. The two day event will be held in Esslingen, Germany on October 11-12. The entire Eclipse community is invited to participate in an Eclipse membership meeting and six different technical symposia.]]>!
+		</description>
+		<pubDate>Tue, 27 Jun 2006 12:00:00 EDT</pubDate>
+	</item>
+	<item>
+		<title>Community Section Launched</title>
+		<link>http://www.eclipse.org/community</link>
+		<description>
+			<![CDATA[Welcome to the new community section of eclipse.org. If you have any news you think is suitable for this area please use the Submit Content link below.
+			]]>
+		</description>
+		<pubDate>Wed, 21 Jun 2006 11:30:00 EDT</pubDate>
+	</item>	  	
+  </channel>
+</rss>
\ No newline at end of file
