IMPORTANT - READ CAREFULLY

 1 AGREEMENT

 1.1 This Digium End-User Purchase and License Agreement (the "Agreement") is a
 legal agreement between Digium and the licensee and purchaser respectively
 (hereinafter, "you", "You" or "your") of the Digium distribution media,
 embedded software and related documentation (the "Software"), Digium services
 (the "Services"),  and related manuals (collectively the "Products"). BY
 INSTALLING THE SOFTWARE, YOU AGREE TO AND ACCEPT THE TERMS AND CONDITIONS OF
 THIS AGREEMENT. If you do not accept, or are not authorized to accept the terms
 and conditions of this Agreement, then you should not install the Software and 
 should remove any installed Software from your computer.

 2 GRANT OF LICENSE

 2.1 Subject to your compliance with its obligations herein, Digium hereby
 grants you a limited, non-transferable, non-exclusive, non-sublicensable
 license to the Software for use with Zaptel software for internal business
 purposes and not for resale, sublicense, or leasing to third-parties.
 "Software" shall include any upgrades, updates, bug fixes or modified version
 ("Upgrades") or backup copies of the Software supplied to you by Digium
 provided you hold a valid license key to the original Software and have paid
 any applicable fee for Upgrades.

 2.2 Notwithstanding the foregoing, you acknowledge that certain components of
 the Software may be covered by so-called "open source" software licenses
 ("Open Source Components"). Digium will provide a list of Open Source
 Components for a particular version of the Software upon your request. To the
 extent required by the licenses covering Open Source Components, the terms of
 such licenses will apply in lieu of the terms of this Agreement, and Digium
 hereby represents and warrants that the licenses granted to such Open Source
 Components will be no less broad than the license granted in this Section 2.
 To the extent the terms of the licenses applicable to Open Source Components
 prohibit any of the restrictions in this Agreement with respect to such Open
 Source Component, such restrictions will not apply to such Open Source
 Component.

 2.3 "Key" refers to the unique registration code provided by Digium to enable
 the Licensee to use the Software.  You may use one copy of the Software
 registered with a registration key, provided by Digium, on a single computer
 owned, leased, or otherwise controlled by you at a single time.  If you have
 multiple registration keys for the Software you may use the Software on as 
 many computers as you have keys.  The Software may not be used on or
 distributed to a greater number of computers than you have registration keys.

 3 RESERVATION OF RIGHTS

 3.1 Except for the limited license rights expressly granted in this Agreement,
 Digium reserves all rights in and to the Software and any modifications
 thereto, including title, ownership, trademark, copyright, patent, trade secret
 and any other rights and interests. You will own only the physical media on
 which the Software and associated documentation are reproduced and distributed.

 4 LIMITED WARRANTY - SOFTWARE

 4.1 .Digium warrants only that the  media on which Digium delivers the Software
 will be free of physical defects for a period of ninety (90) days or will be
 replaced by Digium. Except as otherwise agreed by Digium in writing,  the
 replacement Software is subject to the terms and conditions of this Agreement. 
 If Digium determines in its sole discretion that a defect cannot be corrected, 
 or that it is not practical to replace the Software, the price paid by the
 original licensee for the Software will be refunded by Digium to you and the
 license grant automatically terminated, in which case you will promptly return 
 to Digium or destroy the Software and any copies in your possession.

 5 WARRANTY DISCLAIMERS

 5.1 The limited warranty provided by Digium does not cover (i) Products that
 have been subjected to misuse, tampering, modification, experimentation,
 alteration, negligence, faulty installation; (ii) Products with the model or
 serial number altered, tampered with, or removed; (iii) Initial installation,
 installation and removal of the Product for repair, and shipping costs; 
 (iv) Configuration of the Product; (v) Damage that occurs in shipment due to
 act of God, failures due to power surges, and cosmetic damage; (vi) Any
 hardware, software, firmware or other materials or services provided by anyone 
 other than Digium; or (vii) Repair by anyone other than Digium or Digium's 
 authorized representative. Unless under a current Services contract with 
 Digium, you shall not upgrade or update Product using software of any origin 
 except commercial versions of the Software released to you by Digium or its 
 authorized distributors from time to time. THE PRODUCT IS PROVIDED WITHOUT ANY
 IMPLIED WARRANTIES OF ANY KIND WHATSOEVER, INCLUDING, WITHOUT LIMITATION, ANY
 IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 NON-INFRINGEMENT. EXCEPT AS EXPRESSLY COVERED UNDER THE LIMITED WARRANTY
 PROVIDED HEREIN, THE ENTIRE RISK AS TO THE QUALITY, SELECTION AND PERFORMANCE
 OF THE PRODUCT IS YOURS.

 6 RETURN MATERIAL AUTHORIZATION

 6.1 If returning a Product under the limited warranty, you must include with
 the Product a written description of the physical defect or in sufficient
 detail to allow Digium to confirm such determination. Prior to returning a
 Product under limited warranty to Digium, the original purchaser must obtain a
 Return Material Authorization ("RMA") in accordance with the Digium policy in
 effect at the time as published on the Digium web site.  Digium will not be
 obligated to accept returns of any Software that has been activated or
 otherwise used.

 7 LIMITATION OF LIABILITY

 7.1 TO THE MAXIMUM EXTENT PERMITTED BY LAW, DIGIUM IS NOT LIABLE UNDER ANY
 CONTRACT, NEGLIGENCE, STRICT LIABILITY OR OTHER LEGAL OR EQUITABLE THEORY FOR
 ANY LOSS OF USE OF THE PRODUCT, INCONVENIENCE OR INDIRECT DAMAGES OF ANY
 CHARACTER, WHETHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL (INCLUDING, BUT NOT
 LIMITED TO, LOSS OF REVENUE OR PROFIT, WORK STOPPAGE, COMPUTER FAILURE OR
 MALFUNCTION, FAILURE OF CONNECTED EQUIPMENT OR PROGRAMS, LOSS OF INFORMATION
 OR DATA OR LOSS OF GOODWILL) RESULTING FROM THE USE OF THE PRODUCT, RELATING
 TO WARRANTY SERVICE, OR ARISING OUT OF ANY BREACH OF THIS AGREEMENT, EVEN IF
 DIGIUM HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE SOLE REMEDY FOR
 A BREACH OF THE FOREGOING LIMITED WARRANTY IS REPAIR, REPLACEMENT OR REFUND OF
 THE THE MAXIMUM LIABILITY OF DIGIUM UNDER THIS DEFECTIVE PRODUCT. IN NO EVENT
 SHALL THE REMEDY RELATED TO THIS AGREEMENT EXCEED THE PURCHASE PRICE OF THE
 APPLICABLE PRODUCT. THE FOREGOING EXPRESS LIMITED WRITTEN WARRANTY AND REMEDIES
 ARE EXCLUSIVE AND IN LIEU OF ANY OTHER WARRANTIES OR REMEDIES, EXPRESS, IMPLIED
 OR STATUTORY.

 8 PROPRIETARY WORKS

 8.1 The Products contain trademarks, trade secrets and/or copyrighted materials
 of Digium or its suppliers.

 8.2 You agree not to reverse engineer, decompile, or disassemble the Software,
 except to the extent such restriction is expressly prohibited by applicable
 law. You shall not disclose or make available such trade secrets or copyrighted
 material in any form to any third party nor remove any trademark notices,
 copyright notices, or licensing terms from the Software or any components
 therein.

 8.3 You will not, without Digium written consent, use the name, trademarks,
 trade names or logos of Digium, or the name of any product or service of
 Digium, in any manner. If Digium grants you a right to use the aforementioned,
 you will do so only in strict compliance with Digium's usage policies.

 9 TERMINATION

 9.1 This Agreement shall terminate upon removal of the Products from your
 server and either destruction of the Products or return of the Products by you
 to Digium. In the event of a breach of the scope of use permitted by the grant
 in Section 2, or if you do not comply with other materials terms and conditions
 of this Agreement, Digium shall have the right to immediately terminate this
 Agreement, in which case you must promptly remove the Software from your
 servers and destroy or return all copies to Digium. Notwithstanding the
 foregoing, the provisions of Sections 5, 6, 7, 10, 11, 12, 13 and 14 shall
 survive termination of this Agreement.

 10 EXPORT RESTRICTION

 10.1 You acknowledge that the Software, with the possible exception of certain
 third-party components, is of U.S. origin. You agree to comply with applicable
 domestic and international laws that apply to the Software, including the U.S.
 Export Administration Regulations and other limitations issued by U.S. and
 foreign governments.

 11 TRANSFER AND ASSIGNMENT

 11.1 This Agreement and the rights and obligations under it are not assignable
 by you without the prior written approval of Digium, voluntarily or by
 operation of law. Any attempt by you to assign this Agreement without such
 approval shall be void. This Agreement shall inure to the benefit of the
 successors and assigns of Digium. Notwithstanding the foregoing, you may move
 the Software to different internal computers to the extent consistent with the
 scope of license you have purchased to the Software.

 12 U.S. GOVERNMENT USERS

 12.1 The Software and documentation qualify as "commercial items" as defined at
 48 C.F.R. 2.101 and 48 C.F.R. 12.212. All Government users acquire the Software
 and documentation with only those rights herein that apply to non-governmental
 customers of Digium.

 13 GOVERNING LAW AND JURISDICTION

 13.1 This Agreement is to be construed in accordance with and governed by laws
 of the State of Alabama, excluding its conflict of law provisions. Digium and
 you agree to submit to the personal and exclusive jurisdiction of, and agree
 that venue is proper in, the Alabama State or Federal Courts located in the
 County of Jefferson, Alabama, for any such legal action or proceeding. The
 United Nations Convention on International Sale of Goods, the application of
 which is expressly excluded, does not govern this Agreement.

 14 ENTIRE AGREEMENT

 14.1 This Agreement constitutes the entire understanding between the parties
 relating to the subject matter hereof and supersede all prior writings,
 negotiations or understandings with respect thereto. The provisions of this
 Agreement shall take precedence over any conflicting terms in any subsequent
 purchase order, documentation or collateral. Any modifications to this
 Agreement shall be reflected in a written agreement between the parties. The
 parties agree that this Agreement may be executed electronically and that
 electronic copies of this Agreement shall be binding upon the parties.
