End-User Agreement

Software Products: Object of this agreement is the Nero software: Nero Linux ("Software")

Licensor: Nero AG ("Nero")

THIS IS A LEGAL AGREEMENT BETWEEN YOU, THE "END USER", AND NERO AG, IM STOECKMAEDLE 18, 76307 KARLSBAD, GERMANY.


CONCLUSION OF THE CONTRACT

THIS AGREEMENT IS EFFECTIVE

A.BY OPENING THE SEALED PACKING OF NERO’S SOFTWARE ON THE "EFFECTIVE DATE," YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS AGREEMENT. IF YOU DO NOT AGREE TO THE TERMS OF THIS AGREEMENT, PROMPTLY RETURN THE SOFTWARE AND ALL THE ACCOMPANYING ITEMS (INCLUDING WRITTEN MATERIALS AND BINDERS OR OTHER CONTAINERS) TO THE PLACE YOU OBTAINED THEM FOR A FULL REFUND.

OR

B.BY INSTALLING THE DOWNLOADED SOFTWARE, YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS AGREEMENT BY MEANS OF CLICKING THE “ACCEPT” BUTTON ON THE WEBSITE. IF YOU DO NOT AGREE TO THE TERMS OF THIS AGREEMENT, PROMPTLY UNINSTALL AND DELETE THE SOFTWARE AND ALL THE ACCOMPANYING ITEMS (INCLUDING DOCUMENTATION OR MANUALS).
IF THE TERMS OF THIS AGREEMENT COMPRISE AN OFFER BY NERO, THEN YOUR ACCEPTANCE IS EXPRESSLY LIMITED TO THE TERMS CONTAINED HEREIN.


The terms of your license agreement ("Agreement") for the Software described above depend on whether you purchased the Software from:

(1) an Nero OEM partner; or

(2) Nero or an Nero distributor.

If the jewel box in which you received the Software includes the word "OEM" on its cover (or on the CD itself), you have acquired a copy of the Software from an Nero OEM partner.

If the jewel box in which you received the Software has only Nero's label on it and does not include the word "OEM" on its cover (or on the CD itself), you have acquired a copy of the Software from either Nero or an Nero distributor.

If you downloaded the Software which allows you to install only under the condition that the Software be distributed with a hardware device, you have acquired a copy of the Software from an Nero OEM partner.



A. LICENSE TERMS AND CONDITIONS APPLICABLE TO SOFTWARE ACQUIRED FROM OEM PARTNER


I. Grant of license

This Agreement permits you to use one copy of the Software acquired with this license on any single computer ("OEM License"), provided the Software is in use on only one computer at any given time. If you have acquired a multiple license for the Software, then at any one time you may have in use up to as many copies of the Software as you have licenses. The Software is "in use" on a computer when it is loaded into the temporary memory or installed into the permanent memory (e.g. hard disk, CD ROM, or other storage device) of that computer, except that a copy installed on a network server for the sole purpose of distribution to other computers is not considered "in use". If the anticipated number of users of the Software might exceed the authorized number of applicable licenses, then you must have a reasonable mechanism or process in place to assure that the number of concurrent uses of the Software does not exceed the number of licenses.

THE OEM LICENSE GRANTED HEREIN IS ONLY VALID IF ACQUIRED AS A BUNDLE WITH CD/DVD-RECORDING HARDWARE.


II. Copyright

The Software is owned by Nero or its licensors and is protected by copyright laws, international treaty provisions, and other national laws. You agree that you have no right, title or interest in the Software, except as set forth in Subsection I. If the Software is not copy protected you may either

(a) make one copy of the Software solely for backup or archival purposes, or

(b) transfer the Software to a single hard disk provided you keep the original solely for backup or archival purposes.

Product manual(s) or written materials accompanying the Software may not be copied.


III. Other restrictions

