<?php
/**
 * Copyright (c) 2020 Eclipse Foundation.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 * Eric Poirier (Eclipse Foundation) - Initial implementation
 *
 * SPDX-License-Identifier: EPL-2.0
 */
?>
<h1><?php print $pageTitle;?></h1>
<ol>
  <li><a href="#q_1">Why is the Eclipse Foundation moving to Europe?</a></li>
  <li><a href="#q_2">What is the status of the Eclipse Foundation&rsquo;s move to Europe?</a></li>
  <li><a href="#q_3">What does this move mean for Members of the Foundation?</a></li>
  <li><a href="#q_4">Are the fees for membership changing?</a></li>
  <li><a href="#q_5">What does this mean for my participation in working groups?</a></li>
  <li><a href="#q_6">Why are we changing from Solutions membership to Contributing membership? Are there other
    changes to the classes of membership?</a></li>
  <li><a href="#q_7">What does this move mean for Committers?</a></li>
  <li><a href="#q_8">Which agreements will be changing? And what agreements must I execute?</a></li>
  <li><a href="#q_9">Are there changes to any other agreements?</a></li>
  <li><a href="#q_11">When do these changes take effect, and what steps do I need to take?</a></li>
  <li><a href="#q_12">What are the major differences between the new Belgian Bylaws and the existing US Bylaws?</a></li>
  <li><a href="#q_13">Have the Bylaws and Membership Agreement for the existing US organization changed?&nbsp; And
    is there anything I have to do?</a></li>
  <li><a href="#q_14">What are the rights and benefits of membership with respect to governance that will change as
    a result of this restructuring?&nbsp; And do the rights of Committers change in any way?</a></li>
  <li><a href="#q_15">I am a Committer employed by a Member Company - do I have to do anything?</a></li>
  <li><a href="#q_16">I am a contributor to one or more Eclipse projects, do I have to do anything?</a></li>
  <li><a href="#q_17">I have questions not listed here, who do I contact?</a></li>
  <li><a href="#q_18">Has the address of the Eclipse Foundation changed?</a></li>
</ol>
<p id="q_1">
  <strong>Q. Why is the Eclipse Foundation moving to Europe?</strong>
</p>
<ol type="A">
  <li>
    <p>
      Moving the corporate governance of Eclipse Foundation to Europe will provide global
      stakeholders more choice for their strategic open source initiatives. We believe that more
      choice and greater diversity will be of benefit to both the global open source communities,
      and for the industries that rely upon and collaborate with them. The Eclipse Foundation
      aspires to be a truly global institution, now with a new European home.&nbsp;<br /> <br /> To
      an extent, this move is merely confirmation of the Foundation&rsquo;s current reality and
      global growth trajectory. The Eclipse Foundation is already the largest open source
      organization in Europe as measured in staff, projects, developers, and members. One hundred
      seventy members and over nine hundred committers are based in Europe and we have operated our
      subsidiary Eclipse Foundation Europe GmbH for seven years.&nbsp;<br /> <br /> By moving our
      legal residence from the United States to Europe, our goal is to create a global institution
      that builds on our existing membership base, active developer community, and strong
      institutional relationships, and leverages a competitive level playing field to enable the
      free flow of open software innovation throughout the entire world.
    </p>
  </li>
</ol>
<p id="q_2">
  <strong>Q. What is the status of the Eclipse Foundation&rsquo;s move to Europe?</strong>
</p>
<ol type="A">
  <li>
    <p>
      At the time of writing, all of the incorporation and related documents have been filed with
      the Belgian authorities, and we are waiting for the Royal Decree which will formally create
      our new entity, the Eclipse Foundation AISBL. This normally takes on the order of sixty days.<br />
      <br /> In parallel, the Board of Directors of the Eclipse Foundation, Inc. have approved a
      series of changes to the Bylaws and Membership Agreement of the existing US entity and we will
      be seeking the approval of the membership-at-large for those changes. (More details below.)<br />
      <br /> Once the new Belgian entity Eclipse Foundation AISBL is created and the approvals are
      finalized to the Eclipse Foundation, Inc.&rsquo;s Bylaws and Membership Agreement, all members
      will be required to update their membership agreement and related other
      agreements.&nbsp;&nbsp;
    </p>
  </li>
</ol>
<p id="q_3">
  <strong>Q. What does this move mean for Members of the Foundation?</strong>
