TERMS OF USE

This page (together with the documents referred to on it) tells you the terms on which you may make use of our website www.mendeley.com (our "Site") and our software (our "Software"), whether as a user or a registered member. Please read these Terms of Use carefully before you start to use the Site and the Software. By using our Site and our Software, you indicate that you accept these Terms of Use and that you agree to abide by them. If you do not agree to these Terms of Use, please refrain from using our Site and our Software.


1. INFORMATION ABOUT US

1.1. www.mendeley.com is a site operated by Mendeley Limited ("we", "us" and "our"). We are registered in England and Wales under company number 6419015 and have our registered office at Second Floor, Cardiff House, Tilling Road, London NW2 1LJ. Our VAT number is 930 1117 75.

2. PURPOSE

2.1. The principal purposes of the Site are to:

2.1.1. 	assist you in the cataloguing and managing of your academic papers and articles ("Academic Papers");

2.1.2. 	share your academic and scientific knowledge with selected colleagues;

2.1.3. 	discover academic knowledge and enable detailed search of academic papers;

2.1.4. 	put you in touch with like-minded people and facilitate research projects.

3. ACCESSING OUR SITE

3.1. Although we aim to keep the Site available at all reasonable times, we may withdraw, suspend or amend the service we provide on our Site without notice including, for example, in the event of technical failures, upgrades, routine or emergency repair work or some reason outside our control. We will not be liable if for any reason our Site is unavailable at any time or for any period.

3.2. We restrict access to certain parts of our Site to users who have registered with us. If you register with us, you must provide true and accurate information about yourself. Should the registration information provided prove false or misleading (including your personal details), we may suspend or terminate your account.

3.3. If you choose a password or any other piece of information as part of our security procedures, you must treat such information as confidential, and you must not disclose it to any third party. We have the right to disable any account or password, if in our reasonable opinion, your account information has been compromised. You must tell us immediately if you suspect any unauthorised use of your account or access to your password. You are solely responsible for any and all use of your account.


4. OUR SOFTWARE - EULA

4.1. We allow you to download our proprietary software (including any updates to the software that we may make available from time to time) from the Site (our "Software") or obtain the Software from our users for the purposes of cataloguing and managing your Academic Papers.

4.2. By proceeding to download and install our Software (or any updates to the Software that we may make available from time to time), you agree to the terms of this EULA and these Terms of Use and your use of such Software (including any updates) will be in accordance with this EULA and these Terms of Use. If you do not agree to these, we are unwilling to license our Software to you. In this case, you may not download or install our Software and you must discontinue the downloading or installation process.

4.3. If you choose to download and install our Software and connect it to a Mendeley Web account by entering your account details, our Software collects (even while you are offline) certain data which is uploaded to our servers when you synchronize your Software and Mendeley Web account. We collect data relating to your:

4.3.1. 	Academic Papers such as the author name, title and keywords for the purpose of assisting in the:
 * cataloguing of your and other user's Academic Papers;
 * indexing of academic articles and materials;
 * searching of the indexed academic articles and materials;
 * improving the document recognition process for all users;

4.3.2. 	reading, cataloguing and accessing your Academic Papers for the purpose of:
 * generating recommendations for you including articles that you may be interested in reading and these recommendations are displayed in your private account;
 * preparing individualized statistical information which will only be made available to you via your private account; and
 * generating anonymous aggregate statistical information regarding all users' interests, habits and reading patterns. This statistical data does not contain any personally identifiable information and is made available to registered users on an anonymous and aggregated basis.

Please see our privacy policy for more information on how we collect and use your personal data.

4.4. You may (at your option) use our Software to make a regular back-up copy of your Academic Papers to our servers so that you can access your Academic Papers using the Internet and you hereby grant to us a limited licence to upload, copy, store, use, modify, display and reproduce your Academic Papers for the sole purpose of providing the Mendeley service to you.

4.5. We hereby grant to you a non-exclusive, personal, non-transferable licence to use or distribute to other users our Software in accordance with this EULA and Terms of Use.

4.6. You may:

4.6.1. 	download, install and use the Software for the purposes of cataloguing and managing your Academic Papers;

4.6.2. 	distribute our Software so that other users may install and use the Software for the purposes of cataloguing and managing their Academic Papers;

4.6.3. 	make a copy of our Software for back-up purposes;

4.7. Except as we permit in this EULA or as permitted by any local law, you undertake:

4.7.1. 	not to copy our Software except where such copying is incidental to normal use of our Software, or where it is necessary for the purpose of back-up or operational security;

4.7.2. 	to use our Software in accordance with the EULA and the Terms of Use;

4.7.3. 	not to rent, lease, sub-license, loan, translate, merge, adapt, vary or modify our Software (though you may contact us at office [at] mendeley [dot] com to obtain a written permission from us to do so);

