
                               Mup License

       At Arkkra Enterprises, we'd like all our customers to be
       delighted with our products. To ensure that Mup and any
       other products or services we provide are readily available
       at the lowest possible cost to you, we need to establish
       licensing terms.

       While there are other music publication programs on the
       market, we believe Mup has unique features that you may find
       very useful.  Since different people may want different
       things in a music publication program, you do not have to
       pay for Mup until after you've had a chance to try it out
       and evaluate it for yourself.  If you have problems with
       Mup, let us know and we will try to resolve them.  If you
       have paid your registration fee and we cannot resolve
       problems to your satisfaction, we will gladly refund your
       money.

       1.  Mup License

       Arkkra Enterprises disclaims all warranties relating to this
       software, whether expressed or implied, including but not
       limited to any implied warranties of merchantability and
       fitness for a particular purpose, and all such warranties
       are expressly and specifically disclaimed.  Neither Arkkra
       Enterprises nor anyone else who has been involved in the
       creation, production, or delivery of this software shall be
       liable for any indirect, consequential, or incidental
       damages arising out of the use of or inability to use such
       software even if Arkkra Enterprises has been advised of the
       possibility of such damages of claims.  In no event shall
       Arkkra Enterprises' liability for any damages ever exceed
       the price paid for the license to use the software,
       regardless of the form of the claim.  The person using the
       software bears all risk as to the quality and performance of
       the software.

       Some states do not allow the exclusion of the limit of
       liability for consequential damages, so the above limitation
       may not apply to you.

       This agreement shall be governed by the laws of the state of
       Illinois and shall inure to the benefit of Arkkra
       Enterprises, and any successors, administrators, heirs and
       assigns. Any action or proceeding brought by either party
       against the other arising out of or related to this
       agreement shall be brought only in the state or federal
       court of competent jurisdiction located in DuPage County,
       Illinois. The parties hereby consent to in personam
       jurisdiction of said courts.

       This software is licensed to you, for your own use. This is
       copyrighted software. You are not obtaining title to the
       software or any copyright rights.  You may not sublicense,
       rent, lease, convey, modify, or translate this software for
       any purpose.

       You may make as many copies as you need for back-up
       purposes.  You may use this software on more than one
       computer, provided there is no chance it will be used
       simultaneously on more than one computer.  If you need to
       use this software on more than one computer simultaneously,
       you will need to obtain a license for each copy or a site
       license.

       You may make copies of this software for other parties under
       the following terms:

          - The copy must be an exact copy as would be obtained
            directly from Arkkra Enterprises, including this
            license.  It must clearly state that it is a copy, and
            must give the address of Arkkra Enterprises.

          - The copy must be used by the obtaining party only for
            the purpose of trialing the software. If after trialing
            the software, the receiving party wishes to continue to
            use the software, they must submit their license fee.

          - All limitations and disclaimers of this license apply
            to the copy.
