Please read the terms and conditions of this license agreement carefully. This
is a legally binding license agreement between you (the "user" meaning either
an individual or a single entity) and Kyocera Mita. By using this software
("Software") you indicate your acceptance of the following Software License
Agreement granting a non-exclusive license.


**1. Property Rights

The Software is protected by national and international copyright laws and
international treaty provisions. The Software is owned and copyrighted by
Kyocera Mita. Your license does not confer any title to, or ownership in the
Software. No rights of any kind in the Software are transferred. The use of
the Software is subject to the license terms in this agreement.


**2. Use of Software**


Kyocera Mita grants the user a license to use one copy of the Software on one
or more computers connected to an original ?Kyocera Mita? printer, copier or
multifunctional device. Use means any permanent or temporary use of the
Software and includes the storing, loading, installing, executing or
displaying of the Software or the processing of any data contained therein.
The Software may not be used on any other hardware unless such use is granted
by a seperate license agreement.


**3. Rights to copy Software**


(1) The user may only copy the Software where this is essential to usage. This
includes the installation and loading of the Software into the temporary
memory (i.e. RAM).


(2) The user may make and store one back-up copy if this is necessary for
securing later use. The copy must be marked as such. If the Software is used
in the course of business and if routine back-up copies of all data including
the Software are made for the purposes of securing data and ensuring that the
computer system can be reactivated quickly after a breakdown, only so many
back-up copies may be made as are asbolutely essential. They may be used for
archival purposes only!


(3) The user may not make any further copies.


(4) The user may not decompile the Software except and only to the extent that
such activity is expressivly permitted by law. The user may not alter any
brand names, serial numbers or other characteristics identifying the Software
or any other legal information.


**4. Transfer of Software**


(1) The license will automatically terminate upon any transfer of the Software
to a third party. The transferee will be regarded as user in the meaning of
this contract.


(2) The Software may only be transferred if the transferee accepts the terms
and conditions of this license agreement. The user is obliged to inform the
transferee of these terms and conditions. If the user does not have a copy of
this contract, he may obtain a new one from Kyocera Mita Mita at his own
expenses.


(3) Upon transfer the user must immediately destroy any copies of the Software
or parts thereof including any changed or modified copies or parts thereof.
This also applies to any back-up copies.


(4) The user may not rent, lease or subdivide any rights granted by this
license or transfer or grant sublicenses unless explicitely allowed in this
contract.


**5. Warranty**


(1) Kyocera Mita?s liability is limited to original Software.


(2) Kyocera Mita, however, has taken all possible care to produce the Software
that, at the time of downloading, is free from defects and fit for its
particular purpose. In the unlikely event of any deficencies Kyocera Mita will
remedy the fault within a warranty period of six months. Kyocera Mita may at
its sole discretion either remedy the fault free of charge or provide a
replacement.


(3) The warranty period starts upon the download of the Software.


(4) If a remedy of the fault is impossible within an appropriate period of
time or the remedy or the replacement is regarded as ineffective, the user may
claim a reduction of the purchase price or the recission of the contract. The
remedy or the replacement can only regarded as ineffective if Kyocera Mita had
sufficient opportunity to remedy the fault and this proves impossible or
otherwise unreasonable.


(5) The warranty is null and void if the Software has been misused, used for
the wrong purpose or used in defective hardware.


(6) Faults must not be remedied by third parties. In this case Kyocera Mita
may either rescind the contract or provide a copy of the newest version of the
program. This does not imply any prolongation of the warranty period.


(7) Kyocera Mita is not liable for any faults caused during downloading.


**6. Limitation of warranty**


(1) Software is used at the user's own risk. Kyocera Mita is only liable for
any faults caused by gross negligence or intentional acts by Kyocera Mita.


(2) Kyocera Mita?s liability is limited to the purchase price.


(3) Any liablility for loss of data is limited to those expenses which would
normaly be incurred in retrieving data if risk-appropriate back-up copies had
been made on a regular basis but, in any case, not exceeding the limit
specified in paragh 6, sub-paragh 2.


(4) Any liability under the european laws concerning product Liability are not
limited by this contract.


**7. Exclusion of liability**


Kyocera Mita is not liable for any consequential damages, loss of profit or
any other loss whatsoever resulting from defects in the programm even if
Kyocera Mita has been advised thereof. This limitation of the warranty applies
to all damages of any kind.


**8. Obligations to examine and to notify**


(1) The user is obliged to examine the Software for any evident faults. An
evident fault means a fault obvious to the average user. Unless Kyocera Mita
is notified of such faults within 14 days of downloading the Software, the
warranty will expire.


(2) Kyocera Mita has to be informed of any other fault within fourteen days of
its discovery.


(3) This license does not effect any further obligations of the user normally
owed in the course of business.


(4) If this obligation is violated, the user will be deemed to have accepted
the Software as faultless.


**9. No other applicable agreements, written form**


(1) This license governs the contractual relation between Kyocera Mita and the
user with regards to the contractual obligation established by this license.
There are no further agreements. Any prior contracts or agreements are null
and void upon acceptance of this license.


(2) Any alteration of this license must be made in writing. Any alteration of
this clause must also be made in writing.


**10. Confidentiality**


(1) The user is obliged to the best of his abilities to take all reasonable
measures to prevent any unauthorized persons from obtaining access to, or
making any copy of, or otherwise disclosing any information regarding of the
Software.


(2) It is agreed that any information obtained in the course of the contract
which could be used in the development, manufacture or sale of any Software or
for the infringement of any copyright laws shall be kept confidential.


**11. Miscellaneous**


(1) Any notification to Kyocera Mita shall be made in writing to the following
address:


KYOCERA MITA EUROPE B.V.

HOEKSTEEN 40

2132 HOOFDORP, THE NETHERLANDS



(2) All relations between KYOCERA MITA and the customer shall be deemed to
have been fully governed by and construed in accordance with the laws of the
Netherlands, the application of the Vienna Convention on Contracts for the
International Sale of Goods (CISG) being excluded.


(3) All disputes arising in connection with this warranty shall be finally
settled by the competent court in Amsterdam, the Netherlands, as far as
legally permitted.


(4) The purpose of heading in these warranty terms is merely to provided
better orientation. They are not significant for interpreting the warranty
terms.


(4) If one or more stipulations of this warranty are entirely or partially
invalid, or if they become partially or entirely invalid, this will not affect
the validity of the remaining stipulations. The stipulations which have become
invalid shall be replaced by legally valid regulations, which most closely
approximates the intent of the invalid stipulation.