You may not rent or lease the Software, but you may permanently transfer your rights under this Agreement provided that: (i) you transfer all copies of the Software and all written materials; (ii) the recipient agrees to be bound by the terms of this Agreement; and (iii) you remove any and all copies of the Software from your computer and cease any further use of the Software. Any transfer must include the most recent upgrade and all prior versions. You may not copy the Software except as expressly set forth above. You may not reverse engineer, decompile or disassemble the Software, and you are not allowed to post or otherwise make the Software available on the World Wide Web. If you did not acquire the Software in its original packaging and you are not a transfer recipient under this subsection, you are not licensed to use the Software.

Upgrades: The software will be maintained by Nero by means of upgrades. An upgrade is a major functional enhancement to the software and can be purchased via the Nero website (www.nero.com).  Should you purchase a software upgrade to a newer version, you will be entitled to use both the originally purchased Nero version and the upgrade as standalone products in accordance with the provisions of this Agreement. The entitlement to use the upgrade as a standalone product is, however, contingent on your continued possession of the originally purchased Nero software. This upgrade arrangement refers exclusively to all Nero upgrades.


IV. Warranties

NERO MAKES NO WARRANTIES TO YOU IN CONNECTION WITH THIS OEM LICENSE, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. The party from whom you purchased the product with which this Software has been bundled may have warranty and/or support obligations to you.


V. Limitation of Liability

In no event shall Nero or its licensors be liable for any other damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or other pecuniary loss) arising out of the use of or inability to use the Software, even if Nero has been advised of the possibility of such damages. Further, in no event shall Nero be liable for damages or loss, howsoever arising or caused, whether or not arising from its negligence, in excess of the amounts paid by you for a license to the Software.  These limitations shall apply notwithstanding any failure of essential purpose of any limited remedy.


VII. Duration of the agreement

The Agreement shall remain in effect from the Effective Date until terminated as set forth herein. This Agreement shall automatically terminate without notice to you in the event that you violate the provisions of this Agreement, including without limitation, those regarding copyright and other restrictions set forth in Sections II. and III. above.  Upon termination, the End User is no longer entitled to use Nero’s Software and its accompanying items. In this case End User is obligated to resend original discs and all copies of data carriers and to erase completely and ultimately all data from End User’s computer established by means of Nero’s Software.


VIII. Safeguard measures

End User will keep the Software in safe custody and will indicate to its members of household to follow the obligations stipulated in this Agreement. End User agrees to follow all relevant legal provisions, especially the laws on intellectual property and copyright.


IX. Disclaimer

THE SOFTWARE IS DESIGNED TO ASSIST YOU IN REPRODUCING MATERIAL IN WHICH YOU OWN THE COPYRIGHT OR HAVE OBTAINED PERMISSION TO COPY FROM THE COPYRIGHT OWNER. UNLESS YOU OWN THE COPYRIGHT OR HAVE PERMISSION TO COPY FROM THE COPYRIGHT OWNER, YOU MAY BE VIOLATING COPYRIGHT LAW AND BE SUBJECT TO PAYMENT OF DAMAGES AND OTHER REMEDIES. IF YOU ARE UNCERTAIN ABOUT YOUR RIGHTS, YOU SHOULD CONTACT YOUR LEGAL ADVISOR. YOU ASSUME FULL RESPONSIBILITY FOR THE LEGAL AND RESPONSIBLE USE OF THE SOFTWARE.


X. U.S. Government Restricted Rights

Any use of the Nero Software by the U.S. Government is conditioned upon the Government agreeing that the Software is subject to Restricted Rights as provided under the provisions set forth in subdivision (c)(1)(ii) of Clause 252.227-7013 of the Defense Federal Acquisition Regulations Supplement, or the similar acquisition regulations of other applicable U.S. Government organizations.  The Contractor/Manufacturer is Nero AG, Im Stoeckmaedle 18, 76307 Karlsbad, Germany.



B. LICENSE TERMS AND CONDITIONS APPLICABLE TO SOFTWARE ACQUIRED FROM NERO OR AN NERO DISTRIBUTOR