</p>
<ol type="A">
  <li>
    <p>
      In terms of the day-to-day interactions with the Eclipse Foundation, nothing will change. The
      operations of our projects and working groups continue as is, and the IP Policy and Antitrust
      Policy of the new entity are identical to those of the US organization.<br /> <br /> The main
      difference is that you will soon be asked to join our new Belgian international nonprofit
      organization, and concurrently, to resign your membership in the existing US
      organization.&nbsp;
    </p>
  </li>
</ol>
<p id="q_4">
  <strong>Q. Are the fees for membership changing?</strong>
</p>
<ol type="A">
  <li>
    <p>
      As part of moving to Europe, we will be restating our membership dues effective October 1,
      2020 for both the Beligan-based Eclipse Foundation AISBL and the existing Eclipse Foundation,
      Inc. in euros while retaining the same numeric value, e.g. if you are currently paying $20,000
      the dues in the new organization will be 20.000&euro;. However, we do understand that this
      represents a dues increase, and to help mitigate that for all members who renew between
      October 1, 2020 and September 30, 2021 your euro-based membership fees will be discounted by
      10%. So, to continue this example, if your membership fee in 2020 was $20,000, your fee will
      be 18.000&euro; in 2021, and 20.000&euro; in 2022 and beyond.&nbsp;<br /> <br /> This modest
      fee increase is the first in almost 15 years - we hope that members appreciate the merit of
      stating all fees in Euros as we complete this transition.<br /> <br /> Note that working group
      fees are not changing as a result of the move, and will remain in USD.&nbsp; Each working
      group&rsquo;s Steering Committee, as part of its responsibilities, will evaluate whether they
      should change their fees to be stated in euros and/or to adjust the fees based on such a
      change.&nbsp; Should the working group choose to take this action, any change will be
      communicated in advance of enacting the change.<br /> <br /> If you are an individual
      Committer Member you will be asked to execute the new Belgian membership agreement. There
      remain no fees for Committer membership.
    </p>
  </li>
</ol>
<p id="q_5">
  <strong>Q. What does this mean for my participation in working groups?</strong>
</p>
<ol type="A">
  <li>
    <p>
      Existing working groups will remain under the current governance structures for the time
      being, and Members&rsquo; participation in existing working groups are not impacted by the
      move of the overall corporate governance to Europe.&nbsp; We will, however, be asking members
      to re-execute their Working Group Participation Agreements at the same time as they execute
      the new Membership Agreement.&nbsp;<br /> <br /> Existing working group fees are also not
      impacted directly by this corporate change, including that the membership fees will remain
      stated in USD.&nbsp;<br /> <br /> All members are eligible to participate in working
      groups.&nbsp; Going forward, new working groups will be created under Eclipse Foundation
      AISBL.&nbsp;<br /> <br /> Existing working groups that wish to move their governance to be
      European based may explore doing so beginning in 2021.&nbsp;&nbsp;
    </p>
  </li>
</ol>
<p id="q_6">
  <strong>Q. Why are we changing from Solutions membership to Contributing membership? Are there
    other changes to the classes of membership?</strong>
</p>
<ol type="A">
  <li>
    <p>
      We are changing the name of the Solutions membership level to Contributing membership to
      better reflect the current, diverse group of organizations that make up our membership base.
      These organizations participate and contribute to the development of the Eclipse ecosystem in
      many ways, including, but not limited to, leading and contributing to Eclipse Foundation
      projects, and offering products and services based on Eclipse technologies.<br /> <br /> The
      Strategic, Committer, and Associate membership classes all remain. For completeness, we have
      also eliminated the Strategic Consumer and Enterprise classes of membership.&nbsp; These have
      not been used for many years, and do not reflect how our members participate.
    </p>
  </li>
</ol>
<p id="q_7">
  <strong>Q. What does this move mean for Committers?</strong>
</p>
<ol type="A">
  <li>
    <p>
      In terms of the day-to-day interactions with the Eclipse Foundation, nothing will change. The
      operations of our projects and working groups continue as is, and the Eclipse Foundation
      Development Process, Eclipse Foundation Specification Process, and Eclipse Foundation IP
      Policy of the new entity are identical to the current one.<br /> <br /> The main difference is
      that your Committer Agreement will have to be updated to a new version with Eclipse Foundation
      AISBL.&nbsp;<br /> <br /> If you are an individual committer, you will soon be asked to
      execute a new Individual Committer Agreement.&nbsp;<br /> <br /> If you are an employee or a
      consultant of a member company who has a Member Committer and Contributor Agreement (MCCA)
      your employer will be asked to execute the new MCCA, and no actions will be required on your
      part.&nbsp;
    </p>
  </li>
