Terms and conditions of use GENYMOTION

Definition of “end user”

The end user shall be a single person represented by a unique username with the software installed on a single workstation. No other person may use the username crated by such person or the software granted under this license at any time for any purpose.

 

Free VERSION AGREEMENT : Personal and private use only, exclusion of all other uses

Binding agreement

By acceptance of this end user license agreement, a legally binding contract and agreement, which sets forth the license and use rights for the software/application developed by GENYMOBILE, is created between the end user/licensee and GENYMOBILE, a corporation with an establishment in Paris (75004), 36, boulevard de Sébastopol.

The end user or the licensee agrees that any time when he accesses, uses the software developed by GENYMOBILE or logs into the software/application of GENYMOBILE, it reaffirms its acceptance and express agreement under these conditions. If the licensee or the end user does not agree to all the terms, he is not authorized to access or use the software/application. By accepting these terms, the licensee or the end user has specifically taken note of all GENYMOBILE’s rights and intellectual property rights, as well as exclusions of responsibilities and guarantees.

Warning: warranties and representations of the licensee

Licensee and the end user are solely responsible for the use, application, and implementation, and all decisions related to the use, application, and implementation of the software/application developed by GENYMOBILE.

License granted: Limited

GENYMOBILE grants the end user or the licensee a non-transferable, non-sublicenseable, non-assignable, terminable, limited, and non-exclusive license to access and use the software application developed by GENYMOBILE.

This license is granted to the end user only and exclusively in connection with personal use, the end user is an individual, and not a professional, who downloads the application for personal and private needs, excluding commercial and professional environment.

The end user and the licensee do not have any right or license to, and will not, directly or indirectly, in any manner whatsoever:

assign, transfer, sell, encumber or modify the software/application developed by GENYMOBILE or include this applicationin a product whatsoever,
use or utilize this software/application for any purpose or in any manner that is illegal or in violation of any applicable law or rights of any third party,
Generally speaking, all access, performance or use of the application except as expressly permitted by these terms and any use in accordance to GENYMOBILE’s purpose shall be deemed to be an infringement of GENYMOBILE’s intellectual property rights on its software/application and open all rights and remedies in connection with such infringement.

No support and no guarantee

GENYMOBILE is not required to provide or make available any support, maintenance, or other services to the end user or to the licensee.

GENYMOBILE may, at any time, take down or shut down access the software/application developed for maintenance, repair, or for any reason whatsoever.

GENYMOBILE makes no warranty with respect to the application developed including, without limitation, regarding the modifications and improvements.

The applicationis provided « as is » and « where is ».

GENYMOBILE provides no commitment, no warranty to the end user or licensee.

GENYMOBILE disclaims:

Any liability of any nature whatsoever,
Any warranty and any support, maintenance or other service,
Any warranty of merchantability, non-infringement, ownership, accuracy, reliability, interoperability with other software or applications,
Any collateral security or quiet enjoyment or the use is not interrupted by virus or error-free, or that the end user will not meet errors,
Any use that is consistent with security needs and specific requirements by the end user or licensee,
Any warranty arising as a result of custom, usage or trade and those arising under Law.
GENYMOBILE shall in no event be liable to the end user or licensee or any third party for any damages.

Downtime

GENYMOBILE may, from time to time, take down or shut down access to the software/application for maintenance, repair, or service as GENYMOBILEmay deem necessary in its sole discretion (« downtime »). The end user or licensee acknowledges that, during any downtime, he may not be able to access and use some or all parts of the software/application. GENYMOBILE may, but shall have no obligation to, make commercially reasonable efforts to notify to the end user or licensee in advance of such downtime, for example by displaying a notice during access of the software/application.

GENYMOBILE will make commercially reasonable efforts to keep the downtime to a minimum, but in no event GENYMOBILE shall be liable for such downtime.

Ownership

GENYMOBILE owns and retains all rights to:

the software/application she has developed and all modifications and improvements,
any trademarks, domain names, patents, software, copyrights, trade name and trade secret rights belonging to her, and other intellectual property rights, industrial property rights, and other proprietary rights of any kind, existing anywhere or under any law,
any other technology, invention, concept, system, method, process, and other element of the software/application developed by her,
Any derivative works made from modifications and improvements to the application.
Nothing in this agreement constitutes, or shall be interpreted or construed to constitute, any assignment, transfer or conveyance of any right, title or interest, or (except solely for the license expressly granted to the end user or the licensee under the article « license granted: Limited ») any license or use right, or any right to grant any license or right of use any GENYMOBILE’s property.

