LIMITED USE SOFTWARE LICENSE AGREEMENT

This Limited Use Software License Agreement (this "Agreement") is a legal agreement between you, the end-user, and Id Software, Inc. ("Id Software") and Activision Publishing, Inc.  ("Activision").  BY CONTINUING THE INSTALLATION OF THE FULL VERSION GAME PROGRAM ENTITLED RETURN to CASTLE WOLFENSTEIN (THE "SOFTWARE"), BY LOADING OR RUNNING THESOFTWARE, OR BY PLACING OR COPYING THE SOFTWARE ONTO YOUR COMPUTER HARD DRIVE, COMPUTER RAM OR OTHER STORAGE, YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS AGREEMENT.

1.	Grant of License.  Subject to the terms and provisions of this Agreement and so long as you fully comply at all times with this Agreement, Id Software grants to you the non-exclusive and limited right to use the Software only in executable or object code form.  The term "Software" includes all elements of the Software, including, without limitation, data files andscreen displays.  You are not receiving any ownership or proprietary right, title or interest in or to the Software or the copyrights, trademarks, or other rights related thereto.  For purposes of the first sentence of this section, "use" means loading the Software into RAM and/or onto computer hard drive, as well as installation of the Software on a hard disk or other storage device, and means the uses permitted in sections 2. and 4. herein below.  You agree that the Software will not be downloaded, shipped, transferred, exported or re-exported into any country in violation of the U.S. Export Administration Act (or any other law governing such matters) by you or anyone at your direction and that you will not utilize and will not authorize anyone to utilize, in any other manner, the Software in violation of any applicable law.  The Software shall not be downloaded or otherwise exported or re-exported into (or to a national or resident of) any country to which the U.S. has embargoed goods or to anyone or into any country who/which are prohibited, by applicable law, from receiving such property.  In exercising your limited rights hereunder, you shall comply, at all times, with all applicable laws, regulations, ordinances and statutes.  Id Software reserves all rights not granted in this Agreement, including, without limitation, all rights to Id Software's trademarks.

2.	Permitted New Creations.  Subject to the terms and provisions of this Agreement and so long as you fully comply at all times with this Agreement, Id Software grants to you the non-exclusive and limited right to create for the Software (except any Software code) your own modifications (the "New Creations") which shall operate only with the Software (but not any demo,test or other version of the Software).  You may include within the New Creations certain texturesand other images (the "Software Images") from the Software.  You shall not create any New Creations which infringe against any third party right or which are libelous, defamatory, obscene,false, misleading, or otherwise illegal or unlawful. You agree that the New Creations will not be downloaded, shipped, transferred, exported or re-exported into any country in violation of the U.S.Export Administration Act (or any other law governing such matters) by you or anyone at your direction and that you will not utilize and will not authorize anyone to utilize, in any other manner, theNew Creations in violation of any applicable law.  The New Creations shall not be downloaded orotherwise exported or re-exported into (or to a national or resident of) any country to which the U.S. has embargoed goods or to anyone or into any country who/which are prohibited, by applicable law, from receiving such property.  You shall not rent, sell, lease, lend, offer on a pay-per-play basis orotherwise commercially exploit or commercially distribute the New Creations.  You are only permitted to distribute, without any cost or charge, the New Creations to other end-users so long as such distribution is not infringing against any third party right and is not otherwise illegal or unlawful.  As noted below, in the event you commit any breach of this Agreement, your license and this Agreement shall automatically terminate, without notice.

3.	Prohibitions with Regard to the Software. You, whether directly or indirectly, shall not do any of the following acts:

a.	rent the Software;
b.	sell the Software;
c.	lease or lend the Software;
d.	offer the Software on a pay-per-play basis;
e.	distribute the Software by any means, including, but not limited to, Internet or other	electronic distribution, direct mail, retail, mail order or other means;
f.	in any other manner and through any medium whatsoever commercially exploit the Software	or use the Software for any commercial purpose;
g.	disassemble, reverse engineer, decompile, modify (except as permitted by section 2.	hereinabove) or alter the Software;
h.	translate the Software;
i.	reproduce or copy the Software (except as permitted by section 4. herein below);
j.	publicly display the Software;
k.	prepare or develop derivative works based upon the Software; or
l.	remove or alter any notices or other markings or legends, such as trademark or copyright notices,	affixed on or within the Software or the Printed Materials (as defined in section 5. below).

4.	Permitted Copying.  You may make only the following copies of the Software: (i) you may copy the Software from the CD ROM, which you purchase, onto your computer hard drive; (ii) youmay copy the Software from your computer hard drive into your computer RAM; and (iii) you maymake one (1) "back up" or archival copy of the Software on one (1) hard disk.

