
Your access to and use of the sites is subject to these terms , the Kink Privacy Policy and any other terms contained on the Web Site ( " Terms of Use " ) . Every time you go to the Web Site or WAP site , you agree to access and use the sites , and the material on the sites , in accordance with the Terms of Use . The Terms of Use are a legally binding agreement between you and us . 1 Changes to the Terms of Use 1.1 From time to time , we may need to change these Terms of Use . We may change the Terms of Use at any time by posting the changed Terms on the Sites , and by posting a notice to users on our homepage stating that a change has occurred . 1.2 Any change in the Terms of Use will not affect the terms of any pre-existing agreement between you and us regarding your acquisition of any products or services from the sites . 2 Usage Rules 2.1 The content and information on the sites are provided for your personal use only . 2.2 Unless expressly stated otherwise on the sites , you may download the content and information on the sites onto your personal computer , but only to the extent necessary to allow you to view that content and information . You may also print hard copies of that content and information , but only for your own personal use and reference . 2.3 You must use the Sites in a responsible manner , and in compliance with all relevant rules . 2.4 If you are under 18 years of age , you must obtain a parent or guardian 's consent before accessing or using Kink Kommunity . 2.5 You must not : ( a ) change , modify , adapt , manipulate , reverse engineer , decompile , distort or enhance any of the content or information on the Sites ; ( b ) incorporate or merge any of the content on the Sites with any other material , including advertising or promotional material ; ( c ) create HTTP links from the Sites to any other web site on the Internet ; or ( d ) send , post , communicate or transmit to or via the Sites ( including any chat rooms ) any information or material which infringes a third party 's rights ( including intellectual property rights ) , or which is obscene , indecent , inflammatory , pornographic , defamatory , illegal , misleading or deceptive ; ( e ) use the Sites or any facilities available on or via the Sites ( including any chat rooms ) to defame , harass , threaten , menace or offend any person , or in a way which inhibits another person from using or enjoying the Sites or those facilities ; ( f ) tamper with , hinder the operation of , or make unauthorised modifications to the Sites or any content on the Sites ; ( g ) knowingly transmit any virus , worm , trojan horse or other disabling feature to or via the Sites ; ( h ) use the Sites to send commercial , unsolicited or bulk electronic messages to anyone or in any other way which would constitute an infringement of the Spam Act 2003 ( Cth ) ; ( i ) use another person 's name , username or password on the Sites or to access any content on the Sites ; or ( j ) attempt to do , or permit another person to do , any of the above acts . 3 Operation of the Sites 3.1 We will use reasonable efforts to make sure that you can access and use the Sites at all times . However , despite our efforts , the Sites may not be accessible at all times and you may experience interruptions , delays , errors or faults in your use of and access to the Sites . We will not be responsible to you or anyone else if these things occur . 3.2 When you are using the Sites , we may require you to re-authenticate yourself from time to time - for example , if there has been a period of inactivity on the connection between your internet browser and our servers . We will not be responsible for any information you may lose if your access to the Sites is suspended or terminated in these circumstances . 3.3 To enable you to access certain content on the Sites , we may provide you with a username , password or some other type of identifier . You agree that you are responsible keeping such identifiers secret and that you will responsible for the conduct of any person who uses your identifiers , whether or not you have authorised that use . 3.4 We may receive fees or commissions ( or both ) from third parties in relation to some of the content , goods or services which we advertise , promote or make available on the Sites . You acknowledge and consent to us receiving those fees and commissions . 4 Linked Sites 4.1 The Web Site may contain links to other web sites which are not maintained or controlled by us . These links are provided by us solely for your convenience . We do not accept any responsibility for broken or redirected links . 4.2 We have not checked the accuracy , completeness or suitability of the content of , or the goods and services available from , any linked sites . Also , we do not review or monitor any linked sites . You must therefore make your own enquiries about the content , goods or services available from any linked site before relying on that content , or buying or using any of those goods or services . We will not be responsible for any loss or damage you suffer as a result of relying on , buying or using any content , goods or services from a linked site . 4.3 The presence of links on the Sites should not be taken to imply that we endorse , sponsor or approve of any linked site , or any content , products or services available from that linked site , or that we are affiliated or associated with the owner or operator of any linked site . 5 Changes to the Sites 5.1 We ( or our suppliers ) may change the content , information , products and services provided on the Sites , and the prices for those things , at any time . 5.2 If you purchase any products or services from the Sites , you will be charged the price that applies and is displayed at the time you request those products or services . 6 Our liability to you 6.1 To ensure that we can continue to provide you with quality content and services via the Sites , we and our related companies need to try to minimise the costs associated with operating the Sites . 6.2 As a result , neither we nor our related companies can accept liability for any loss or damage you suffer as a result of using or accessing the Sites or any content , information , products or services available on or from those Sites , except to the extent that we are required to by law , such as State or Territory fair trading legislation and the Trade Practices Act 1974 ( Cth ) . 6.3 In particular , except to the extent required by law , we and our related companies do not accept , and specifically exclude , liability for any business losses , or losses of data or profits , or any other direct , indirect or consequential loss or damage , which you may suffer in connection with our supply , non-supply or defective supply of the Sites , or any content , information , products or services available on or from the Sites . 6.4 As a guide , the Trade Practices Act 1974 ( Cth ) would require us to accept liability to you where : ( a ) we fail to supply the content on the Sites with due care and skill ; or ( b ) the content we supply via the Sites is not reasonably fit for the purpose for which it is supplied . 7 Your liability to us 7.1 To minimise the costs associated with operating the Sites , we also require that you take responsibility for any harm we or our related companies suffer as a result of your use of the Web Site . 7.2 You therefore agree to indemnify us and our related companies from and against any loss , damage , costs or expenses suffered by any of us arising out of or in any way connected to the use of the Sites by you or someone using your name and password . 8 Termination and suspension 8.1 If we reasonably believe that you have breached any of these Terms of Use , we may immediately suspend , terminate or limit your access to the Sites . 9 Trade marks , copyright and other intellectual property 9.1 All intellectual property relating to Kink , including written material , logos , illustrations , audio clips , video clips and photos is protected by copyrights , trademarks , and other intellectual property rights that are owned and controlled by Kink or by other parties that have licensed their material to Kink . 9.2 Material on Kink is solely for your personal , non-commercial use . Without the prior written consent of the owner , modification of the materials , use of the materials for any purpose other than personal , non-commercial use is prohibited . 9.3 " 3 " and " Kink Kommunity " are trade marks licensed to Hutchison 3G Pty Limited . 10 Disclaimer 10.1 By sending in material to 3 , you agree to the following : ( a ) 3 may use and publish any material that you submit . You need to make sure that you have permission from anyone else who is in a video and or picture before you send it in . 3 reserves the right to not publish any submissions and may adapt or edit any material for publication . ( b ) 3 may use or publish it without liability to you for payment or otherwise . You warrant that the material is fit for publication and agree to indemnify us if any third party takes action against us in relation to the material you submit . You warrant that 3 may publish the material you submit and/or make use of any concepts described in it in 3 products or services without liability to you and you agree not to take any action against use in relation to it . ( c ) All personal information gathered as part of your submission may be used by 3 or Kink Kommunity . Your personal information will be dealt with in accordance with Kink 's Privacy Policy found HERE ( Privacy Policy ) 11 General matters 11.1 If we need to notify you of any matter relating to these Terms of Use and you have given us your contact details , we ask , and you agree , that we may use post , fax or email to the relevant contact details notified to us . If we do use email , you will be taken to have received the email if it leaves our servers , unless we receive evidence to the contrary . 11.2 If any of these Terms of Use are invalid , unenforceable or illegal in a particular jurisdiction , that term will be struck out for that jurisdiction only and the remaining terms will remain in full force . 11.3 If we do not act in relation to a particular breach by you of these Terms of Use , this will not be treated as a waiver by us of our right to act with respect to subsequent or similar breaches . 