The end user or the licensee acknowledges that he can not acquire, by use or by any other means, and will not claim, any ownership, license, or other rights (except solely for the license expressly granted to the end user or the licensee underthe article « license granted: Limited »).

He also agrees to take no action, which may impair or jeopardize the GENYMOBILE’s property and rights.

The end user or the licensee can not make use of any trademarks or any signs owned by GENYMOBILE.

Basis of bargain

GENYMOBILE grants, free of charge, this license to the end user or licensee who accepts it.

Infringement

If use of the software/application may be enjoined due to a claim of infringement by a third party then, at its sole discretion, GENYMOBILE may do one of the following:

negotiate a license or other agreement so that the software/application is no longer subject to such a potential claim,
modify the software/application so that it becomes non-infringing, provided such modification can be accomplished without materially affecting the performance and functionality of the software/application,
replace the software/application with non-infringing software/application or,
terminate this license and the end user or the licensee shall stop using the software/application.
Modifications

GENYMOBILE may modify, amend, change, and cancel the license agreement. The end user or the licensee agrees that the acceptance of each such modification, amendment, change, and alteration shall be a condition precedent for the license, the access and use of the software/application. The license shall automatically terminate, without need for any notice, if the end user or the licensee fails to accept such modification, amendment, change when requested.

GENYMOBILE may, when she decides to do, install or make available any update to the software/application including, without limitation, modification, error correction, update, upgrade, enhancement, or change of the software/application.

GENYMOBILE has the right to make any modification at any time, without the obligation to provide any notice or obtain any consent or agreement from the end user or the licensee, and without any right for him to receive any notice or provide any consent or agreement thereto.

Statistics

GENYMOBILE may, without the prior consent of the end user or the licensee, perform all statistics.

Termination

GENYMOBILE may terminate this agreement at any time without cause and without need for any notice to the end user or to the licensee.

Upon the termination of this agreement, the end user or the licensee shall immediately cease using the software/application developed by GENYMOBILE. Any use of the software/application after termination of this agreement shall be deemed to be an infringement of GENYMOBILE’s intellectual property rights.

Forum for disputes and applicable Law

The parties hereto agree that the Paris Court will have exclusive jurisdiction to resolve any dispute between the end user or the licensee and GENYMOBILE. The parties hereby irrevocably consent and submit to, and waive any objection to, personal jurisdiction of such courts. Notwithstanding the foregoing, GENYMOBILE may apply to any court of competent jurisdiction for injunctive relief.

This agreement shall be governed by French Law, exclusive of any of its conflicts of law or international private law rules or principles that would result in the application of the law of any other jurisdiction.

*******

Terms of the paid Agreement version INDIE : Professional use limited to companies with fewer than three employees

Binding agreement

By acceptance of this end user license agreement, a legally binding contract and agreement, which sets forth the license and use rights for the software/application developed by GENYMOBILE, is created between the end user/licensee and GENYMOBILE, a corporation with an establishment in Paris (75004), 36, boulevard de Sébastopol.

The end user or the licensee agrees that any time when he accesses, uses the software developed by GENYMOBILE or logs into the software/application of GENYMOBILE, it reaffirms its acceptance and express agreement under these conditions. If the licensee or the end user does not agree to all the terms, he is not authorized to access or use the software/application. By accepting these terms, the licensee or the end user has specifically taken note of all GENYMOBILE’s rights and intellectual property rights, as well as exclusions of responsibilities and guarantees.

Warning: warranties and representations of the licensee

Licensee and the end user are solely responsible for the use, application, and implementation, and all decisions related to the use, application, and implementation of the software/application developed by GENYMOBILE.

License granted: Limited

GENYMOBILE grants the end user or the licensee a non-transferable, non-sublicenseable, non-assignable, terminable, limited, and non-exclusive license to access and use the software application developed by GENYMOBILE.

The user downloads the application says to do so in a professional and for the purposes of its business which is necessarily a business with fewer than three employees. This so-called INDIE license is limited to the use made in the company, prohibiting the user to subscribe several INDIE licenses. Therefore the licensee warrants, represents and undertakes to use the application solely for this approved use.

The end user and the licensee do not have any right or license to, and will not, directly or indirectly, in any manner whatsoever:

