	END-USER LICENSE AGREEMENT
	for Babylon Trial Version and Babylon-Pro



BY CLICKING ON THE "YES" BUTTON, YOU ARE CONSENTING TO BE
BOUND BY AND ARE BECOMING A PARTY TO THIS AGREEMENT AND
THE RELATED AGREEMENTS AS SPECIFIED BELOW.  IF YOU DO
NOT AGREE TO ALL OF THE TERMS OF THIS AGREEMENT, CLICK
THE "NO" BUTTON.
============================================================

Except when stated otherwise below, the terms and conditions of this License
Agreement, apply to both Babylon Trial Version and Babylon-Pro.  In General,
the difference in installation between the software of Babylon Trial Version
and Babylon-Pro is that the Babylon-Pro is a paid License, and therefore
is advertising free and has full functionality.

Babylon Trial Version (the sponsored service) Specific Terms and Conditions

If you decided to install the Babylon Trial Version, the software you are about
to install contains several parts: one is the Babylon Trial Version software,
another is the "Ads on Software" software (the "Cydoor software") by Cydoor
Technologies Inc. ("Cydoor"). In addition, from time to time Babylon may require
that you install during the initial download one or more of the following bundled
software: SAVENOW by WhenU.com , and New.net client (the "Bundled Software").
As part of this license agreement, you are required to browse to these links
and to read the license agreement and privacy policy of every such Bundled
Software, and to agree to the terms and conditions specified therein.
SAVENOW license agreement: http://www.whenu.com/snlicence01.html
WhenU.com privacy policy: http://www.whenu.com/privacy.html
New.net terms of use: http://www.new.net/policies_software.tp
New.net privacy policy: http://www.new.net/policies_privacy.tp

The Cydoor software and the Bundled Software enable us to offer you this
Babylon Trial Version software free of charge, and therefore you cannot
install and use the Babylon Trial Version software without installing the
Cydoor software and the required Bundled Software. Using the Babylon Trial
software without the Cydoor software constitutes a breach of this Agreement.

The Cydoor software will continuously present to you alternating advertisements
while using the Babylon Tool. For this purpose, the Cydoor software may require
that you connect to the Internet from time to time, and in any event you are
required to connect to the Internet at least once every thirty days.


The use of the Cydoor software is subject to the Cydoor End-User License Agreement,
and to the privacy policy of Cydoor, both of which may be found at the bottom of
this document or through Cydoor's corporate offices. You confirm that you have
read, understood and agreed to the terms and conditions specified in the Cydoor
End-User License Agreement, and the privacy policy of Cydoor.

Although Babylon does its very best to ensure that the Cydoor software complies
with terms and conditions of use and privacy policy acceptable to Babylon, there
can be no assurance on behalf of Babylon that such terms are met by Cydoor.

Since the Cydoor software is not a Babylon product, Babylon takes no
responsibility and gives no warranty of any kind with respect to the Cydoor
software, its functioning, quality, merchantability or fitness for any use.
However, if a competent jurisdiction determines that Babylon is responsible
for the Cydoor software in any respect whatsoever, then Babylon's terms and
conditions for use of the Glossary Service, as specified here, shall apply
to the Cydoor software.

The Cydoor software and the Bundled Software may utilize certain user and
user-submitted information. For more information about the functioning of
the Cydoor software and the Bundled Software, and about the use of user and
user-submitted information by the Cydoor software and the Bundled Software,
see Cydoor's and the Bundled Software' Privacy Policy and End-User License
Agreement, and Babylon's privacy policy.

License Grant

Babylon.com Ltd. hereby grants to you a non-exclusive, time limited to
120 days only, revocable license to use Babylon's Trial Version software
in connection with the limited viewing of Babylon's proprietary "Babylon
Glossaries" system (the Babylon Trial Version, the Babylon-Pro and the
Babylon Glossaries system hereinafter collectively, "the Tool"), free of
charge in the case of the Babylon Trial Version, which is the sponsored
version of the Tool, and against the payment of the license fee in the
Babylon-Pro version of the Tool, so long as you comply with the terms and
conditions of this License Agreement.
Babylon Trial Version may be distributed freely on online services, bulletin
boards, or other electronic media as long as the files are distributed in
their entirety and are downloaded only by providing a link to files residing
on Babylon's servers.  This software may not be distributed on CD-ROM, disk,
or other physical media for a fee without the permission of Babylon.com Ltd.


