Glimpse/Webglimpse Software Licensing Agreement

THIS SOFTWARE LICENSING AND ROYALTY AGREEMENT (this "Agreement") is made
by and between Internet WorkShop (hereinafter "Licensor"), as per resale
license granted by The Arizona Board of Regents for The University of
Arizona, and "Licensee", a company or individual who has purchased the
SOFTWARE from Internet Workshop.

WITNESSETH:

WHEREAS, Licensor is the author of, or has acquired the rights to,
certain computer software programs, documentation, and related written
materials (collectively "Software") specifically Glimpse and Webglimpse,
and Licensee desires to acquire a right and license to use Licensor's
Software under the terms and conditions set forth herein.

NOW, THEREFORE, in consideration of the mutual covenants and premises
herein contained, the Parties hereto agree as follows:

I. LICENSE

1.1 Scope of License Grant. In consideration of the agreement of
Licensee to pay royalties hereunder, Licensor hereby grants to Licensee
the nonexclusive, nontransferable right and license to use Licensor's
Software subject to the terms and conditions of this agreement. The
Software is licensed for use solely for Licensee's internal applications
in the normal course of Licensee's business. No rights to sublicense or
market the Software or Documentation are granted. All rights not
specifically granted to Licensee by this license shall remain in
Licensor.

1.4 Right to Copy. Licensee shall not copy the Software, in whole or in
part, except as expressly provided in this section. The Software may be
copied in whole or in part, in printed or machine-readable form, for
archival storage or emergency restart purposes, or to replace a worn
copy.

1.5 If Licensee obtains source code under this agreement, Licensee
agrees it will not use the source code or any associated Licensor
proprietary information for any purpose other than Licensee's internal
needs and in particular not for the purpose of development or
distribution of any product or program similar to, or competitive with,
the Software.

II. WARRANTY

2.1 LICENSOR MAKES NO WARRANTIES, EXPRESS OR IMPLIED, AND SPECIFICALLY
DISCLAIMS OTHER WARRANTIES, INCLUDING (WITHOUT LIMITATION) ANY WARRANTY
OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
SHALL LICENSOR BE LIABLE FOR ANY INCIDENTAL, INDIRECT, SPECIAL OR
CONSEQUENTIAL DAMAGES, OR FOR LOST PROFITS, OR FOR LOST DATA OR
DOWNTIME, WHETHER OR NOT LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

2.2 LICENSEE AGREES THAT ITS SOLE REMEDY AGAINST LICENSOR OR ITS
REPRESENTATIVES FOR LOSS OR DAMAGE CAUSED BY ANY DEFECT OR FAILURE OF
THE SOFTWARE, REGARDLESS OF THE FORM OF ACTION, WHETHER IN CONTRACT,
TORT, INCLUDING NEGLIGENCE, STRICT LIABILITY OR OTHERWISE, SHALL BE (I)
THE REPAIR OR REPLACEMENT OF THE SOFTWARE OR (II) IF SUCH REPAIR CANNOT
BE MADE OR AN EQUIVALENT REPLACEMENT CANNOT BE PROVIDED, THE REFUND OF
AMOUNTS PREVIOUSLY PAID BY LICENSEE.

III. OPERATING ENVIRONMENT

3.1 This Agreement is a [CPU, Site or per-Seat] license.

3.2 In the event this Agreement pertains to a CPU license:

3.2.1 Licensee shall have the right to use the Software only on a single
designated single central processing unit or mainframe computer and its
associated peripheral units.

If Licensee has purchased a single-domain license, the Software shall be
made accessible via a single IP address and/or domain name. Unlimited
end users may access the Software through the single central processing
unit where it is running. If licensee has purchased a 10-domain or
100-domain license, up to that number of additional IP addresses or
Virtual Domains may be configured for use with the Software. Other
numbers of domains may be agreed upon separately by the parties.

3.3 In the event this Agreement pertains to a Site license, Licensee has
the right to use the Software on any processor or mainframe computer and
its associated peripheral equipment owned or operated by Licensee at a
single geographic location.

3.4 In the event this Agreement pertains to a per-Seat license, Licensee
has the right for a single user to use the software on a single computer
per Seat purchased. In this case the Software will not be made available
to additional users via Intranet or Internet, but will be used locally
by each licensed user.

IV. ROYALTIES AND PAYMENTS

4.1 This agreement takes effect and is executed only upon receipt of
full Payment by Licensor from Licensee. The amount shall be as according
to the published schedule on the Licensor's website,
http://webglimpse.net, or by separate agreement between Licensor and
Licensee.


V. TERM AND TERMINATION

7.1 Discretionary Termination by Licensee. Licensee, at its option,
shall have the right to terminate this Agreement with respect to any
license or right granted herein at any time and from time to time with
respect to any of the Licensor Software. Any such termination shall be
made by written notice to Licensor and shall become effective 90 days
after giving such notice. If such termination is made in writing within
60 days of receiving access to Software, Licensor shall refund amounts
paid by Licensee to purchase Software. Any amounts paid by Licensee for
support or services shall not be refunded.

7.2 Discretionary Termination by Licensor. Licensor, at its option,
shall have the right to terminate this Agreement within 60 days of
execution, with respect to any license or right granted herein with
respect to any of the Licensor Software. Any such termination shall be
made by written notice to Licensee and shall become effective 90 days
after giving such notice. If such termination is made by Licensor,
Licensor shall refund all amounts paid by Licensee in relation to
Software.

VI. GENERAL

5.1 Governing Law and Arbitration. The validity, construction, and
performance of this Agreement shall be governed by the substantive laws
of Arizona. The parties agree that any dispute arising under this
agreement shall be resolved by arbitration pursuant to the Arizona
Uniform Rules of Procedure for Arbitration, and the location of
arbitration shall be Tucson, Arizona. The decision of the arbitrator(s)
shall be final.

5.2 Conflict of Interest. This Agreement is subject to the provisions of
A.R.S. 38-511 and the State of Arizona may cancel this Contract if any
person significantly involved in negotiating, drafting, securing or
obtaining this Contract for or on behalf of the Arizona Board of Regents
becomes an employee in any capacity of any other party or a consultant
to any other party with reference to the subject matter of this Contract
while the Contract or any extension hereof is in effect.

5.3 Non-discrimination. The parties agree to be bound by applicable
state and federal rules governing Equal Employment Opportunity and
Non-Discrimination.