assign, transfer, sell, encumber or modify the software/application developed by GENYMOBILE or includethis applicationin a productwhatsoever,
use or utilize this software/application for any purpose or in any manner that is illegal or in violation of any applicable law or rights of any third party,
Generally speaking, all access, performance or use of the application except as expressly permitted by these terms and any use in accordance to GENYMOBILE’s purpose shall be deemed to be an infringement of GENYMOBILE’s intellectual property rights on its software/application and open all rights and remedies in connection with such infringement.

No support and no guarantee

GENYMOBILE is not required to provide or make available any support, maintenance, or other services to the end user or to the licensee.

If GENYMOBILE decided to offer support, it would be without warranty of any kind with respect to the response time, this possible response would occur in any event by email.

GENYMOBILE may, at any time, take down or shut down access the software/application developed for maintenance, repair, or for any reason whatsoever.

GENYMOBILE makes no warranty with respect to the application developed including, without limitation, regarding the modifications and improvements.

The application is provided « as is » and « where is ».

GENYMOBILE provides no commitment, no warranty to the end user or licensee.

GENYMOBILE disclaims:

Any liability of any nature whatsoever,
Any warranty and any support, maintenance or other service,
Any warranty of merchantability, non-infringement, ownership, accuracy, reliability, interoperability with other software or applications,
Any collateral security or quiet enjoyment or the use is not interrupted by virus or error-free, or that the end user will not meet errors,
Any use that is consistent with security needs and specific requirements by the end user or licensee,
Any warranty arising as a result of custom, usage or trade and those arising under Law.
GENYMOBILE shall in no event be liable to the end user orlicensee or any third party for any damages.

Downtime

GENYMOBILE may, from time to time, take down or shut down access to the software/application for maintenance, repair, or service as GENYMOBILE may deem necessary in its sole discretion (« downtime »). The end user or licensee acknowledges that, during any downtime, he may not be able to access and use some or all parts of the software/application. GENYMOBILE may, but shall have no obligation to, make commercially reasonable efforts to notify to the end user or licensee in advance of such downtime, for example by displaying a notice during access of the software/application.

GENYMOBILE will make commercially reasonable efforts to keep the downtime to a minimum, but in no event GENYMOBILE shall be liable for such downtime.

Ownership

GENYMOBILE owns and retains all rights to:

the software/application she has developed and all modifications and improvements,
any trademarks, domain names, patents, software, copyrights, trade name and trade secret rights belonging to her, and other intellectual property rights, industrial property rights, and other proprietary rights of any kind, existing anywhere or under any law,
any other technology, invention, concept, system, method, process, and other element of the software/application developed by her,
Any derivative works made from modifications and improvements to the application.
Nothing in this agreement constitutes, or shall be interpreted or construed to constitute, any assignment, transfer or conveyance of any right, title or interest, or (except solely for the license expressly granted to the end user or the licensee underthe article « license granted: Limited ») any license or use right, or any right to grant any license or right of use any GENYMOBILE’s property.

The end user or the licensee acknowledges that he can not acquire, by use or by any other means, and will not claim, any ownership, license, or other rights (except solely for the license expressly granted to the end user or the licensee underthe article « license granted: Limited »).

He also agrees to take no action, which may impair or jeopardize the GENYMOBILE’s property and rights.

The end user or the licensee can not make use of any trademarks or any signs owned by GENYMOBILE.

Basis of bargain

GENYMOBILE grants this license to the end user or licensee who accepts it.

In consideration of the rights granted (professional use limited to companies with fewer than three employees), the licensee shall pay online GENYMOBILE before downloading the application, a fixed annual license fee.

Infringement

If use of the software/application may be enjoined due to a claim of infringement by a third party then, at its sole discretion, GENYMOBILE may do one of the following:

negotiate a license or other agreement so that the software/application is no longer subject to such a potential claim,
modify the software/application so that it becomes non-infringing, provided such modification can be accomplished without materially affecting the performance and functionality of the software/application,
replace the software/application with non-infringing software/application or,
terminate this license and the end user or the licensee shall stop using the software/application.
Modifications

GENYMOBILE may modify, amend, change, and cancel the license agreement. The end user or the licensee agrees that the acceptance of each such modification, amendment, change, and alteration shall be a condition precedent for the license, the access and use of the software/application. The license shall automatically terminate, without need for any notice, if the end user or the licensee fails to accept such modification, amendment, change when requested.

GENYMOBILE may, when she decides to do, install or make available any update to the software/application including, without limitation, modification, error correction, update, upgrade, enhancement, or change of the software/application.

GENYMOBILE has the right to make any modification at any time, without the obligation to provide any notice or obtain any consent or agreement from the end user or the licensee, and without any right for him to receive any notice or provide any consent or agreement thereto.

