<?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("../_projectCommon.php");    # All on the same line to unclutter the user's desktop'

$pageTitle 		= "Marketplace Listings";
$pageKeywords	= "";
$pageAuthor		= "";

ob_start();
?>
<style type="text/css">
h2 {
border-bottom: solid
}
h3 {
border-bottom: thin dotted
}
</style>

    <div id="maincontent">
	<div id="midcolumn">
        <h1><big>Eclipse Marketplace Listings</big></h1>

        <h2><b><big>Goals of this Program</big></b></h2>
        <p>The main goal of this program is to offer a key channel for members to promote their products
        to the millions of developers who use Eclipse IDE's every day.  Starting with the Helios release
        in June, 2010, a "Marketplace Client" is included with all packages downloaded from Eclipse.org
        that allows developers to browse and install Eclipse Plugins.</p>

        <p>Eclipse Foundation Solutions, Enterprise and Strategic Members listings
        may have their Eclipse Marketplace listings appear in the
        Eclipse Marketplace Client Wizard.
        Eclipse Solutions, Enterprise and Strategic members will also have their results appear first ("Featured") in
        any search results from the Marketplace Client web interface.</p>

        <p>For more information, please visit:
        <ul>
        <li><a href="http://marketplace.eclipse.org/">Eclipse Marketplace</a></li>
        <li><a href="http://marketplace.eclipse.org/content/marketplace-client-content-inclusion-policy/">Marketplace Client Content Inclusion Policy</a></li>
        <li><a href="http://marketplace.eclipse.org/quickstart">Eclipse Marketplace Quickstart for Listing your Products</a></li>
        </ul>

        </p>




  </div></div>
<?php
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage(NULL, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