5.	Intellectual Property Rights.  Certain printed materials (the "Printed Materials") accompany the Software. The Software, the Printed Materials and all copyrights, trademarks and all other conceivable intellectual property rights related to the Software and the Printed Materials are ownedby Id Software and are protected by United States copyright laws, international treaty provisions and all applicable law, such as the Lanham Act.  You must treat the Software and the Printed Materials like any other copyrighted material, as required by 17 U.S.C., §101 et seq. and other applicable law. You agree to use your best efforts to see that any user of the Software licensed hereunder, the Printed Materials or the New Creations complies with this Agreement.  You agree that you are receiving a copy of the Software and the Printed Materials by limited license only and not by sale and that the "first sale" doctrine of 17 U.S.C. §109 does not apply to your receipt or use of the Software or the Printed Materials. This section shall survive the cancellation or termination of this Agreement.

6.	NO ID SOFTWARE WARRANTIES.  ID SOFTWARE DISCLAIMS ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND ANY WARRANTY OF NON-INFRINGEMENT, WITH RESPECT TO THE SOFTWARE, THE PRINTED MATERIALS, THE SOFTWARE IMAGES AND OTHERWISE.  THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY.  ID SOFTWARE DOES NOT WARRANT THAT THE SOFTWARE OR THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE OR THAT THE SOFTWARE WILL MEET YOUR SPECIFIC OR SPECIAL REQUIREMENTS.  ADDITIONAL STATEMENTS, WHETHER ORAL OR WRITTEN, DO NOT CONSTITUTE WARRANTIES BY IDSOFTWARE AND SHOULD NOT BE RELIED UPON.  This section shall survive the cancellation or termination of this Agreement.

7.	Limited Activision Warranty.  Activision warrants to the original consumer purchaser of the Software that the recording medium on which the Software is recorded will be free from defects inmaterial and workmanship for ninety (90) days from the date of purchase.  If the recording medium is found defective within ninety (90) days of original purchase, Activision agrees to replace, free of charge, any Software discovered to be defective within such period upon its receipt of the Software, postage paid, with the proof of the date of purchase, as long as the Software is still being manufactured by Activision.  In the event that the Software is no longer available, Activision retains the right to substitute a similar game program of equal or greater value.  This warranty is limited to the recording medium containing the Software as originally provided by Activision and is not applicable to normal wear and tear. This warranty shall not be applicable and shall be void if the defect has arisen through abuse, mistreatment or neglect.

EXCEPT AS SET FORTH ABOVE, THIS WARRANTY IS IN LIEU OF ALL OTHER WARRANTIES, WHETHER ORAL OR WRITTEN, EXPRESS OR IMPLIED, INCLUDING ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT, AND NO OTHER REPRESENTATIONS OR CLAIMS OF ANY KIND SHALL BE BINDING ON OR OBLIGATE ACTIVISION.

When returning the Software for warranty replacement, the original Software disks must be sent only in protective packaging and include: (1) photocopy of your dated sales receipt; (2) your name and return address typed or clearly printed; (3) a brief note describing the defect, the problem(s) you are encountering and the system on which you are running the Software; and (4) if you are returning the Software after the 90-day warranty period, but within one year after the date of purchase, please include check or money order for $10 U.S. ($19 AUD for Australia, or £10.00 for Europe) currency per CD or floppy disk replacement.  Note:  Certified mail recommended.

In the U.S. send to:

Warranty Replacements
Activision, Inc.
P.O. Box 67713
Los Angeles, CA 90067

In Europe send to:

Warranty Replacements
Activision
Parliament House
St. Laurence Way
Slough, Berkshire SL1 2BW
United Kingdom

Disk Replacement:  +44 (0) 8705 143 525

In Australia and Asia Pacific territories send to:

Warranty Replacements
Activision
Century Plaza
41 Rawson Street
Epping, NSW 2121
Australia