</ol>
<p id="q_8">
  <strong>Q. Which agreements will be changing? And what agreements must I execute?</strong>
</p>
<ol type="A">
  <li>As a new organization, Eclipse Foundation AISBL will have new
    versions of all of our legal agreements. As part of the migration,
    we will be asking all members to join the new Belgian organization,
    Eclipse Foundation, AISBL. Draft versions of the new Bylaws and the
    Membership Agreement for the new Belgian Eclipse Foundation AISBL
    can be found here:
    <ul>
      <li><a href="documents/eclipse-foundation-aisbl-bylaws.pdf">Eclipse Foundation AISBL Bylaws</a></li>
      <li><a href="documents/eclipse-foundation-aisbl-membership-agreement.pdf">Eclipse Foundation AISBL Membership Agreement</a></li>
    </ul>
    We will asking each member to execute this new Eclipse
    Foundation AISBL Membership Agreement, beginning in October. In
    addition, we will be asking each member to execute versions of any
    other agreements you currently have with Eclipse Foundation,
    including those listed below. We will be sharing these new documents
    over the coming few weeks.
    <ul>
      <li>Member Committer and Contributor Agreement</li>
      <li>Individual Committer Agreement</li>
      <li>Working Group Participation Agreements</li>
    </ul>
  </li>
</ol>

<p id="q_9">
  <strong>Q. Are there changes to any other agreements?</strong>
</p>
<ol type="A">
  <li>Yes. In addition to the new agreements listed above for Eclipse Foundation AISBL, we are also changing the existing Bylaws
    and Membership Agreement of the Eclipse Foundation, Inc. that all members have already executed.
    This change is required as a result of aligning the existing US-based organization with the new
    Belgian organization. More details about these changes can be found at: <a href="/membership/vote2020/">Eclipse Bylaw and Membership Agreement Changes 2020</a>
    <br><br> After the creation of the Eclipse Foundation AISBL, the Eclipse Contributor Agreement
    (&ldquo;ECA&rdquo;) will be updated to reference our new Belgian legal entity. However, existing ECAs will
    continue to be effective.
  </li>
</ol>

<p id="q_11">
  <strong>Q. When do these changes take effect, and what steps do I need to take?&nbsp;</strong>
</p>
<ol type="A">
  <li>
    <p>
      Once the new Belgian based organization is created, expected in early-to-mid October, we will
      be reaching out to all members to engage with them in supporting this transition.&nbsp;
      Specifically, we will be asking members to re-execute each of the agreements listed above that
      your organization has executed previously.&nbsp; We will help you with this process by
      providing you copies of your existing agreements, and the new ones to be executed.<br /> <br />
      Concurrent with executing these new versions of the agreements, we will be asking you to
      execute a letter confirming the resignation of your membership in the existing US-based
      organization.&nbsp; This formality is required, as that entity will exist for some period of
      time, and we want to avoid having any organizations paying fees to both the current and the
      new foundations.&nbsp;&nbsp;
    </p>
  </li>
</ol>
<p id="q_12">
  <strong>Q. What are the major differences between the new Belgian Bylaws and the existing US
    Bylaws?</strong>