The license terms and conditions applicable to Software purchased from Nero or a Nero Distributor are exactly the same as set forth in Section A above, except that Subsection I (Grant of license) and Subsection IV (Warranties) shall read as follows:


I. Grant of license

This Agreement permits you to use one copy of the Software acquired with this license on any single computer, provided the Software is in use on only one computer at any given time. If you have acquired a multiple license for the Software, then at any one time you may have in use up to as many copies of the Software as you have licenses. The Software is "in use" on a computer when it is loaded into the temporary memory or installed into the permanent memory (e.g. hard disk, CD ROM, or other storage device) of that computer, except that a copy installed on a network server for the sole purpose of distribution to other computers is not considered "in use". If the anticipated number of users of the Software might exceed the authorized number of applicable licenses, then you must have a reasonable mechanism or process in place to assure that the number of concurrent uses of the Software does not exceed the number of licenses.


II. Warranties

Nero warrants that for a period of ninety (90) days from the date of receipt, the Software will perform substantially in accordance with the accompanying documentation.  Any implied warranties on the Software are limited to 90 days or the shortest period permitted by applicable law, whichever is greater.  Nero’s entire liability and your exclusive remedy for a breach of this warranty shall be, at Nero’s sole option, either (a) return of the price paid or (b) repair or replacement of the Software that does not meet Nero’s limited warranty and that is returned to Nero with a copy of your receipt.  If failure of the Software is the result of accident, abuse, or misapplication, this limited warranty shall be void.  Any replacement Software will be warranted for the remainder of the original warranty period or 30 days, whichever is longer.  NERO MAKES NO OTHER WARRANTIES TO YOU IN CONNECTION WITH THIS LICENSE, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.



C. TERMS AND CONDITIONS APPLICABLE TO ALL LICENSES


I. Third Party Disclaimer and Limitations

a.) MP3 and mp3PRO: Supply of this product only conveys a license for private, non-commercial use and does not convey a license nor imply any right to use this product in any commercial (i.e. revenue-generating) real time broadcasting (terrestrial, satellite, cable and/or any other media), broadcasting / streaming via Internet, intranets and/or other networks or in other electronic content distribution systems, such as pay-audio or audio-on-demand applications. An independent license for such use is required. For details, please visit www.mp3licensing.com .

b.) Embedded Software License:
You acknowledge that Nero Linux licensed hereunder contains third party components that are licensed pursuant to its own terms and conditions ("Embedded Software"), as specified below.  A copy of the licenses associated with such Embedded Software is included below.   NOTWITHSTANDING ANYTHING ELSE TO THE CONTRARY IN THIS AGREEMENT, EMBEDDED SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE

Copy of the licenses associated with Embedded Software

© 2007, Xiph.Org Foundation

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

Neither the name of the Xiph.org Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

This software is provided by the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the foundation or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.


II. Governing Law:  This Agreement shall be governed by and interpreted in accordance with the internal laws of California, USA.  If any dispute shall arise pursuant to any provision of this Agreement, said dispute shall be settled by binding arbitration in accordance with the rules and regulations of the state courts, located in Los Angeles, California.  If any term or provision of this Agreement shall be declared invalid in arbitration or by a court of competent jurisdiction, such invalidity shall be limited solely to the specific term or provision invalidated, and the remainder of this Agreement shall remain in full force and effect, according to its terms.  Any provision declared invalid shall be modified to the fullest extent possible to reflect the parties' intent as of the Effective Date.



Copyright © 1996-2007 Nero AG and its licensors. All rights reserved.

All Rights Reserved. Portions of this software package are:   (c) 2007, Xiph.Org Foundation.

"Nero" is a trademark of Nero AG. mp3PRO audio compression technology licensed by Coding Technologies, Fraunhofer IIS and THOMSON.

Nero reserves the right to change specifications without notice. Use of this product is subject to the acceptance of the End User
license agreement upon installation of the Software. www.nero.com.

If you have any questions concerning this Agreement,
please contact us.

© 1999-2007 Nero AG / Nero Inc. All rights reserved.

18/04/2007
