PCA15 version 2.0

		   APPGATE NETWORK SECURITY AB  ("APPGATE")

		     MINDTERM END-USER LICENSE AGREEMENT
			   (LIMITED COMMERCIAL USE)


PLEASE REVIEW THE FOLLOWING TERMS AND CONDITIONS PRIOR TO ACCESSING,
DOWNLOADING AND/OR OTHERWISE USING ANY OF THE LICENSED PRODUCTS, AS HEREIN
AFTER DEFINED.

THE USE OF THE LICENSED PRODUCTS AS WELL AS ANY UPDATES THERETO IS SUBJECT TO
THE TERMS AND CONDITIONS OF THE THIS LICENSE AGREEMENT (THE "AGREEMENT"). BY
OPENING THE RELEVANT SOFTWARE PACKAGE, BY SELECTING THE [AGREED AND/OR ACCEPT]
BUTTON, DOWNLOADING AND/OR OTHERWISE USING THE SOFTWARE OR ANY PORTION
THEREOF, LICENSEE (THE FIRM, COMPANY OR OTHER PERSON HAVING RECEIVED THE
LICENSED SOFTWARE PURSUANT TO AN ORDER ON THE APPGATE WEB SITE OR OTHERWISE)
ARE AGREEING TO THE BOUND BY THE TERMS AND CONDITIONS OF THE AGREEMENT AND ARE
ENTERING INTO THE AGREEMENT WITH APPGATE NETWORK SECURITY AB ("LICENSOR" or
"APPGATE").


1.	DEFINITIONS

	As used in this Agreement, the following terms shall have the
	following meanings:

1.1	"Designated Use" means the uses described in Section 2.3.

1.2	"Documentation" means the materials and documents relevant to the
	Licensed Products and provided by AppGate

1.3	"Event of Default" means any event specified in Section 7.1.

1.4	"License" means the license to use the Licensed Products as defined in
        Section 2.1.

1.5	"Licensed Products" means the software product MindTerm in object code
	form only. (Use of source code is subject to the conditions set forth
	in the MindTerm Public Source license agreement.)

1.7	"Usage, Use or Used" includes the act of transferring, transmitting,
	compiling, executing, interpreting, processing or storing the Licensed
	Products through the use of computer equipment, or transferring,
	transmitting, compiling, executing, interpreting, processing or
	storing any data or information using the Licensed Products; and/or
	displaying any portion of the Licensed Products or data or information
	in connection with any of these activities.


2.	GRANT OF LICENSE

2.1	Nonexclusive License

	Subject to Licensee's compliance with the terms and conditions of this
	Agreement Licensee is hereby granted a nonexclusive, non-transferable,
	non assignable and royalty-free license to Use the Licensed Products
	for purposes of the Designated Use; provided, however, that this
	Agreement does not grant to Licensee any title or right of ownership
	in or to the Licensed Products.

2.2	Right to Utilize the Documentation

	Subject to the term and conditions of this Agreement, AppGate hereby
	grants to Licensee, and Licensee hereby accepts from AppGate, a
	nonexclusive, non-transferable, non assignable and royalty-free right
	to utilize the Documentation in connection with the Designated Use of
	the Licensed Products; provided, however, that this Agreement does not
	grant to Licensee any title or right of ownership in or to the
	Documentation. Licensee shall not copy any Documentation, but may
	obtain additional copies from AppGate for the applicable charges
	specified by AppGate from time to time.

2.3	Use

	The Licensed Products may be Used only for Licensee's own internal
	computing requirements in accordance with the terms and conditions set
	forth herein and strictly limited to the number of users as defined
	here. The Licensed Products are free to use by Licensor in any
	organization, commercial or non-commercial, according to this License
	Agreement for up to, but not exceeding, 100 (one hundred) distinct
	users. Any other use requires a Commercial License Agreement which can
	be obtained by purchasing the Licensed Products from AppGate.

	Licensors with a Commercial License agreement can subscribe to
	Maintenance and Support services to periodically receive updated
	versions of the Licensed Products, get access to support services
	(web, e-mail and telephone) and receive updated signed versions of the
	MindTerm applet. These services are not available under this limited
	Agreement.

	Licensee is allowed to use the MindTerm source code according to the
	MindTerm Public Source license agreement. Licensee is allowed to use
	any derivative works of the Licensed Products for its own internal
	computing requirements according to the terms and conditions of this
	Agreement.

3.	TERM OF LICENSE

	The License granted hereunder shall commence upon Licensee's
	acceptance of the terms and conditions herein contained and shall
	continue in effect unless terminated earlier pursuant hereto.


4.      NO COPYING AND RESTRICTED USE

4.1	Restricted Use

	Licensee shall not Use the Licensed Products or the Documentation for
	any purposes other than the Designated Use specified in Section 2
	hereof. 