</p>
<ol type="A">
  <li>
    <p>
      There are a number of differences between the two bylaws.&nbsp; Of
      course, the most significant difference is they are based on
      different laws.&nbsp; That is, the new Bylaws are explicitly
      governed under Belgian law.&nbsp; Related, the Bylaws are
      officially defined in French, as is required by Belgian law.&nbsp;
      But the English translation may be relied upon for all matters,
      and all other documents including the membership agreement, etc.
      are all defined in English.<br /> <br /> The new Belgian bylaws,
      by law, have a few very distinctive differences relating to the
      rights and responsibilities of the membership at-large.&nbsp;
      Specifically, under Belgian law, the total group of members is
      referred to as the General Assembly, rather than the Membership
      At-Large. Also as defined in Belgian law, the General Assembly
      must approve the Foundation&rsquo;s annual budget, must select the
      Foundation&rsquo;s auditors, and approve the Foundation&rsquo;s
      audited financial statements.&nbsp; This is a change to our
      current rules, which leaves these decisions with the Board of
      Directors.&nbsp; As a result, we expect to hold a minimum of two
      General Assembly meetings annually.&nbsp;<br /> <br /> There are
      differences in the rights associated with Committer membership
      that we want to draw attention to.&nbsp; First, the thing that
      does not change is that our committers all have the ability to
      become Committer Members, and that our Committer Members continue
      to have Board representation based on exactly the same formula as
      today.&nbsp; This is significant, as over the years, this has
      proven to be invaluable to the health of our Foundation, and has
      led to the Board making much better decisions as a result of this
      committer representation.&nbsp; What is changing is that Committer
      members under the new Belgian bylaws do not have the right to vote
      in the General Assembly.&nbsp; As noted above, there are
      significantly more decisions that must be ratified by the General
      Assembly than under our existing rules, including approving the
      budget, appointing auditors, and approving the audited financial
      statements. Because we have significantly more Committer members
      than corporate members, their class of membership would be&nbsp;
      heavily weighted for these financial decisions at the General
      Assembly.&nbsp; This weighting was appropriate in our current
      bylaws, as the only matters brought before the membership at-large
      were related to changes to the Bylaws and membership
      agreement.&nbsp; But given the General Assembly of the Belgian
      organization explicitly approves significant financial matters,
      which generally are not of critical importance to our Committer
      community, it was felt these are matters better voted on by those
      companies that are contributing the funds.<br /> <br /> That the
      General Assembly votes on financial matters is a new
      &ldquo;feature&rdquo; for the Eclipse Foundation, and is based on
      the requirements of Belgian law. The net result of the change as
      compared to the current bylaws is that Committer Members lose
      their ability to directly approve future changes to the Bylaws or
      membership agreement of Eclipse Foundation AISBL. Approvals of
      such future changes will, however, be voted on by the elected
      directors representing the Committer Members on the Board.
      Committer Members are encouraged to participate in General
      Assembly meetings, and of course their representatives on the
      Board continue to actively participate and contribute.&nbsp;<br /> <br />
      There are minor differences in the governance structure at the
      Board level.&nbsp; As defined in Belgian law, nominations to Board
      committees must be made by Board members, and those committees
      must have directors report on their work, as opposed to the
      Executive Director doing it on their behalf.&nbsp; The role of
      Treasurer is also defined somewhat differently, with the Treasurer
      reporting directly to the Board&rsquo;s finance committee, as
      opposed to the Executive Director. &nbsp;<br /> <br /> We
      encourage all members to review the new Bylaws and to ask further
      questions related to the specifics of the bylaws.&nbsp;
    </p>
  </li>
</ol>
<p id="q_13">
  <strong>Q. Have the Bylaws and Membership Agreement for the existing US organization
    changed?&nbsp; And is there anything I have to do?&nbsp;</strong>
</p>
<ol type="A">
  <li>
    <p>
      Yes.&nbsp; In order to accommodate the transition, both the Bylaws and the Membership
      Agreement for the existing US organization are being modified.&nbsp; At a high level, the
      changes being made are to keep the two organizations in sync with respect to classes of
      membership, membership fees, etc., and to ensure the governance of the US organization aligns
      with the new Belgian organization.&nbsp;<br /> <br /> Of note, a new class of membership
      called Eclipse Foundation member has been introduced into the bylaws of the existing US
      organization. By doing this, the new Belgian foundation will be an active member of the US
      organization, and will help participate in its governance by having seats on its Board. We
      would describe this as an &ldquo;implementation detail&rdquo;, and would be happy to provide
      more detail should you have questions about it.<br /> <br /> A more specific list of
      additional modifications will be sent to all members in a separate document.&nbsp;<br /> <br />
      Once again, we will stress that we need to enact these changes prior to standing up the
      Belgian organization, and ask all members to participate in the upcoming vote to enact the
      changes.&nbsp;&nbsp;&nbsp;
    </p>
  </li>
</ol>
<p id="q_14">
  <strong>Q. What are the rights and benefits of membership with respect to governance that will
    change as a result of this restructuring?&nbsp; And do the rights of Committers change in any
    way?&nbsp;</strong>