4.7.4. 	not to make alterations to, or modifications of, the whole or any part of our Software, nor permit our Software or any part of it to be combined with, or become incorporated in, any other programs (though you may contact us at office [at] mendeley [dot] com to obtain a written permission from us to do so);

4.7.5. 	not to disassemble, decompile, reverse engineer or create derivative works based on the whole or any part of our Software nor attempt to do any such thing except to the extent that (by virtue of section 296A of the Copyright, Designs and Patents Act 1988) such actions cannot be prohibited;

4.7.6. 	to not remove or alter our (or our licensor's) copyright notice on our Software;

4.7.7. 	not to provide or otherwise make available the Software in whole or in part.

4.8. You acknowledge that all copyright and other intellectual property rights in our Software belong to us and (as the case may be) our licensors, and you have no rights in or to our Software other than the right to use the Software in accordance with the terms of this EULA.


5. INTERACTIVE AND SOCIAL NETWORKING SERVICES

5.1. We may from time to time provide interactive services on our Site, including, without limitation:

5.1.1. 	forums for discussion of issues of interest to users and members of our Site;

5.1.2. 	wikis for users and members to share and collaborate on knowledge relating to issues of mutual interest;

5.1.3. 	social networking services where registered members can: (i) create online personal profiles; and (ii) interact with other members;

5.1.4. 	facilities for the uploading and sharing of users' and members' Academic Papers with other users or private user groups you have created;

5.1.5. 	generation of statistics and recommendations.

5.2. Any use of our interactive services should comply with our content standards below.

5.3. We do not oversee, monitor or moderate the content that you upload to our Site using our interactive services and neither do we vet or screen users of our Site. You use the Site at your own risk and you should take care with the information you post on our Site or that you provide to members.


6. ACCEPTABLE USE

6.1. You may use our Site and our Software only for lawful purposes. You may not use our Site or our Software:

6.1.1. 	to send, knowingly receive, upload, download, use or re-use any academic papers or articles without the permission of the copyright owner. However, you may perform these actions if you are the copyright owner, have the copyright owner's permission, are permitted to do so under license from an Open Access database or a Creative Commons license, or are permitted to do so by copyright fair dealing or fair use exceptions in any relevant jurisdiction. You can read more about Creative Commons licenses here: www.creativecommons.org.

6.1.2. 	in any way that breaches any applicable local, national or international law or regulation;

6.1.3. 	in any way that is unlawful or fraudulent, or has any unlawful or fraudulent purpose or effect;

6.1.4. 	to send, knowingly receive, upload, download, use or re-use any material which does not comply with our content standards in clause 7 below;

6.1.5. 	to transmit, or procure the sending of, any unsolicited or unauthorised advertising or promotional material or other commercial messaging;

6.1.6. 	to knowingly transmit any data, send or upload any material that contains viruses, Trojan horses, worms, time-bombs, keystroke loggers, spyware, adware or any other harmful programs or similar computer code designed to adversely affect the operation of any computer software or hardware.

6.2. Unless you have express prior written permission, you may not use any spider- or bot-like system, software or other device or program (whether automated or otherwise) to extract content, data, information or other material from the Site.

6.3. You also agree:

6.3.1. 	not to access without authority, interfere with, damage or disrupt:
      	
 * any part of our Site;
 * any equipment or network on which our Site is stored;
 * our Software or any software used in the provision of our Site; or
 * any equipment or network or software owned or used by any third party.


7. CONTENT STANDARDS

7.1. These content standards apply to any and all material you upload to or post on the Site including your comments in forums, wikis, personal profiles and communications with members and your Academic Papers ("Content") and your use of the Site.

7.2. You must comply with the spirit of the following standards as well as the letter.

7.3. Content must comply with applicable law in the UK and in any country from which they are posted.

7.4. Content must not:

7.4.1. 	contain any material which is defamatory of any person, obscene, offensive, hateful or inflammatory;

7.4.2. 	promote sexually explicit material, violence, promote discrimination based on race, sex, religion, nationality, disability, sexual orientation or age;

7.4.3. 	infringe any copyright, database right, trade mark or other intellectual property right of any other person;

7.4.4. 	be likely to deceive any person or made in breach of any legal duty owed to a third party, such as a contractual duty or a duty of confidence or promote any illegal activity;

7.4.5. 	be threatening, abuse or invade another's privacy, or cause annoyance, inconvenience or needless anxiety or be likely to harass, upset, embarrass, alarm or annoy any other person;

7.4.6. 	be used to impersonate any person, or to misrepresent your identity or affiliation with any person or give the impression that they emanate from us, if this is not the case;

7.4.7. 	advocate, promote or assist any unlawful act such as (by way of example only) copyright infringement or computer misuse.


8. SUSPENSION AND TERMINATION

8.1. Failure to comply with the acceptable use or content standards in these Terms of Use constitutes a material breach of the Terms of Use upon which you are permitted to use our Site, and may result in our taking all or any of the following actions:

8.1.1. 	immediate, temporary or permanent withdrawal of your right to use our Site;

8.1.2. 	immediate, temporary or permanent removal of any posting or material uploaded by you to our Site;

8.1.3. 	issue of a warning to you;

8.1.4. 	legal action against you including proceedings for reimbursement of all costs on an indemnity basis (including, but not limited to, reasonable administrative and legal costs) resulting from the breach;

8.1.5. 	disclosure of such information to law enforcement authorities or third party complainants as we reasonably feel is necessary or required;

8.1.6. 	disclosure of your identity to any third party who is claiming that any material posted or uploaded by you to our Site constitutes a violation of their intellectual property rights, right to privacy or other legal rights.

8.2. The responses described in this clause are not limited, and we may take any other action we reasonably deem appropriate.

8.3. You hereby indemnify us against all and any liability, losses, damages, claims, costs and expenses arising out of your failure to comply with these Terms of Use and, in particular, the acceptable use or content standards.


9. COMPLAINTS

9.1. If you wish to complain about any use of our Site or Content posted to our Site, please contact us at complaints [at] mendeley [dot] com following the guidelines on the Copyright Compliance Policy page. We will then review your complaint and decide whether it complies with our Terms of Use and, in particular, our content standards. If not, we will deal with the matter as described above (see section 8). We will inform you of the outcome of our review within a reasonable time of receiving your complaint.


10. CONTENT OWNERSHIP AND DELETION

10.1. By using the Mendeley Site and posting any Content (including, without limitation, Academic Papers) on or through the Site, you hereby grant to us a world-wide licence to use, modify, display, reproduce, communicate and distribute such Content as we deem reasonably necessary in our discretion to provide our service (including search results) through our Site. We do not claim any ownership rights in your or any other user’s Content. After posting or uploading your Content to the Site, except for the license granted to us hereunder, you continue to retain all ownership rights in such Content and you continue to have the right to use your Content in any way you choose.

10.2. By posting your Content you represent and warrant that: (i) you are permitted to use your Content on the Site; (ii) your Content was produced in compliance with all applicable laws and regulations; (iii) your Content does and will not, in any way, violate or breach any of these Terms of Use; (iv) your Content does not contain libelous, tortious, or otherwise unlawful information, infringe or violate any copyright or other right, or contain any matter the publication or sale of which will violate any federal or state statute or regulation; (v) your Content is not obscene or in any other manner unlawful; (vi) shall not be injurious to the health of any user; and (vii) we shall not be required to pay or incur any sums to any person or entity as a result of our use or exploitation of your Content.

10.3. You may delete your Content at any time although where you make use of the interactive features of our service to share Content with other users and registered members (e.g., sending a personal message to another user) you may not be able to remove such Content. When you delete your Content, our right to use it shall cease save that we may retain a copy in backup for a reasonable period of time and as necessary to comply with our legal obligations. However, please note that the deleted Content will not be generally available to other users or registered members.

10.4 Non-personal information about Academic Papers, such as bibliographic information, abstracts, keywords, or cited references will persist in our database and will not be deleted automatically when you deactivate your account, unless you specifically request this by contacting us at privacy [at] mendeley [dot] com. If non-personal information about Academic Papers is in the public domain or has also been uploaded by other users, we may opt to retain it in our database to ensure continued service to these other users.

10.5. Save for the Content, we are the owner or the licensee of all intellectual property rights in our Site and in the material published on it. Those works are protected by copyright laws and treaties around the world. You may use these rights and the material solely for the purpose of using the Site and our service in accordance with these Terms of Use.

10.5. If we determine, in our sole discretion and judgment, that any Content does or may violate any of the terms of Terms of Use, we reserve the right, at any time and without limiting any and all other rights we may have under these Terms of Use, at law or in equity, to: (i) refuse to allow you to post Content; (ii) remove and delete your Content; (iii) revoke your right to use the Site; and/or (iv) use any technological, legal, operational or other means available to us to enforce the provisions of these Terms of Use, including, without limitation, blocking specific IP addresses or deactivating your registration on the Site.

11. OUR SITE CHANGES REGULARLY

11.1. We aim to update our Site regularly. If the need arises such as an operational issue, we may suspend access to our Site, or close it indefinitely. Any of the material on our Site may be out of date at any given time, and we are under no obligation to update such material.


12. DISCLAIMER OF LIABILITY

THE MENDELEY SERVICE AND SITE, AND ALL CONTENT ARE MADE AVAILABLE ON AN "AS IS" AND "AS AVAILABLE" BASIS, WITHOUT ANY REPRESENTATION OR WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, OR ANY GUARANTY OR ASSURANCE THE MENDELEY SERVICE OR SITE WILL BE AVAILABLE FOR USE, OR THAT ALL FEATURES, FUNCTIONS OR OPERATIONS WILL BE AVAILABLE OR PERFORM AS DESCRIBED. Without limiting the foregoing, we are not responsible or liable for any malicious code, delays, inaccuracies, errors, or omissions arising out of your use of the Mendeley service or Site. You understand, acknowledge and agree that you are assuming the entire risk as to the quality, accuracy, performance, timeliness, adequacy, completeness, correctness, authenticity, security and validity of any and all features and functions of the Mendeley service and Site, including, without limitation, Content and materials associated with your use of the Mendeley service and Site.

YOU UNDERSTAND AND AGREE THAT, TO THE FULLEST EXTENT PERMISSIBLE BY LAW, MENDELEY LIMITED, ANY OF THEIR AFFILIATES, OR THEIR RESPECTIVE SUCCESSORS AND ASSIGNS, OR ANY OF THEIR RESPECTIVE OFFICERS, DIRECTORS, EMPLOYEES, AGENTS, REPRESENTATIVES, LICENSORS, OPERATIONAL SERVICE PROVIDERS, ADVERTISERS, OR SUPPLIERS, SHALL NOT BE LIABLE FOR ANY LOSS OR DAMAGE, OF ANY KIND, DIRECT OR INDIRECT, IN CONNECTION WITH OR ARISING FROM USE OF THE MENDELEY SERVICE OR THIS SITE, INCLUDING, WITHOUT LIMITATION, COMPENSATORY, CONSEQUENTIAL, INCIDENTAL, INDIRECT, SPECIAL OR PUNITIVE DAMAGES.

Some jurisdictions do not allow for the exclusion of certain warranties or certain limitations on damages and remedies, accordingly some of the exclusions and limitations described in these Terms of Use may not apply to you.


13. RELIANCE ON SITE INFORMATION

13.1. We do not claim that the information on any specific subject contained on our Site is accurate, comprehensive, verified, complete or error free. Commentary and other materials posted on our Site are not intended to amount to advice on which reliance should be placed. You should seek appropriate professional advice.

13.2. We therefore disclaim all liability (whether arising in contract, tort or otherwise) and responsibility arising from any reliance placed by you on materials and information available through our Site.


14. INFORMATION ABOUT YOU AND YOUR VISITS TO OUR SITE

14.1. We process information about you in accordance with our privacy policy. By using our Site, you consent to such processing and you warrant that all data provided by you is accurate.


15. VIRUSES, HACKING AND OTHER OFFENCES

15.1. You must not misuse our site by knowingly introducing viruses, trojans, worms, logic bombs or other material which is malicious or technologically harmful. You must not attempt to gain unauthorised access to our Site, the server on which our Site is stored or any server, computer or database connected to our Site. You must not attack our Site via a denial-of-service attack or a distributed denial-of service attack.

15.2. By breaching this provision, you would commit a criminal offence under the Computer Misuse Act 1990. We will report any such breach to the relevant law enforcement authorities and we will co-operate with those authorities by disclosing your identity to them. In the event of such a breach, your right to use our Site will cease immediately.

15.3. We will not be liable for any loss or damage caused by a distributed denial-of-service attack, viruses or other technologically harmful material that may infect your computer equipment, computer programs, data or other proprietary material due to your use of our Site or to your downloading of any material posted on it, or on any website linked to it.


16. LINKS FROM OUR SITE

16.1. Where our Site contains links to other sites and resources provided by third parties, these links are provided for your information only. We have no control over the contents of those sites or resources, and accept no responsibility for them or for any loss or damage that may arise from your use of them.


17. JURISDICTION AND APPLICABLE LAW

17.1. The English courts will have non-exclusive jurisdiction over any claim arising from, or related to, a visit to our Site although we retain the right to bring proceedings against you for breach of these conditions in your country of residence or any other relevant country. These terms of use are governed by English law.


18. TRADE MARKS

18.1. "Mendeley™" is a trade mark of Mendeley Limited.


19. VARIATIONS

19.1. We may revise these terms of use at any time by amending this page. You are expected to check this page from time to time to take notice of any changes we make, as they are binding on you.


20. UNITED STATES OF AMERICA FEDERAL AGENCIES

20.1. Use by U.S.A. federal agencies will follow the amended terms found here.


21. YOUR CONCERNS

21.1. If you have any comments on our Site or our Software, please contact us.

Thank you for visiting our Site and using our Software.


These Terms of Use were last updated on 16, November, 2010.

Copyright © 2010 Mendeley Ltd. – All Rights Reserved.