Statistics

GENYMOBILE may, without the prior consent of the end user or the licensee, perform all statistics.

Duration and Termination

This license is granted for a period of one year, renewable by tacit agreement. GENYMOBILE will remember the deadline to the end user or to the licensee one month before the deadline, with a possible return within 15 days if necessary, with the need to pay the fixed annual license fee fixed. Without payment in this period and one month after the expiry of one year, the license is automatically terminated.

GENYMOBILE may terminate this license if the end user or to the licensee does not comply with the terms of this license for any reason whatsoever.

Upon the termination of this agreement or in the event of non-payment of the license fee, the end user or the licensee shall immediately cease using the software/application developed by GENYMOBILE. Any use of the software/application after termination of this agreement shall be deemed to be an infringement of GENYMOBILE’s intellectual property rights.

Forum for disputes and applicable Law

The parties hereto agree that the Paris Court will have exclusive jurisdiction to resolve any dispute between the end user or the licensee and GENYMOBILE. The parties hereby irrevocably consent and submit to, and waive any objection to, personal jurisdiction of such courts. Notwithstanding the foregoing, GENYMOBILE may apply to any court of competent jurisdiction for injunctive relief.

This agreement shall be governed by French Law, exclusive of any of its conflicts of law or international private law rules or principles that would result in the application of the law of any other jurisdiction.

*******

Terms of the paid AGREEMENT: Business use

Binding agreement

By acceptance of this end user license agreement, a legally binding contract and agreement, which sets forth the license and use rights for the software/application developed by GENYMOBILE, is created between the end user/licensee and GENYMOBILE, a corporation with an establishment in Paris (75004), 36, boulevard de Sébastopol.

The end user or the licensee agrees that any time when he accesses, uses the software developed by GENYMOBILE or logs into the software/application of GENYMOBILE, it reaffirms its acceptance and express agreement under these conditions. If the licensee or the end user does not agree to all the terms, he is not authorized to access or use the software/application. By accepting these terms, the licensee or the end user has specifically taken note of all GENYMOBILE’s rights and intellectual property rights, as well as exclusions of responsibilities and guarantees.

Warning: warranties and representations of the licensee

Licensee and the end user are solely responsible for the use, application, and implementation, and all decisions related to the use, application, and implementation of the software/application developed by GENYMOBILE.

License granted: Limited

GENYMOBILE grants the end user or the licensee a non-transferable, non-sublicenseable, non-assignable, terminable, limited, and non-exclusive license to access and use the software application developed by GENYMOBILE.

The end user or licensee who downloads the software/application developed by GENYMOBILE says to do so in a professional environment and/or in relation of the activities of the company. Nevertheless, the pecuniary license is limited to one year per user. Therefore, the end user or the licensee warrants, represents and undertakes to use the application/software only under the above conditions.

The end user and the licensee do not have any right or license to, and will not, directly or indirectly, in any manner whatsoever:

assign, transfer, sell, encumber or modify the software/application developed by GENYMOBILE or includethis applicationin a productwhatsoever,
use or utilize this software/application for any purpose or in any manner that is illegal or in violation of any applicable law or rights of any third party,
Generally speaking, all access, performance or use of the application except as expressly permitted by these terms and any use in accordance to GENYMOBILE’s purpose shall be deemed to be an infringement of GENYMOBILE’s intellectual property rights on its software/application and open all rights and remedies in connection with such infringement.

Support

GENYMOBILE may, in its sole discretion, directly or indirectly make available, but is not obligated, to provide a support by email regarding this application. Regarding this support, GENYMOBILE will try to give an answer to the questions that would be asked in a reasonable period of about 3 working days, working days agreeing Monday to Friday.

No guarantee and downtime

GENYMOBILE may, at any time, take down or shut down access the software/application developed for maintenance, repair, or for any reason whatsoever.

GENYMOBILE makes no warranty with respect to the application developed including, without limitation, regarding the modifications and improvements.

The applicationis provided « as is » and « where is ».

GENYMOBILE provides no commitment, no warranty to the end user or licensee.

GENYMOBILE disclaims:

Any liability of any nature whatsoever,
Any warranty and any support, except response within 3 working days, any maintenance or other service,
Any warranty of merchantability, non-infringement, ownership, accuracy, reliability, interoperability with other software or applications,
Any collateral security or quiet enjoyment or the use is not interrupted by virus or error-free, or that the end user will not meet errors,
Any use that is consistent with security needs and specific requirements by the end user or licensee,
Any warranty arising as a result of custom, usage or trade and those arising under Law.
GENYMOBILE shall in noevent be liableto the end user orlicensee orany third partyfor any damages.

