   =====================================================================
   ==  DO NOT PANIC!  This is a draft for discussion purposes only.   ==
   ==  It has not yet been approved. It does not yet apply to any     ==
   ==  software distributed by the Apache Software Foundation.        ==
   ==                                                                 ==
   ==  This would be signed by the big paranoid corporations.         ==
   ==================================+==================================


                      The Apache Software Foundation
               Corporate Contributor License Agreement ("Agreement")
                      http://www.apache.org/licenses/


   Thank you for your interest in The Apache Software Foundation (the
   "Foundation"). In order to clarify the intellectual property license
   granted with Contributions from any person or entity, the Foundation
   must have a Contributor License Agreement (CLA) on file that has been
   signed by each Contributor, indicating agreement to the license terms
   below. This license is for your protection as a Contributor as well
   as the protection of the Foundation and its users; it does not change
   your rights to use your own Contributions for any other purpose.

   This version of the Agreement allows an entity (the "Corporation") to
   authorize Contributions submitted by its designated employees to the
   Foundation and to grant copyright and patent licenses thereto.

   If you have not already done so, please complete and send an original
   signed Agreement to The Apache Software Foundation, 1901 Munsey Drive,
   Forest Hill, MD 21050-2747, U.S.A. If necessary, you may send it by
   facsimile to the Foundation at +1-919-573-9199. Please read this
   document carefully before signing and keep a copy for your records.


   Corporation name:    ________________________________________________

   Corporation address: ________________________________________________

                        ________________________________________________

                        ________________________________________________

   Point of Contact:    ________________________________________________

          E-Mail:       ________________________________________________

          Telephone:    _____________________ Fax: _____________________


   You accept and agree to the following terms and conditions for Your
   present and future Contributions submitted to the Foundation. In
   return, the Foundation shall not use Your Contributions in a way that
   is contrary to the public benefit or inconsistent with its nonprofit
   status and bylaws in effect at the time of the Contribution. Except
   for the license granted herein to the Foundation and recipients of
   software distributed by the Foundation, You reserve all right, title,
   and interest in and to Your Contributions.

   1. Definitions.

      "You" (or "Your") shall mean the copyright owner or legal entity
      authorized by the copyright owner that is making this Agreement
      with the Foundation. For legal entities, the entity making a
      Contribution and all other entities that control, are controlled by,
      or are under common control with that entity are considered to be a
      single Contributor. For the purposes of this definition, "control"
      means (i) the power, direct or indirect, to cause the direction or
      management of such entity, whether by contract or otherwise, or
      (ii) ownership of fifty percent (50%) or more of the outstanding
      shares, or (iii) beneficial ownership of such entity.

      "Contribution" shall mean any original work of authorship, including
      any modifications or additions to an existing work, that is intentionally
      submitted by You to the Foundation for inclusion in, or
      documentation of, any of the products owned or managed by the
      Foundation (the "Work"). For the purposes of this definition,
      "submitted" means any form of electronic, verbal, or written
      communication sent to the Foundation or its representatives,
      including but not limited to communication on electronic mailing
      lists, source code control systems, and issue tracking systems
      that are managed by, or on behalf of, the Foundation for the
      purpose of discussing and improving the Work, but excluding
      communication that is conspicuously marked or otherwise designated
      in writing by You as "Not a Contribution."

   2. Grant of Copyright License. Subject to the terms and conditions
      of this Agreement, You hereby grant to the Foundation and to
      recipients of software distributed by the Foundation a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare derivative works of,
      publicly display, publicly perform, sublicense, and distribute
      Your Contributions and such derivative works.

   3. Grant of Patent License. Subject to the terms and conditions of
      this Agreement, You hereby grant to the Foundation and to recipients
      of software distributed by the Foundation a perpetual, worldwide,
      non-exclusive, no-charge, royalty-free, irrevocable (except as
      stated in this section) patent license to make, have made, use,
      offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by You that are necessarily infringed by Your Contribution(s)
      alone or by combination of Your Contribution(s) with the Work to
      which such Contribution(s) were submitted. If any entity institutes
      patent litigation against You or any other entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that your
      Contribution, or the Work to which you have contributed, constitutes
      direct or contributory patent infringement, then any patent licenses
      granted to that entity under this Agreement for that Contribution or
      Work shall terminate as of the date such litigation is filed.

   4. You represent that You are legally entitled to grant the above
      license. You represent further that each employee of the
      Corporation designated on Schedule A below (or in a subsequent
      written modification to that Schedule) is authorized to submit
      Contributions to the designated Work(s)on behalf
      of the Corporation.

   5. You represent that each of Your Contributions is Your original
      creation (see section 7 for submissions on behalf of others).

   6. You are not expected to provide support for Your Contributions,
      except to the extent You desire to provide support. You may provide
      support for free, for a fee, or not at all. Unless required by
      applicable law or agreed to in writing, You provide Your
      Contributions on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
      OF ANY KIND, either express or implied, including, without
      limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT,
      MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.

   7. Should You wish to submit work that is not Your original creation,
      You may submit it to the Foundation separately from any
      Contribution, identifying the complete details of its source and
      of any license or other restriction (including, but not limited
      to, related patents, trademarks, and license agreements) of which
      you are personally aware, and conspicuously marking the work as
      "Submitted on behalf of a third-party: [named here]".

   8. It is your responsibility to notify the Foundation when any change
      is required to the list of designated employees authorized to submit
      Contributions on behalf of the Corporation, or to the Corporation's
      Point of Contact with the Foundation.



   Please sign: __________________________________ Date: _______________

   Title:       __________________________________

   Corporation: __________________________________


Schedule A

   [initial list of designated employees]