</p>
<ol type="A">
  <li>
    <p>
      As a result of the corporate restructuring, the changes to the rights, benefits, and
      obligations of membership with respect to governance will be as described in the tables
      below.&nbsp; Note that any changes introduced under the new Belgian bylaws are bolded.<br /> <br />
      As explained in a separate question above regarding changes included in the Belgian bylaws,
      the rights of Committer members is changing somewhat.&nbsp; Committer members are non-voting
      members of the General Assembly, similar to Associate members. But unlike Associate Members,
      Committer Members do retain representation on the Board of Directors using exactly the same
      formula as today.&nbsp; This means that only Strategic and Contributing members are voting
      members of the General Assembly.&nbsp; This change was introduced in recognition of we have
      significantly more Committer members than corporate members, that would have weighted their
      class of membership for decisions at the General Assembly.&nbsp; Given the General Assembly
      has ultimate responsibility for the fiduciary decisions of the Foundation, it was felt these
      are matters better voted on by those companies that are contributing funds.&nbsp; Committer
      Members are still encouraged to participate in General Assembly meetings, and of course their
      representatives on the Board continue to actively participate and contribute.&nbsp;&nbsp;
    </p>
  </li>
</ol>
<p>
  <strong>Strategic Member - Rights, Benefits and Obligations</strong>
</p>
<div>
  <table class="table table-stripped">
    <thead>
      <tr>
        <th>
          <p>Benefit</p>
        </th>
        <th>
          <p>Eclipse Foundation, Inc.</p>
        </th>
        <th>
          <p>Eclipse Foundation AISBL</p>
        </th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>
          <p>Representation on Board of Directors</p>
        </td>
        <td>
          <p>Appointed</p>
        </td>
        <td>
          <p>Appointed</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Vote on Foundation budget, audited financial statements, etc.</p>
        </td>
        <td>
          <p>Board representative has vote</p>
        </td>
        <td>
          <p>Board representative has vote</p>
          <p>Member has vote in General Assembly</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Vote on changes to IP Policy, Eclipse Development Process, etc.</p>
        </td>
        <td>
          <p>Board representative has vote</p>
        </td>
        <td>
          <p>Board representative has vote</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Vote on changes to the Bylaws and membership agreement</p>
        </td>
        <td>
          <p>Board representative has vote&nbsp;</p>
        </td>
        <td>
          <p>Board representative has vote</p>
          <p>Member has vote in General Assembly</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Participate in meetings of the membership at-large / general assembly</p>
        </td>
        <td>
          <p>Voting participation in meetings</p>
        </td>
        <td>
          <p>Voting participation in meetings</p>
        </td>
      </tr>
    </tbody>
  </table>
</div>
<p>
  <strong>Contributing Member - Rights, Benefits and Obligations</strong>
</p>
<div>
  <table class="table table-stripped">
    <thead>
      <tr>
        <th>
          <p>Benefit</p>
        </th>
        <th>
          <p>Eclipse Foundation, Inc.</p>
        </th>
        <th>
          <p>Eclipse Foundation AISBL</p>
        </th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>
          <p>Representation on Board of Directors</p>
        </td>
        <td>
          <p>Elected representation</p>
        </td>
        <td>
          <p>Elected representation</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Vote on Foundation budget, audited financial statements, etc.</p>
        </td>
        <td>
          <p>Elected representative on Board has vote</p>
        </td>
        <td>
          <p>Elected representative on Board has vote</p>
          <p>Member has vote in General Assembly</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Vote on changes to IP Policy, Eclipse Development Process, etc.</p>
        </td>
        <td>
          <p>Elected representative on Board has vote</p>
        </td>
        <td>
          <p>
            Elected representative on Board has vote<br /> &nbsp;
          </p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Vote on changes to the Bylaws and membership agreement</p>
        </td>
        <td>
          <p>Elected representative on Board has vote</p>
        </td>
        <td>
          <p>
            Elected representative on Board has vote<br /> Member has vote in General Assembly
          </p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Participate in meetings of the membership at-large / general assembly</p>
        </td>
        <td>
          <p>Voting participation in meetings</p>
        </td>
        <td>
          <p>Voting participation in meetings</p>
        </td>
      </tr>
    </tbody>
  </table>
</div>
<p>
  <strong>Committer Member - Rights, Benefits and Obligations</strong>