GENYMOBILE may, from time to time, take down or shut down access to the software/application for maintenance, repair, or service as GENYMOBILE may deem necessary in its sole discretion (« downtime »). The end user or licensee acknowledges that, during any downtime, he may not be able to access and use some or all parts of the software/application. GENYMOBILE may, but shall have no obligation to, make commercially reasonable efforts to notify to the end user or licensee in advance of such downtime, for example by displaying a notice during access of the software/application.

GENYMOBILE will make commercially reasonable efforts to keep the downtime to a minimum, but in no event GENYMOBILE shall be liable for such downtime.

Ownership

GENYMOBILE owns and retains all rights to:

the software/application she has developed and all modifications and improvements,
any trademarks, domain names, patents, software, copyrights, trade name and trade secret rights belonging to her, and other intellectual property rights, industrial property rights, and other proprietary rights of any kind, existing anywhere or under any law,
any other technology, invention, concept, system, method, process, and other element of the software/application developed by her,
Any derivative works made from modifications and improvements to the application.
Nothing in this agreement constitutes, or shall be interpreted or construed to constitute, any assignment, transfer or conveyance of any right, title or interest, or (except solely for the license expressly granted to the end user or the licensee under the article « license granted: Limited ») any license or use right, or any right to grant any license or right of use any GENYMOBILE’s property.

The end user or the licensee acknowledges that he can not acquire, by use or by any other means, and will not claim, any ownership, license, or other rights (except solely for the license expressly granted to the end user or the licensee under the article « license granted: Limited »).

He also agrees to take no action, which may impair or jeopardize the GENYMOBILE’s property and rights.

The end user or the licensee can not make use of any trademarks or any signs owned by GENYMOBILE.

Basis of bargain

GENYMOBILE grants this license to the end user or licensee who accepts it.

In consideration of the rights granted (business use, one license by user for one year), the licensee shall pay online GENYMOBILE before downloading the application, a fixed annual license fee.

Infringement

If use of the software/application may be enjoined due to a claim of infringement by a third party then, at its sole discretion, GENYMOBILE may do one of the following:

negotiate a license or other agreement so that the software/application is no longer subject to such a potential claim,
modify the software/application so that it becomes non-infringing, provided such modification can be accomplished without materially affecting the performance and functionality of the software/application,
replace the software/application with non-infringing software/application or,
terminate this license and the end user or the licensee shall stop using the software/application.
Modifications

GENYMOBILE may modify, amend, change, and cancel the license agreement. The end user or the licensee agrees that the acceptance of each such modification, amendment, change, and alteration shall be a condition precedent for the license, the access and use of the software/application. The license shall automatically terminate, without need for any notice, if the end user or the licensee fails to accept such modification, amendment, change when requested.

GENYMOBILE may, when she decides to do, install or make available any update to the software/application including, without limitation, modification, error correction, update, upgrade, enhancement, or change of the software/application.

GENYMOBILE has the right to make any modification at any time, without the obligation to provide any notice or obtain any consent or agreement from the end user or the licensee, and without any right for him to receive any notice or provide any consent or agreement thereto.

Duration and Termination

This license is granted for a period of one year, renewable by tacit agreement. GENYMOBILE will remember the deadline to the end user or to the licensee one month before the deadline, with a possible return within 15 days if necessary, with the need to pay the fixed annual license fee fixed. Without payment in this period and one month after the expiry of one year, the license is automatically terminated.

GENYMOBILE may terminate this license if the end user or to the licensee does not comply with the terms of this license for any reason whatsoever.

Upon the termination of this agreement or in the event of non-payment of the license fee, the end user or the licensee shall immediately cease using the software/application developed by GENYMOBILE. Any use of the software/application after termination of this agreement shall be deemed to be an infringement of GENYMOBILE’s intellectual property rights.

Forum for disputes and applicable Law

The parties hereto agree that the Paris Court will have exclusive jurisdiction to resolve any dispute between the end user or the licensee and GENYMOBILE. The parties hereby irrevocably consent and submit to, and waive any objection to, personal jurisdiction of such courts. Notwithstanding the foregoing, GENYMOBILE may apply to any court of competent jurisdiction for injunctive relief.

This agreement shall be governed by French Law, exclusive of any of its conflicts of law or international private law rules or principles that would result in the application of the law of any other jurisdiction.