4.2	No Copying

	Licensee may make, free of charge, copies of the Licensed Products for
	the Designated Use, archival or back-up purposes. Licensee shall not
	make any copy of the Licensed Products for a use that AppGate has not
	expressly approved under this Agreement. Licensee shall not Use or
	allow the Licensed Products to be Used, directly or indirectly, in any
	manner that would enable its customers or any other person or entity
	to copy or Use any of the Licensed Products. Copying or reproduction
	of the Licensed Products to any other server or location or media for
	further reproduction or redistribution is expressly prohibited.

4.3	No Transfer of License; No Sublicense

	Licensee shall not assign or transfer this License, or license or
	sublicense the Use of all or any portion of the Licensed Products, to
	any other party.

4.4	No Modification or Decompilation

	Licensee shall not modify, disassemble, decompile, recreate or
	generate any Licensed Products or any portion or version thereof
	unless and to the extent permitted under applicable mandatory law.

4.5	Export

	Licensee shall not export or re-export the Licensed Products or permit
	transshipment thereof, directly on indirectly, to any country to the
	extent such country requires an export license or other governmental
	approval, without first obtaining such license or approval.

4.6	Proprietary Markings

	Licensee shall not remove, erase or hide from view any copyright,
	trademark, confidentiality notice, mark or legend appearing on any of
	the Licensed Products or any form of output produced by the Licensed
	Products.


5.	NO WARRANTY

	Because the Licensed Products are licensed free of charge, there is no
	warranty for the Licensed Program, to the extent permitted by
	applicable law. AppGate provides the Licensed Products "as is" without
	warranty of any kind, either expressed or implied, including, but not
	limited to, the implied warranties of merchantability and fitness for
	a particular purpose. Licensee alone accepts the entire risk as to the
	quality and performance of the Licensed Products.  Should the Licensed
	Products prove defective, Licensee  assumes the cost of all necessary
	servicing, repair or correction.


6.	LIMITATION OF LIABILITY AND REMEDIES

	In no event shall AppGate be liable for any loss of or damage to
	revenues, profits or goodwill or other special, incidental, indirect
	or consequential damages of any kind, resulting from its performance
	or failure to perform pursuant to the terms of this Agreement or any
	exhibits hereto, or resulting from the furnishing, performance, or use
	or loss of use, loss of data or loss of any licensed products or other
	materials delivered, including, without limitation, any interruption
	of business, whether resulting from breach of contract or breach of
	warranty, even if licensee has been advised of the possibility of such
	damages.

 
7.	DEFAULT AND TERMINATION

7.1	Termination in Advance Upon Default

	This Agreement may be terminated with immediate effect upon the
	occurrence of any of the following Events of Default:

	(a)	 Covenants

		 The failure or neglect of Licensee to observe, keep or
		 perform any of the covenants, terms and conditions of this
		 Agreement, where such non-performance is not fully cured by
		 Licensee within thirty (30) days after written notice from
		 AppGate; or

	(b)	 Bankruptcy

		 The filing of a petition for Licensee's bankruptcy, whether
		 voluntary or involuntary, or if an assignment of Licensee's
		 assets is made for the benefit of creditors, or a trustee or
		 receiver is appointed to take charge of the business of
		 Licensee for any reason, or if Licensee becomes insolvent or
		 voluntarily or involuntarily dissolved.

7.2	Obligations on Termination

	Effective with the date of expiration or other termination of this
	Agreement, all Usage of the Licensed Products shall terminate, and all
	rights of Licensee under this Agreement shall cease, specifically
	including, but without limitation, the License and all other rights
	granted to Licensee under this Agreement.

7.3	No Waiver

	Termination of the Agreement under this Section shall be in addition
	to, and not a waiver of, any remedy at law or in equity available to
	AppGate arising from Licensee's breach of this Agreement.


8.	MISCELLANEOUS

8.1	Notices

	All notices, requests and demands given to or made upon the parties
	shall be in writing and shall be mailed properly addressed, postage
	prepaid, registered or a certified, or personally delivered to either
	party at the addresses specified by either party, upon not less than
	ten (10) days notice. Such notice shall be deemed received by the
	close of business on the date shown on the certified or registered
	mail receipt, or when it is actually received, whichever is sooner.

8.2	Governing Law and Jurisdiction

	This Agreement shall be governed by and construed in accordance with
	the laws of Sweden, without reference to its conflicts of law
	provisions. The exclusive jurisdiction and venue for all legal actions
	relating to this Agreement shall be in courts of competent subject
	matter jurisdiction located in Sweden.

8.3	Severability

	If any provision of this Agreement is held invalid or unenforceable by
	any agency of competent jurisdiction, the remaining provisions shall
	nevertheless remain valid.