8.	Governing Law, Venue, Indemnity and Liability Limitation.  This Agreement shall beconstrued in accordance with and governed by the applicable laws of the State of Texas and applicable United States federal law.  Except as set forth below, exclusive venue for all litigation regarding this Agreement shall be in Dallas County, Texas and you agree to submit to the jurisdiction of the federal and state courts in Dallas County, Texas for any such litigation. Exclusive venue for alllitigation involving Activision, but not involving Id Software, with regard to this Agreement shall be in Los Angeles County, California and you agree to submit to the jurisdiction of the courts in LosAngeles, California for any such litigation.  You hereby agree to indemnify, defend and hold harmless Id Software and Activision and Id Software's and Activision's respective officers, employees, directors, agents, licensees (excluding you), sub-licensees (excluding you), successors and assigns from and against all losses, lawsuits, damages, causes of action and claims relating to and/or arisingfrom the New Creations or the distribution or other use of the New Creations or relating to and/orarising from your breach of this Agreement.  You agree that your unauthorized use of the Software Images, the Printed Materials, or the Software, or any part thereof, may immediately and irreparably damage Id Software such that Id Software could not be adequately compensated solely by amonetary award, and in such event, at Id Software's option, that Id Software shall be entitled to an injunctive order, in addition to all other available remedies including a monetary award, to prohibit such unauthorized use without the necessity of Id Software posting bond or other security.  IN ANY CASE, ID SOFTWARE, ACTIVISION, AND ID SOFTWARE'S AND ACTIVISION'S RESPECTIVE OFFICERS, EMPLOYEES, DIRECTORS, SHAREHOLDERS, REPRESENTATIVES, AGENTS, LICENSEES (EXCLUDING YOU), SUBLICENSEES (EXCLUSING YOU), SUCCESSORS AND ASSIGNS SHALL NOT BE LIABLE FOR LOSS OF DATA, LOSS OF PROFITS, LOST SAVINGS, SPECIAL, INCIDENTAL, CONSEQUENTIAL, INDIRECT OR PUNITIVE DAMAGES OR ANY OTHERDAMAGES ARISING FROM ANY ALLEGED CLAIM FOR BREACH OF WARRANTY, BREACH OFCONTRACT, NEGLIGENCE, STRICT PRODUCT LIABILITY, OR OTHER LEGAL THEORY EVEN IF ID SOFTWARE, ACTIVISION OR THEIR RESPECTIVE AGENT(S) HAVE BEEN ADVISED OF THE POSSIBILITY OF ANY SUCH DAMAGES, OR EVEN IF SUCH DAMAGES ARE FORESEEABLE, OR LIABLE FOR ANY CLAIM BY ANY OTHER PARTY.  Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so the above limitation or exclusion may not apply to you.  This section shall survive the cancellation or termination of this Agreement.

9.	U.S. Government Restricted Rights.  To the extent applicable, the United States Government shall only have those rights to use the Software and the Printed Materials as expressly stated and expressly limited and restricted in this Agreement, as provided in 48 C.F.R. §§ 227.7201through 227.7204, inclusive.

10.	General Provisions.  Neither this Agreement nor any part or portion hereof shall be assigned or sublicensed by you.  Id Software and Activision each may assign its respective rights under this Agreement in the assigning party's sole discretion.  Should any provision of this Agreement be held tobe void, invalid, unenforceable or illegal by a court of competent jurisdiction, the validity and enforceability of the other provisions shall not be affected thereby.  If any provision is determined to be unenforceable by a court of competent jurisdiction, you agree to a modification of such provision to provide for enforcement of the provision's intent, to the extent permitted by applicable law.  Failure of Id Software or Activision to enforce any provision of this Agreement shall not constitute or beconstrued as a waiver of such provision or of the right to enforce such provision.  IMMEDIATELYUPON YOUR FAILURE TO COMPLY WITH OR BREACH OF ANY TERM OR PROVISION OF THIS AGREEMENT, YOUR LICENSE GRANTED HEREIN AND THIS AGREEMENT SHALL AUTOMATICALLY TERMINATE, WITHOUT NOTICE, AND ID SOFTWARE AND ACTIVISION MAY PURSUE ALL RELIEF AND REMEDIES AGAINST YOU, WHICH ARE AVAILABLE UNDER APPLICABLE LAW AND/OR THIS AGREEMENT.  Immediately upon termination of this Agreement, any and all rights you are granted hereunder shall terminate, you shall have no right to use the Software, the Printed Materials or the New Creations, in any manner, and you shall immediately destroy all copies of the Software, the Printed Materials and the New Creations in your possession, custody or control, and all rights granted hereunder shall revert, without notice, to and be vested in Id Software.

YOU ACKNOWLEDGE THAT YOU HAVE READ THIS AGREEMENT, YOU UNDERSTAND THIS AGREEMENT, AND UNDERSTAND THAT BY CONTINUING THE INSTALLATION OF THE SOFTWARE, BY LOADING OR RUNNING THE SOFTWARE, OR BY PLACING OR COPYING THE SOFTWARE ONTO YOUR COMPUTER HARD DRIVE OR RAM, YOU AGREE TO BE BOUND BYTHE TERMS AND CONDITIONS OF THIS AGREEMENT.  YOU FURTHER AGREE THAT, EXCEPTFOR WRITTEN SEPARATE AGREEMENTS, IF ANY, BETWEEN ID SOFTWARE, ACTIVISION AND YOU, THIS AGREEMENT IS A COMPLETE AND EXCLUSIVE STATEMENT OF THE RIGHTS AND LIABILITIES OF THE PARTIES HERETO, RELATING TO THE SUBJECT MATTER HEREOF.  THIS AGREEMENT SUPERSEDES ALL PRIOR ORAL AGREEMENTS, PROPOSALS OR UNDERSTANDINGS, AND ANY OTHER COMMUNICATIONS, IF ANY, BETWEEN ID SOFTWARE, ACTIVISION AND YOU RELATING TO THE SUBJECT MATTER OF THIS AGREEMENT.