Not a Corporate or Business License

This License is a single-user non-corporate license only. The use of the
Glossary Service by any business, organization, agency and the like, whether
for commercial, non-commercial or educational use requires a separate corporate
license. For prices and further information about a corporate license, please
contact corporate@babylon.com.

Special Terms and Restrictions of Use for the Babylon Trial Version

Babylon may, at its sole discretion, at any time, without prior notice and
temporarily or permanently:
(i) terminate, limit or deny the License
(ii) change, reduce or limit the functionality and features of the Tool;
(iii) create different priorities or grades for different users
(iv) introduce new features that may cause functionality change in earlier versions;
(v) condition the continuation of the License on your accepting Tool improvements,
corrections, adaptations, or changes, or accepting revised or new terms of License,
as will be made available on or through the Babylon website, Babylon shall notify
its users through the Tool, by e-mail or through the Babylon website of changes in
this License agreement.

Except for Babylon-Pro Users, who are entitled to VIP email customer service from
Babylon's support team, this license does not entitle you to any hard-copy
documentation, support or telephone assistance.

You may not use or rely on the Tool or the Babylon Website for applications or use
that may result in damage or for applications or use that contain information or
data you do not wish to be freely accessible and generally available to Internet
users.

Privacy Policy

You have read, understood and agree to Babylon's Privacy Statement applicable to
you, which is part of this Agreement, and is posted at:
http://www.babylon.com/aboutus/privacy.html



Compliance with Applicable Laws

You agree to comply with any applicable copyright, secrecy, defamation, decency,
privacy, export or other laws.  Babylon is not responsible and/or liable for any
information, including without limitation, the databases and user-posted website
material, submitted to the Babylon Website. Babylon may erase, remove, delete,
delay, jam or alter such information without prior notice, for functional or any
other reason.

Copyright, Confidentiality, Proprietary Information

This Agreement does not grant to you any rights to any patents, copyrights,
trade secrets, trademarks (registered or not) trade names, domain names or
any other proprietary material of Babylon. You agree not to reverse engineer,
modify, de-compile, disassemble, alter, duplicate, distribute, repackage, sell,
copy, create derivative works from or transfer the Glossary Service. You also
undertake not to remove or alter any trademark, logo, copyright, advertisement
or other proprietary notices, legends, or labels on or in the Glossary Service.

NO WARRANTY, Liability

YOU EXPRESSLY AGREE THAT USE OF THE TOOL IS AT YOUR SOLE
RISK. THE TOOL IS PROVIDED ON AN "AS IS, AS AVAILABLE"
BASIS.  BABYLON MAKES NO WARRANTIES, EXPRESSED OR IMPLIED,
INCLUDING, WITHOUT LIMITATION, THOSE OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE, WITH RESPECT TO THE
TOOL, INCLUDING BUT NOT LIMITED TO THE BABYLON SERVERS,
ANY BABYLON SERVICE, OR ANY INFORMATION POSTED BY USERS
ON THE BABYLON WEBSITE OR UPLOADED BY USERS TO THE TOOL.
BABYLON DOES NOT WARRANT, GUARANTEE OR MAKE ANY
REPRESENTATION REGARDING THE USE OR THE RESULTS OF THE
USE OF THE TOOL IN TERMS OF THE ACCURACY, RELIABILITY,
QUALITY, VALIDITY, STABILITY, COMPLETENESS, CURRENTNESS,
OR OTHERWISE OF ITS CONTENT OR PRODUCTS. THE USER ASSUMES
THE ENTIRE RISK AS TO THE RESULTS AND PERFORMANCE OF THE
TOOL AND SERVERS.

