Terms of Use.

TERMS OF USE

Last updated: November 28, 2007

PLEASE READ THESE TERMS OF USE CAREFULLY BEFORE USING THIS WEBSITE.

Welcome to the SpiderOak website ("Site"). SpiderOak maintains this Site to provide general information to our visitors. All use of this Site is subject to the following terms and conditions ("Terms of Use"). By accessing and browsing this Site, you agree to be bound by these Terms of Use.

Features Subject to Separate Terms. Some of the features offered through SpiderOak, such as our data storage services, are subject to terms of use, rules and policies in addition to or in lieu of these Terms of Use. If you choose to use those features, you agree that your use of those features will be subject to such additional or separate terms of use, rules and/or policies, as applicable.

Copyright. This Site, including all text, images, software and other content contained herein, is the property of SpiderOak or its suppliers and is protected by United States and international copyright laws. The compilation and arrangement of all content on this Site is the exclusive property of SpiderOak and is protected by United States and international copyright laws. All rights reserved.

Trademarks. All SpiderOak marks, graphics, logos, designs and trade names used and displayed on this Site are service marks or trademarks of SpiderOak and are the sole and exclusive property of SpiderOak. The "look and feel" of this Site constitutes proprietary trade dress of SpiderOak. All other trademarks not owned by SpiderOak that appear on this Site are the property of their respective owners. You may not use any such marks for any purpose whatsoever without the express prior written permission of the owner.

SpiderOak Intellectual Property. SpiderOak grants you a personal, non-exclusive, non-transferable, limited license, exercisable solely during the term of this Agreement, to use SpiderOak technology and software furnished to you by SpiderOak (collectively, "SpiderOak Intellectual Property") solely for the purpose of accessing and using the Services. You shall have no right to use the SpiderOak Intellectual Property for any purpose other than accessing and using the Services. You shall not (a) copy, reproduce, modify, adapt, create any derivative works from, distribute, transmit or otherwise exploit the SpiderOak Intellectual Property or (b) directly or indirectly reverse engineer, decompile, disassemble or otherwise attempt to derive source code or other trade secrets from any of the SpiderOak Intellectual Property. Except for the rights expressly granted above, all rights, title and interest in and to the SpiderOak Intellectual Property shall remain solely with and are hereby reserved to SpiderOak.

Use of Site; Restrictions. You may view and print material displayed on this Site subject to the following conditions: (a) the materials may be used solely for your own, personal information and not for commercial use; and (b) you must retain without modification all copyright, trademark and other proprietary notices affixed to or contained in the materials you print and all copies thereof. You may not copy or otherwise use this Site or any portion hereof, except as expressly provided above. You may not reproduce, download, republish, frame, transmit, distribute, sell, license, modify, alter, reverse engineer or prepare derivative works from this Site or any portion hereof, except with the express prior written permission of SpiderOak. Use of spiders, data mining tools, robots and similar data gathering and extraction tools is expressly prohibited, except by publicly available Internet search engine portals solely for purposes of indexing this Site. In the event you link to this Site, you agree to remove any such links to this Site (or any portion hereof) to which SpiderOak objects promptly upon request. Nothing contained in this Site shall be construed as conferring by implication, estoppel or otherwise any license or right under any copyright, patent, trademark or other proprietary interest of SpiderOak or any third party. Any rights not expressly granted herein are reserved.

Indemnification. You agree to indemnify, defend and hold harmless SpiderOak, its affiliates and their respective directors, officers, employees and agents, licensors, representatives and third party providers to this Site from and against all losses, expenses, damages and costs, including reasonable attorneys' fees, resulting from any violation of these Terms of Use by you, including but not limited to any breach or alleged breach of any of your representations, warranties or undertakings hereunder. SpiderOak reserves the right to assume, at its sole expense, the exclusive defense and control of any matter subject to indemnification by you, in which event you will fully cooperate with SpiderOak in asserting any available defenses.

