               Computer Software License Agreement
                                
                    Flagship Industries, Inc.
                          P.O. Box 198
                    Maryville, Illinois 62062
                                
This is a computer software license agreement entered into
between Flagship Industries, Inc. ("Flagship") and
________________________________ ("User") for the use of Ventrilo
2.0 Software, an internet-based communication software.  Flagship
hereby grants to the User a non-exclusive license to use the
software in accordance with the terms of this agreement.  As
consideration for said license, the User agrees as follows:

1.   Reservation of rights.  All rights not expressly granted to
the User by this License Agreement are reserved by Flagship.

2.   Disassembly.  The User understands and agrees that it shall
not copy the program into any machine-readable or printed form,
except for archival or for back-up purposed in accordance with
the terms of this Agreement.  The User will not reverse engineer,
decompile, disassemble, translate, merge into another computer
program or otherwise modify the software.

3.   Transfer of software.  The User will not sublicense, assign,
or transfer the license, the software, or any rights under this
Agreement without the prior written consent of Flagship.

4.   Non-disclosure.  The User, its employees and agents will
hold the software in trust and confidence and shall not disclose
the source code or other confidential information received
through use of the software.

5.   Fees.  A corporation or home user may use the software to
host its own server, without a fee, provided it does not charge
for its use directly or indirectly.  Any home server, business,
or corporation that charges for use of its server, directly or
indirectly, shall be subject to licensing fees.  Inclusion of a
Ventrilo server as part of any rental or membership package shall
be subject to a licensing fee which is calculated for servers
which are configured to handle a maximum number of clients at any
one time ("Maxclients") as US$0.10 multiplied by the number of
servers multiplied by the number of Maxclients per server
utilizing the Ventrilo software.

As of the date of signing this Agreement User has _____ servers
each configured for _____________ Maxclients, resulting in an
initial licensing fee of US$__________________.  User shall
immediately report to Flagship any change in the number of
servers or Maxclients in its system and its MONTHLY fee shall be
adjusted accordingly at the beginning of the next month.

6.   Updates and new versions.  In the event that updates or new
versions of the software are developed, Licensor may at its
discretion, make updates and new versions available to the User
upon payment of a fee.  Flagship may require the return of the
original software to Flagship, or require that the User
discontinue use of older versions of the software.  If software
is updated and made available to the User, the User may use the
update only in accordance with the terms and conditions of this
Agreement.

7.   This Agreement is effective upon opening of the software
package, or its initial use if downloaded, and shall continue,
unless terminated earlier in accordance with the terms herein.
The User may terminate this Agreement at any time by returning
the software and all copies and extracts therefrom to Flagship.

8.   Limited Warranty; Limitation of liability.  Flagship
warrants only that the software shall perform substantially in
accordance with accompanying documentation under normal use for
the period the license is valid.  The entire and exclusive
liability and remedy for breach of this Limited Warranty shall
be, at Flagship's discretion, either (1) refund the used portion
of any prepaid fee after notifying Flagship of a material defect
or (2) electronically update defective software with corrected
software to eliminate a defect.  The User shall assume
responsibility for the selection of the software and for the
installation, use, and results obtained from the software.  The
entire risk as to the quality and performance of the software is
borne by the User.
FLAGSHIP EXPRESSLY DISCLAIMS THE IMPLIED WARRANTIES OF TITLE, NON-
INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR
PURPOSE.  THERE IS NO WARRANTY OR GUARANTEE THAT THE OPERATION OF
THE SOFTWARE WILL BE UNINTERRUPTED, ERROR-FREE, OR VIRUS-FREE, OR
THAT THE SOFTWARE WILL MEET ANY PARTICULAR CRITERIA OF
PERFORMANCE OR QUALITY EXCEPT AS EXPRESSLY PROVIDED IN THE
LIMITED WARRANTY.

No action for the above Limited Warranty may be commenced after
one (1) year following the expiration date of the warranty.  IF
IMPLIED WARRANTIES MAY NOT BE DISCLAIMED UNDER APPLICABLE LAY,
THEN ANY IMPLIED WARRANTIES ARE LIMITED IN DURATION TO NINETY
(90) DAYS FROM THE DATE THE SOFTWARE IN QUESTION WAS FIRST
SUPPLIED TO CUSTOMER.  If a limitation is not allowed, the above
limitation may not apply to the User.

9.   Jurisdiction and Venue.  This Agreement and the terms herein
shall be governed by the laws of the state of Illinois.  All
disputes hereunder shall be resolved in Madison County, Illinois.

10.  Miscellaneous.  This Agreement constitutes the entire
understanding of the parties, and merges all prior
communications, representations, and agreements.  This Agreement
may be modified only by a written agreement signed by both
parties.  If any provision of this Agreement is held invalid or
unenforceable for any reason, such invalidity of unenforceability
shall not affect any of the remaining provisions of this
Agreement.

Agreed this _____ day of __________________, 20____.

FLAGSHIP INDUSTRIES, INC.               USER


By: __________________________               By:__________________________
      Brian Knapp, President


                                                __________________________
                                                (Print Name)


                                                __________________________
                                                (Address)


                                                __________________________