</p>
<div>
  <table class="table table-stripped">
    <thead>
      <tr>
        <th>
          <p>Benefit</p>
        </th>
        <th>
          <p>Eclipse Foundation, Inc.</p>
        </th>
        <th>
          <p>Eclipse Foundation AISBL</p>
        </th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>
          <p>Representation on Board of Directors</p>
        </td>
        <td>
          <p>Elected representation</p>
        </td>
        <td>
          <p>Elected representation</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Vote on Foundation budget, audited financial statements, etc.</p>
        </td>
        <td>
          <p>Elected representative on Board has vote</p>
        </td>
        <td>
          <p>Elected representative on Board has vote</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Vote on changes to IP Policy, Eclipse Development Process, etc.</p>
        </td>
        <td>
          <p>Elected representative on Board has vote</p>
        </td>
        <td>
          <p>Elected representative on Board has vote</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Vote on changes to the Bylaws and membership agreement</p>
        </td>
        <td>
          <p>Elected representative on Board has vote</p>
        </td>
        <td>
          <p>Elected representative on Board has vote</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Participate in meetings of the membership at-large / general assembly</p>
        </td>
        <td>
          <p>Voting participation in meetings</p>
        </td>
        <td>
          <p>Non-voting participation in meetings</p>
        </td>
      </tr>
    </tbody>
  </table>
</div>
<p>
  <strong>Associate Member - Rights, Benefits and Obligations</strong>
</p>
<div>
  <table class="table table-stripped">
    <thead>
      <tr>
        <th>
          <p>Benefit</p>
        </th>
        <th>
          <p>Eclipse Foundation, Inc.</p>
        </th>
        <th>
          <p>Eclipse Foundation AISBL</p>
        </th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>
          <p>Representation on Board of Directors</p>
        </td>
        <td>
          <p>None</p>
        </td>
        <td>
          <p>None</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Vote on Foundation budget, audited financial statements, etc.</p>
        </td>
        <td>
          <p>None</p>
        </td>
        <td>
          <p>None</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Vote on changes to IP Policy, Eclipse Development Process, etc.</p>
        </td>
        <td>
          <p>None</p>
        </td>
        <td>
          <p>None</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Vote on changes to the Bylaws and membership agreement</p>
        </td>
        <td>
          <p>None&nbsp;</p>
        </td>
        <td>
          <p>None</p>
        </td>
      </tr>
      <tr>
        <td>
          <p>Participate in meetings of the membership at-large / general assembly</p>
        </td>
        <td>
          <p>Non-voting participation in meetings</p>
        </td>
        <td>
          <p>Non-voting participation in meetings</p>
        </td>
      </tr>
    </tbody>
  </table>
</div>
<p id="q_15">
  <strong>Q. I am a Committer employed by a Member Company - do I have to do anything?</strong>
</p>
<ol type="A">
  <li>
    <p>
      That depends.&nbsp; For Committers whose employer has executed the Member Committer and
      Contributor Agreement, then there is nothing for you to do. &nbsp; But if you have previously
      executed an Individual Committer Agreement with the Eclipse Foundation as an individual, then
      you will need to re-execute the new version of that agreement.<br /> <br /> In either case,
      there is no action for you to take at this time.&nbsp; Rather, the Foundation will contact
      either you or your employer to execute the new agreements with the Belgian organization.&nbsp;
    </p>
  </li>
</ol>
<p id="q_16">
  <strong>Q. I am a contributor to one or more Eclipse projects, do I have to do anything?</strong>
</p>
<ol type="A">
  <li>
    <p>No, you do not. The Eclipse Contributor Agreement (&ldquo;ECA&rdquo;) will be
      updated to reference our new Belgian legal entity. However, your existing ECA will continue to
      be effective.&nbsp;</p>
  </li>
</ol>
<p id="q_17">
  <strong>Q. I have questions not listed here, who do I contact?</strong>
</p>
<ol type="A">
  <li>
    <p>
      Please send an email to <a href="mailto:eclipse-europe@eclipse.org">eclipse-europe@eclipse.org</a>.
    </p>
  </li>
</ol>
<p id="q_18">
  <strong>Q. Has the address of the Eclipse Foundation changed?</strong>
</p>
<ol type="A">
  <li>
    <p>There will be a new corporate address of the new Eclipse Foundation AISBL listed on
      the agreements. However, the mailing address for sending documents and agreements to the
      Foundation remains 2934 Baseline Road, Suite 202, Ottawa, ON Canada.&nbsp;</p>
  </li>
</ol>