Notice and Procedure for Making Claims of Infringement. SpiderOak respects the intellectual property of others, and we ask our users to do the same. If you believe your copyrighted materials have been copied in a way that constitutes copyright infringement, please follow our Procedure for Making Claims of Copyright, which includes instructions on how to contact us to report possible copyright infringement by our users. ALL INQUIRIES NOT RELATING TO SUCH A CLAIM WILL NOT RECEIVE A RESPONSE.

No Rendering of Advice. The information contained in or made available through this Site is provided for informational purposes only and should not be construed as rendering consulting, technical, security, engineering, legal or other professional advice of any kind. Your use of this Site does not give rise to a client, advisory, fiduciary or professional services relationship between you and SpiderOak.

Accuracy of Information. While SpiderOak uses reasonable efforts to furnish accurate and up-to-date information, SpiderOak does not warrant that any information contained in or made available through this Site is accurate, complete, reliable, current or error-free. SpiderOak assumes no liability or responsibility for any errors or omissions in the content of this Site or such other materials or communications.

Disclaimer of Warranties and Limitations of Liability. THIS SITE IS PROVIDED BY SPIDEROAK ON AN "AS IS" AND "AS AVAILABLE" BASIS. USE OF THIS SITE IS AT YOUR SOLE RISK. TO THE FULL EXTENT PERMISSIBLE BY APPLICABLE LAW, SPIDEROAK AND ITS AFFILIATES AND SUPPLIERS DISCLAIM ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, SYSTEM INTEGRATION, TITLE AND NONINFRINGEMENT. WITHOUT LIMITING THE FOREGOING, SPIDEROAK AND ITS AFFILIATES AND SUPPLIERS MAKE NO REPRESENTATIONS OR WARRANTIES OF ANY KIND AS TO THE OPERATION OR AVAILABILITY OF THIS SITE OR THE INFORMATION, CONTENT, MATERIALS, PRODUCTS OR SERVICES INCLUDED ON OR MADE AVAILABLE THROUGH THIS SITE. SPIDEROAK DOES NOT WARRANT THAT THIS SITE WILL BE UNINTERRUPTED OR SECURE, OR THAT THIS SITE IS FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS.

SPIDEROAK AND ITS AFFILIATES AND SUPPLIERS WILL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING FROM OR IN CONNECTION WITH THE USE OF THIS SITE, INCLUDING, BUT NOT LIMITED TO, DIRECT, INDIRECT, INCIDENTAL, PUNITIVE AND CONSEQUENTIAL DAMAGES (INCLUDING, WITHOUT LIMITATION, LOSS OF PROFITS, GOODWILL, DATA OR USE), EVEN IF SUCH PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE FOREGOING LIMITATION SHALL APPLY REGARDLESS OF THE FORM OF ACTION AND WHETHER IN CONTRACT, BREACH OF WARRANTY, TORT, NEGLIGENCE, STRICT LIABILITY OR OTHERWISE. CERTAIN STATE LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, YOU MIGHT HAVE ADDITIONAL RIGHTS. IF YOU ARE DISSATISFIED WITH THIS SITE OR ANY PORTION HEREOF, OR WITH ANY OF THESE TERMS OF USE, YOUR SOLE AND EXCLUSIVE REMEDY IS TO DISCONTINUE USING THIS SITE.

Links to Third Party Websites. For your convenience, this Site may provide hyperlinks to websites, servers and other resources maintained by third parties over which SpiderOak does not have control, including, without limitation, message boards and/or links to Web sites or pages that are framed within this Site. Even if such materials are framed within this Site and appear to be a part of this Site, SpiderOak does not evaluate, endorse or guarantee content found in such sites. SpiderOak does not assume any responsibility or liability for the actions, products, services or content of these sites or the parties that operate them. You should carefully review their privacy statements and other conditions of use. Your use of these sites is entirely at your own risk.