Babylon does not warrant or guarantee that the functions or
services performed by the Tool will be uninterrupted or
error-free or that defects in the Tool will be corrected.
By downloading the Tool you might be exposed to infection
by viruses, worms, Trojan horses or anything else manifesting
contaminating or destructive properties. It is your sole
responsibility to take steps to ensure that the Tool or
information, if contaminated or infected, will not damage
your system.

IN NO EVENT WILL BABYLON BE LIABLE TO YOU OR ANY OTHER
PARTY (i) FOR ANY DIRECT, INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS
INTERRUPTION, LOSS OF PROGRAMS OR INFORMATION, AND THE
LIKE), OR ANY OTHER DAMAGES ARISING IN ANY WAY OUT OF THE
AVAILABILITY, USE, RELIANCE ON, OR INABILITY TO USE THE
TOOL, OR ANY OTHER INFORMATION PROVIDED BY BABYLON OR ITS
USERS, EVEN IF BABYLON SHALL HAVE BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES, AND REGARDLESS OF THE FORM OF
ACTION, WHETHER IN CONTRACT, TORT, OR OTHERWISE; OR
(ii) FOR ANY CLAIM ATTRIBUTABLE TO ERRORS, OMISSIONS, OR
OTHER INACCURACIES IN, OR DESTRUCTIVE PROPERTIES OF ANY
INFORMATION. IN NO EVENT WILL BABYLON'S LIABILITY WITH
RESPECT TO THIS AGREEMENT EXCEED THE AMOUNT YOU PAID (IF
YOU PAID) TO BABYLON FOR THE TOOL.


General Terms

You agree that this agreement is not intended to confer, and does not confer, any
rightsor remedies upon any person other than the parties to this agreement. If any
part of this agreement is held invalid or unenforceable, that portion shall be
construed in a manner consistent with applicable law to reflect, as nearly as possible,
the original intentions of the parties, and the remaining portions shall remain in full
force and effect. Babylon may transfer, assign sublicense or pledge in any manner
whatsoever, any of its rights and obligations under this Agreement to a subsidiary,
affiliate, successor thereof, or to any third party whatsoever, without notifying you or
receiving your consent.	You shall not transfer, assign, sublicense or pledge in any
manner whatsoever, any of your rights or obligations under this agreement.

Governing Law and Jurisdiction

The laws of the State of Israel shall govern this Agreement. You expressly agree that
exclusive jurisdiction for any claim or dispute with Babylon arising out of or in
connection with this Agreement, including its validity, resides in the competent
courts of Tel Aviv, Israel. This section shall survive the termination of this
agreement.


Copyright ©1997-2001 Babylon.com Ltd. All Rights Reserved




		APPENDIX A - Cydoor Technologies Ltd.
		=================================

Since you're about to intall a Cydoor enabled application,
you must read and accept the following -

Cydoor Technologies Ltd. Software End User License Agreement

By clicking on the "Yes" button, you are consenting to be
bound by and are becoming a party to this agreement. If you
do not agree to all of the terms of this agreement, click
the "No" button.

1. Definitions:

(a) "Cydoor Software" means the software program covered by
    this Agreement, and all related updates supplied by
    Cydoor Technologies.

(b) "Cydoor Product" means the Cydoor Software and any
    related documentation, models and multimedia content
    (such as animation, sound and graphics), and all related
    updates supplied by Cydoor Technologies Ltd (follows:
    "Cydoor").

Upon acceptance of this agreement, Cydoor Technologies grants
to you a non-exclusive license to use the Software, provided
that you agree to the following:

2. License Grant:

You may install the Software on a hard disk or other storage
device; install and use the Software on a file server for use
on a network for the purposes of (i) permanent installation
onto hard disks or other storage devices or (ii) use of the
Software over such network; and make backup copies of the
Software.

You may make and distribute unlimited copies of the Software,
excluding copies for commercial distribution, as long as each
copy that you make and/or distribute is subject to this
Agreement, and the same copyright and other proprietary
notices pertaining to this Software that appear in the
Software. If you download the Software from the Internet or
similar on-line source, you must include the Cydoor
copyright notice for the Software with any on-line
distribution and on any media you distribute that includes
the Software.

