<?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 		= "Solutions Membership Dues";


ob_start();
?>
    <div id="maincontent">
	<div id="midcolumn">

<h1><?=$pageTitle;?></h1>

<h2>Renaming - "Add-In Provider" now known as "Solutions Members"</h2>
<p>
As of July 24, 2008, by virtue of a super-majority approval of the Eclipse Membership At Large, the membership class formerly known
as "Add-In Provider" is now known as "Solutions Member".  The rights and obligations of this membership class remain the same,
the name change more accurately reflects the nature of the members in this class as providing world class <em>solutions</em>
in the Eclipse Ecosystem.
</p>

<h2>New Dues - Effective for renewals on or after July 1, 2008</h2>
<p>The Eclipse Foundation Board of Directors unanimously approved a new dues structure which
updates "Exhibit C" of the <a href="../../org/documents/Eclipse%20MEMBERSHIP%20AGMT%202008_07_24%20Final.pdf">Eclipse Foundation Membership Agreement</a>.
The new dues are effective for all new
Solutions Members, and renewals (of "Add-In Providers", now known as "Solutions Members"), occurring on or after July 1, 2008.  The new dues
are tiered, based on corporate revenue (all values USD):
<ul>
<li>(NEW IN 2010) Annual Corporate Revenue Less Than $1 million, and less than 10 employees and contractors - Fee: 1,500</li>
<li>Annual Corporate Revenue Less Than $10 million - Fee: 5,000</li>
<li>Annual Corporate Revenue Less Than $50 million - Fee: 7,500</li>
<li>Annual Corporate Revenue Less Than $100 million - Fee: 10,000</li>
<li>Annual Corporate Revenue Less Than $250 million - Fee: 15,000</li>
<li>Annual Corporate Revenue Greater Than $250 million - Fee: 20,000</li>
</ul>
</p>
<h2>Associate Membership Now Expanded</h2>
<p>
Any organization may now become an Associate member with dues of $5,000 per year. Associate membership is still
free for Media, Academia, Government, Not-for-profits and other organization types as defined by the board.
This means that <b>any</b> organization who wants to show financial support for the Eclipse Foundation
without the benefits and rights of a voting membership class can do so by becoming an Associate member.
</p>

<h2>FAQ</h2>
<p><b>Why did Membership dues change?</b>  There has not be a change in membership dues in the almost five years
since the Eclipse Foundation was launched.  After consultation with the membership and surveying other industry
consortia, we found an approach that we believe is fair:
<ul>
<li>Membership dues for organizations with less than $10M in revenue will not change.  This represents more than 40% of our current Solutions Members.</li>
<li>Any member with revenue more than $10M can still maintain dues at the current rate by becoming an Associate Member.</li>
<li>Strategic Members have already unanimously approved a motion that increased their own dues by raising the minimum
Strategic Developer Dues by $25,000.  This went into effect April, 2008.</li>
</ul>
</p>

<p><b>Does this mean I have to report my corporate Revenue to the Eclipse Foundation?</b>
No.  Similar to other trade associations and consortia, you only need to indicate which revenue tier your organization belongs to.  Your membership
dues are confidential to the Eclipse Foundation for invoice related purposes only and will not be shared or published.
</p>

<p><b>What reporting period should be used to calculate our membership dues?</b>
Most organizations will fit comfortably within a revenue tier such that worrying about reporting periods
will be largely irrelevant.  However, if your organization is on the border line between membership tiers, please
use the most recently <b>available</b> annual reporting period that you have available to you.  For example,
if your Membership renewal date is December 15, 2008 and your Annual Reporting period ends December 31 - do not wait, simply
use your 2007 annual report to determine your membership dues.
</p>

<p><b>My organization reports revenue in a currency other than USD, what exchange rate should we use?</b>
Most organizations will fit comfortably within a revenue tier such that small fractions of an exchange rate
will be largely irrelevant.  However, if your organization is on the border line between membership tiers, please
use the exchange rate as of the last day of business in your reporting period.  If your organization does not
use an officially recognized exchange rate for reporting purposes, please use <a href="http://www.xe.com/ict/">xe.com</a>
for your rate calculation.
</p>


<p><b>Can I just use the revenue for my division/region/business unit/geography to determine dues?</b>
To be fair and consistent, the Membership Agreement and the Bylaws of the Eclipse Foundation are explicit that the membership dues of
any corporation must be based on the total revenue of the entire organization.
</p>

<p><b>What is the process to downgrade to associate member, and what are the main differences in benefits?</b>
If you wish to drop down to Associate from Solutions Member (previously known as "Add-In Provider") you will
have to complete an "Exhibit C Amendment" document - this will be sent to you upon request.  A full description
of all membership types and the key benefits can be found on the <a href="../become_a_member/membershipTypes.php"> membership
types page</a>.  The key differences between Solutions Membership and Associate Membership are:
<ul>
<li>Solutions Members are able to vote for board representation, engage with their board representatives for board representation, and vote on changes
to the Eclipse Foundation Membership Agreement and Bylaws.</li>
<li>Solutions Members receieve significant discounts towards sponsorship of Eclipse Foundation run
events such as EclipseCon and have priority access to a number of Eclipse Foundation
<a href="/membership/become_a_member/benefits.php?member=yes">services and offerings</a>.</li>
<li>Solutions membership signals  customers and suppliers that your organization is an <b>active</b> participant in the Eclipse Ecosystem and
take its growth, support and evolution seriously.</li>
</ul>
</p>

<p><b>Who do I contact with any further questions?</b>
Please contact <a href="mailto:membership@eclipse.org">membership at eclipse.org</a>.
</p>

<br>

</div> <!-- midcolumn -->
</div> <!-- maincontent -->

<?php
	# Paste your HTML content between the EOHTML markers!
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage(NULL, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