Feedback and Other Submissions. All comments, feedback, suggestions, ideas and similar submissions furnished to SpiderOak in connection with your use of this Site shall be deemed assigned to and shall remain the exclusive property of SpiderOak. No such submissions shall be subject to any obligation of confidence on the part of SpiderOak, and SpiderOak shall be entitled to unrestricted use and disclosure of such submissions throughout the world for any purpose whatsoever, commercial or otherwise, without any obligation to compensate you for such use or disclosure. You represent that you have the lawful right to furnish such submissions to SpiderOak and agree that you will not submit any information unless you are legally entitled to do so.

Termination or Suspension of Access; Modifications to Site. SpiderOak reserves the right to terminate, suspend or otherwise restrict your access to this Site, or any portion hereof, with or without notice at any time for any reason whatsoever including, but not limited to, your violation of these Terms of Use or any inappropriate or unlawful behavior on your part. In addition, SpiderOak reserves the right to modify or discontinue this Site or any portion hereof at any time with or without notice. SpiderOak shall not be liable to you or any third party for any such termination, suspension, restriction, modification or discontinuance.

Dispute Resolution. Any controversy or claim arising out of or relating to these Terms of Use or breach hereof, or otherwise relating to this Site (with the exception of injunctive relief sought by SpiderOak for any violation of SpiderOak's proprietary rights), shall be settled by binding arbitration administered by the American Arbitration Association in accordance with its then-current rules. The arbitration shall be decided by one (1) arbitrator, who shall be an attorney having experience and familiarity with information technology disputes. The language of the arbitration shall be English. The location of arbitration shall be Chicago, Illinois, USA. The arbitrator may award to the prevailing party, if any, as determined by the arbitrator, its costs and expenses, including reasonable attorneys' fees. Except as may be required by law, neither a party nor an arbitrator may disclose the existence, content or results of any arbitration hereunder without the prior written consent of both parties. To the fullest extent permitted by applicable law, no such arbitration shall be joined to an arbitration involving any other party subject to these Terms of Use, whether through class arbitration proceedings or otherwise. Each party hereby waives its right to a trial by jury for any disputes between the parties.

Applicable Laws; Exclusive Jurisdiction. SpiderOak maintains this Site in the USA. SpiderOak makes no representation that this Site or any content on or accessed through this Site is appropriate or available for use in other jurisdictions. You are responsible for compliance with all local laws and regulations, as applicable. Use of this Site and any dispute arising therefrom shall be governed by the laws of the State of Illinois, USA, without regard to principles of conflict of laws. SUBJECT TO THE DISPUTE RESOLUTION PROCEDURES SET FORTH ABOVE, ANY LEGAL ACTION OR PROCEEDING ARISING OUT OF OR RELATING TO THESE TERMS OF USE OR YOUR ACCESS TO OR USE OF THIS SITE SHALL BE INSTITUTED ONLY IN A STATE OR FEDERAL COURT LOCATED IN CHICAGO, COOK COUNTY, ILLINOIS, AND YOU EXPRESSLY CONSENT TO THE EXCLUSIVE JURISDICTION OF SUCH COURTS.

Modifications. SpiderOak reserves the right to modify these Terms of Use at any time upon posting. By continuing to use this Site after any changes are posted, you are signifying your acceptance of the revised terms and conditions, regardless of whether you have reviewed them. Please visit this page regularly to review the then-current Terms of Use to which you are bound.

Privacy. Please review our Privacy Policy, which also governs your visit to this Site and is incorporated herein by reference, to understand our practices.

Entire Agreement. These Terms of Use, together with the SpiderOak Privacy Policy, constitutes the entire agreement between you and SpiderOak governing your use of this Site and supersedes any prior agreements between you and SpiderOak with respect to the subject matter hereof. Notwithstanding the foregoing, as stated above, you also may be subject to additional or separate terms of use, rules and/or policies that may apply when you use certain features made available through this Site.

Miscellaneous. If there is a determination that any provision of these Terms of Use is invalid or unenforceable under applicable law, that determination will not affect the rest of these Terms of Use, and these Terms of Use shall be deemed amended to the minimum extent necessary to make them valid and enforceable. The failure of SpiderOak to exercise or enforce any right or provision of these Terms of Use shall not constitute a waiver of such right or provision. Regardless of any statute or law to the contrary, any claim or cause of action against SpiderOak arising out of or related to use of this Site or under these Terms of Use must be filed within one (1) year after such claim or cause of action arose or be forever barred. The section titles in these Terms of Use are for convenience only and have no legal or contractual effect.

Consent to Electronic Delivery of Notices. When you visit SpiderOak or send e-mails to us, you are communicating with us electronically. You consent to receive communications from us electronically, including without limitation by e-mail or by posting notices on this Site. You agree that all agreements, notices, disclosures and other communications that we provide to you electronically satisfy any legal requirement that such communications be in writing. To withdraw your consent to receive notices electronically, you must notify us of your withdrawal of such consent and discontinue your use of this Site.

Minors. This Site is not intended for use by or availability to minors under the age of 14. IF YOU ARE UNDER 14 YEARS OF AGE, YOU MAY NOT ACCESS OR USE THIS SITE. By USING THIS SITE, YOU REPRESENT TO SPIDEROAK THAT YOU ARE 14 YEARS OF AGE OR OLDER. IF YOU ARE UNDER THE AGE OF 18, YOU HEREBY REPRESENT THAT YOU ARE USING THIS SITE WITH THE CONSENT OF YOUR PARENT OR LEGAL GUARDIAN, AND YOUR PARENT OR LEGAL GUARDIAN HEREBY AGREES ON YOUR BEHALF TO BE LEGALLY BOUND BY THESE TERMS OF USE.

Contact Information. If you have any questions regarding this Site, please contact SpiderOak at termsofuse@spideroak.com and include the following statement in the subject line: "SpiderOak Terms of Use Question".


PROCEDURE FOR MAKING CLAIMS OF COPYRIGHT INFRINGEMENT

Pursuant to Title 17, United States Code, Section 512(c)(2), all notifications of claimed copyright infringement on this Site should be sent ONLY to our Designated Agent.

NOTE: THE FOLLOWING INFORMATION IS PROVIDED SOLELY FOR NOTIFYING SPIDEROAK THAT YOUR COPYRIGHTED MATERIAL MAY HAVE BEEN INFRINGED BY OUR USERS. Do not send any inquiries unrelated to copyright infringement (e.g., requests for technical assistance or customer service) to the contact listed below. You will not receive a response if sent to that contact.

Written notification must be submitted to the following Designated Agent:

Service Provider(s): SpiderOak

Name of Agent Designated to Receive Notification of Claimed Infringement: Ethan Oberman

Full Address of Designated Agent to Which Notification Should be Sent:

SpiderOak, Inc.
555 Huehl Road
Northbrook, IL 60062
Telephone Number of Designated Agent: 847.564.8900

Facsimile Number of Designated Agent: 847.564.1202

Email Address of Designated Agent: copyright@spideroak.com

Under Title 17, United States Code, Section 512(c)(3)(A), the Notification of Claimed Infringement must include the following:

An electronic or physical signature of the owner or of the person authorized to act on behalf of the owner of the copyright interest;
Identification of the copyrighted work (or works) that you claim has been infringed;
A description of the material that you claim is infringing, and the location where the original or an authorized copy of the copyrighted work exists (for example, the URL of the page of the website where it is lawfully posted; the name, edition and pages of a book from which an excerpt was copied; etc.);
A clear description of where the infringing material is located on our website, including as applicable its URL, so that we can locate the material;
Your address, telephone number and e-mail address;
A statement that you have a good faith belief that the disputed use is not authorized by the copyright owner, its agent or the law; and
A statement by you, made under penalty of perjury, that the above information in your notice is accurate and that you are the copyright owner or authorized to act on the copyright owner's behalf.