This License does not entitle you hard-copy documentation,
support or telephone assistance. Cydoor reserves the right
at any time not to release a commercial release of the
Software or, if released, to alter prices, features,
licensing terms, or other characteristics of the commercial
release.

3. Restrictions:

You may not permit other individuals to use the Software
except under the terms listed above.  You may not copy the
Software other than as specified above.  You agree not to
modify, adapt, translate, reverse engineer, decompile,
disassemble or otherwise attempt to discover the source code
of the Software (except and solely to the extent an
applicable statute expressly and specifically prohibits such
restrictions). You may not modify, rent, lease, resell for
profit, distribute or create derivative works based upon the
Cydoor Product or any part thereof.  You may not grant a
security interest in, or otherwise transfer rights to the
Software.  You may not remove any proprietary notices or
labels on the Software.

4. Disclaimer of Warranty:

The software is provided on an "as is" basis, without
warranty of any kind from Cydoor, express or implied,
including without limitation warranty of merchantability,
free of defects, fitness for a particular purpose and
non-infringement of third party rights. The entire risk as to
the quality and performance of the software is borne by you.
Should the software prove defective in any respect, you and
not Cydoor or its suppliers assume the entire cost of any
service and repair.

This disclaimer of warranty constitutes an essential part of
the agreement. No use of the software is authorized hereunder
except under this disclaimer.

In no event will Cydoor be liable to you for consequential,
incidental, special or exemplary damages arising out of a
breach of this agreement or warranty or your use of the
software, including but not limited to lost profits or loss
of business, even if Cydoor has been apprised of the
likelihood of such damages occurring.

Cydoor shall have no obligation to you with respect to any
claim of infringement based upon your use of the software in
combination, operation or otherwise with the data or
materials not supplied by Cydoor.

5. Downloading Additional Software:

In the event that your computer lacks software necessary for
the Software to operate, a message will automatically be sent
by the Software to Cydoor that additional software is needed.
Cydoor will then send you the additional software required
for operation of the Software.  By accepting this Agreement,
you agree that the Software and any additional software
needed will be downloaded into your computer.

6. Termination:

This Agreement and the license granted hereunder will
terminate automatically if you fail to comply with the
limitations described herein. Upon termination, you must
destroy all copies of the Software and Documentation.

7. Privacy Act:

This Agreement is subject to the Israeli Privacy Act of 1981.
Cydoor shall neither attain nor use any of your identifying
characteristics. In addition, Cydoor will not obtain any
personal information that could identify you including your
name, picture or voice in order to match said personal
characteristics to the information in the registration form.
Nevertheless, by accepting this software, you hereby
authorize Cydoor to use the information in your
registration form when selecting advertisements for you.
Cydoor will use the information in the registration form
provided by you solely for the purpose of selecting which
commercials may, in Cydoor opinion, interest you most.

By downloading the Cydoor Product, you are confirming your
acceptance of the Software and agreeing to be bound by the
terms of this Agreement.

8. General:

This Agreement shall be governed by the laws of the State of
Israel. This Agreement contains the complete agreement
between the parties with respect to the license granted
hereunder and supercedes all prior or contemporaneous
agreements or understandings, whether oral or written.
This Agreement may be amended only by a writing signed by an
authorized officer of Cydoor.

This Agreement will not be governed by the United Nations
Convention on Contracts for the International Sale of Goods,
the application of which is expressly excluded.  You agree
that the Software will not be shipped, transferred or
exported into any country or used in any manner, directly or
indirectly, prohibited by the United States Export
Administration Act or any other export laws, restrictions or
regulations.

If any provision of this Agreement is held to be void and
unenforceable, it will not affect the validity of the balance
of the Agreement.  Such provision shall be reformed only to
the extent necessary to make it enforceable. This Agreement
shall be governed by Israeli law, excluding conflict of law
provisions (except to the extent applicable law, if any,
provides otherwise).

Manufacturer:
        Cydoor Technologies, 22 Maskit St Hertzelia, Israel.
        http://www.cydoor.com

Your acceptance of the foregoing agreement was indicated
during installation.
