General Business Terms and customer information
TeamSpeak Systems GmbH


I. General Business Terms

1. Scope

    1.1. These General Business Terms (hereinafter referred to as "General
    Business Terms" - German abbreviation - AGB]) shall apply to all contracts
    between TeamSpeak Systems GmbH, Soiernstr. 1, 82494 Krün, entered in the
    register of companies of Munich County Court under the register number HRB
    172523 (hereinafter referred to as "TeamSpeak") and the customer concerning
    the services offered via the websites of TeamSpeak which can be called
    under the domains teamspeak.com, teamspeakusa.com and myteamspeak.com
    (hereinafter the first and the second one referred to as "TeamSpeak.com"
    and the last one referred to as "Myteamspeak.com"; all of them jointly
    referred to as "TeamSpeak Websites").
    1.2. These General Business Terms shall also apply to all future services
    or offers to the customer, even if they are not agreed separately once
    again.
    1.3. Deviating, additional General Business Terms of the customer or which
    contradict these General Business Terms will not be accepted by TeamSpeak
    so that these will not be included in the contract. This shall not apply if
    TeamSpeak has approved the inclusion of the customer's General Business
    Terms.

2. Capacity as an entrepreneur

    2.1. All offers of TeamSpeak against payment are exclusively directed at
    entrepreneurs within the meaning of Section 14 BGB [German Civil Code],
    which order and use the services of TeamSpeak within the framework of their
    independent, professional or commercial activity
    2.2. TeamSpeak will check the customer's capacity as an entrepreneur before
    conclusion of the contract concerning services against payment.
    2.3. An entrepreneur is each natural person or legal entity or a
    partnership with legal capacity, which acts while performing its commercial
    or independent professional activity upon conclusion of a legal
    transaction, here thus the conclusion of the contract with TeamSpeak.
    2.4. A consumer is each natural person, who concludes a legal transaction,
    here thus the conclusion of a contract with TeamSpeak, for purposes, which
    can mainly neither be attributed to their commercial, nor their independent
    professional activity.
    2.5. Non-commercial grouping within the meaning of these General Business
    Terms is each grouping of consumers or each legal entity, whose business
    activity does not serve to generate profits, in particular legal entities,
    which pursue a non-profit-making corporate purpose.

3. Scope of contract

    3.1. TeamSpeak is the provider of the software solutions "TeamSpeak 3" and
    "TeamSpeak 3 Software Development Kit" (hereinafter referred to as
    "software solutions"), which enable the customer to communicate with third
    parties by speech or text as well as to exchange files.
        3.1.1 The software solution "TeamSpeak 3" enables the customer to
        communicate with third parties by sharing its TeamSpeak-Server address
        with said third parties. The number of third parties, to which the
        communication channels can be made available, depends on the licensing
        by the customer
        3.1.2 The software solution "TeamSpeak 3 SDK" represents a solution for
        the integration of the technical solution for the voice transmission
        and other functions such as Filetransfer, chat function, etc. in own
        software solutions of the customer.
    3.2. The software solutions are offered through the following licence
    models:
        3.2.1 "Unlicensed": Under the licence model "Unlicensed" the software
        solutions "TeamSpeak 3" and its previous version "TeamSpeak 2" can be
        used free of charge. The use of the software solution "TeamSpeak 2" is
        limited to the use of a maximum of two virtual servers with up to 1000
        slots, the use of the software solution "TeamSpeak 3" to a virtual
        server with up to 32 slots. The use is carried out unlimited from the
        point of view of time. No feedback is given by the virtual server to
        TeamSpeak. The licence model "Unlicensed" is exclusively available to
        non-commercial groupings and consumers.
        3.2.2 "Non-Profit" (hereinafter referred to as "NPL"): Under the
        licence model "NPL" the software solution "TeamSpeak 3" can be used
        free of charge. The use is limited here to two virtual servers with up
        to 512 slots. The duration of the licence is 6 months. A sub-licensing
        of slots and virtual servers to third parties is not permitted. The
        licence model "NPL" is exclusively available to non-commercial
        groupings and consumers.
        3.2.3 Annual Activation/ Single Server" (hereinafter referred to as
        "AAL"): Under the licence model "AAL" the software solution "TeamSpeak
        3" can be used against payment. The use is carried out, depending on
        the licensing chosen by the customer, between a virtual server with up
        to 32 slots up to 2 virtual servers with up to 1024 slots. The duration
        of the licence is one year. A sub-licensing of sots and virtual servers
        to third parties is not permitted.
        3.2.4 "Authorized TeamSpeak Hosting Provider" (hereinafter referred to
        as "ATHP"): Under the licence model "ATHP" the software solution
        "TeamSpeak 3" can be used against payment to an unlimited extent and
        virtual servers and slots can be sublicensed to third parties. The
        duration of the licence is one year.
        3.2.5 Software Development Kit (hereinafter referred to as "SDK"):
        Under the licence model "SDK" the software solution "TeamSpeak 3 SDK"
        can be used against payment for the purpose of integration into own
        software solutions of the user. The conditions of the licence model
        "SDK" shall be individually adjusted to the needs of the user and
        agreed. 
    3.3. TeamSpeak also mediates server places through TeamSpeak.com, which are
    offered by third party providers.
    3.4. TeamSpeak provides to the customer via TeamSpeak.com the TeamSpeak
    Software Client (herein after referred to as “Client”). The client is
    provided for the operating systems Windows, Linux and macOS as well as for
    mobile devices (iOs or Android).
    3.5. TeamSpeak operates a forum via TeamSpeak.com that enables the customer
    to publish contributions regarding the services of TeamSpeak, in particular
    questions, suggestions and assessments on TeamSpeak.com in the "Community"
    zone.
    3.6. The customers additionally have the possibility to upload own software
    programmes onto the TeamSpeak websites, which are compatible with the
    software solutions of TeamSpeak (hereinafter referred to as "Add-ons") and
    to offer these to third parties for downloading as well as to download the
    Add-ons offered by third parties via TeamSpeak.com.



A. Conclusion of Contract

4. Conclusion of the contract with the acquisition of licences for the software

    4.1. A contract will be concluded with TeamSpeak concerning the software
    solutions of these General Business Terms as described below:
        4.1.1 "Unlicensed": The contract concerning the free use of the licence
        model "Unlicensed" shall be concluded by the downloading of the
        respective software solution by the customer and the fact that the
        software solution is made available by TeamSpeak.
            4.1.1.1 For this purpose, the customer will press the button on
            TeamSpeak.com with the inscription "Licensing Overview" and
            subsequently the button displayed under the description of the
            licence model "Unlicensed" with the inscription "Download".
            4.1.1.2 The customer has the possibility to download and use the
            software solution without registering or otherwise having to send
            data to TeamSpeak.
            4.1.1.3 A binding contract will be concluded between TeamSpeak and
            the customer concerning the use of the software solution in the
            licence model "Unlicensed" when the software solution is
            downloaded.
        4.1.2 "NPL": The contract concerning the free use of the licence model
        "NPL" shall be concluded as follows:
            4.1.2.1 The customer will press the button with the inscription
            "Licensing Overview" and subsequently the button displayed under
            the description of the licence model "NPL" with the inscription
            "Register" on TeamSpeak.com.
            4.1.2.2 The customer will press the button on the displayed
            overview with the inscription "Continue to NPL Application." and
            confirm the existence of the pre-requisites of a non-commercial
            grouping or the capacity as a consumer by pressing the button with
            the inscription "Continue". It will additionally confirm the
            licence conditions and these General Business Terms by pressing the
            button with the inscription "I agree".
            4.1.2.3 By pressing the "Submit" button the customer will send an
            offer for the conclusion of the contract concerning the licence
            model "NPL" to TeamSpeak. Before pressing the button with the
            inscription "Submit" the customer has the possibility to delete or
            correct its input or to also interrupt the process by pressing the
            "Back" button of its browser at all times.
            4.1.2.4 The customer will receive a confirmation e-mail from
            TeamSpeak to the e-mail address entered during the registration
            process, which confirms the receipt of the customer's offer by
            TeamSpeak. A contract will not be concluded with the receipt of
            this confirmation e-mail by the customer.
            4.1.2.5 TeamSpeak shall accept the offer of the customer by making
            the software solution available for downloading. A binding contract
            concerning the use of the software solution in the licence model
            "NPL" is hereby concluded between TeamSpeak and the customer.
            4.1.2.6 The customer will receive a confirmation e-mail from
            TeamSpeak to the e-mail address entered during the registration
            process, in which the essential contents of the concluded contract
            are summarised. The General Business Terms will also be sent to the
            customer with this confirmation e-mail.
        4.1.3 "AAL": The contract concerning the use of the licence model "AAL"
        against payment will be conclude as follows:
            4.1.3.1 The customer registers for a customer account for
            TeamSpeak.com: The customer presses the button with the inscription
            "Sales" and subsequently the button with the inscription "Continue
            to register for an account." It will complete the displayed
            registration form and send this by pressing the button with the
            inscription "Register".
            4.1.3.2 The customer will receive an overview of the data entered
            by it and will be given the possibility to correct or delete these
            after pressing the button with the inscription "Modify" or to also
            discontinue the registration process by closing the browser window
            or pressing the "Back" button of the browser.
            4.1.3.3 When pressing the button with the inscription "Confirm" the
            customer submits a binding offer for the conclusion of a contract
            concerning the opening of its customer account
            4.1.3.4 TeamSpeak shall send a confirmation e-mail to the customer
            with a confirmation link and a password.
            4.1.3.5 TeamSpeak will display the licence models offered to the
            customer in the customer area of its customer account. With this
            display TeamSpeak submits a binding offer for the conclusion of a
            contract with the customer concerning the displayed licence models.
            4.1.3.6 The customer will select the licence "TeamSpeak 3 Annual
            Activation License" requested by it in its customer account and
            press the button with the inscription  ”Add”. By pressing the
            button ”Add” the customer accepts the offer of TeamSpeak for the
            conclusion of the contract and a binding contract will be concluded
            regarding the use of the software solution in the licence model
            "AAL".
            4.1.3.7 The customer will receive a confirmation e-mail from
            TeamSpeak to the e-mail address entered during the registration
            process, in which the essential contents of the concluded contract
            are summarised. 
        4.1.4 "ATHP": The contract concerning the use of the licence model
        "ATHP" against payment shall be concluded as follows:
            4.1.4.1 The customer will register for a customer account for
            TeamSpeak.com. The steps of the registration are oriented to
            Subclauses 4.1.3.1 to 4.1.3.4 of these General Business Terms.
            4.1.4.2 The customer will select the licence "TeamSpeak 3 ATHP
            Application" requested by it in its customer account and press the
            button with the inscription ”Add”. An invoice for the $50 USD
            application fee will be generated. Once the customer has paid the
            application fee, TeamSpeak will send an e-mail to the customer with
            instructions to complete the application process (as described
            below).
            4.1.4.3 The customer sends to TeamSpeak the completed application
            form, the signed licence agreement, a copy of the personal identity
            card or passport of a person, who is entitled to representation as
            well as the application for trade registration or a business
            licence or any other document which identifies the customer as an
            entrepreneur within the meaning of clause 2.3 of this General
            Business Terms. The documents will be sent to TeamSpeak by e-mail
            to the e-mail address athps@teamspeak.com or by fax to the fax
            number +1-619-600-0676. With the sending of the aforementioned
            documents the customer submits a binding offer for the conclusion
            of a contract.
            4.1.4.4 TeamSpeak will send a confirmation e-mail to the customer
            to the e-mail address deposited in the customer account, which
            confirms the receipt of the customer's offer. A contract will not
            be concluded with the receipt of this confirmation e-mail.
            4.1.4.5 TeamSpeak will accept the offer of the customer by making
            the software solution available for downloading in the customer
            area of the customer account. A binding contract will be concluded
            between the customer and TeamSpeak concerning the use of the
            software solution in the licence model "ATHP" when the software
            solution is made available.
            4.1.4.6 The customer will receive a confirmation e-mail from
            TeamSpeak to the e-mail address entered within the framework of the
            registration, in which the essential contents of the concluded
            contract are summarised. 
        4.1.5 "Software Development Kit" (hereinafter referred to as "SDK"):
        The contract concerning the use of the licence model "SDK" against
        payment shall be concluded by the individual contract concluded with
        the customer.
            4.1.5.1 The customer will contact TeamSpeak by e-mail at the e-mail
            address ts3sdk@teampeak.com or bizdev@teamspeak.com or by telephone
            under the number +1-619-312-6255.
            4.1.5.2 TeamSpeak will send an offer to the customer concerning the
            services requested by the customer in a text form to the e-mail
            address entered by the customer. With this e-mail TeamSpeak submits
            a binding offer for the conclusion of a contract at the conditions
            described in the e-mail.
            4.1.5.3 A binding contract concerning the use of the licence model
            "SDK" will be concluded through the acceptance of the offer of
            TeamSpeak by the customer in a text form.

5. Conclusion of contract concerning the mediation of server places

    5.1. The customer will be forwarded to the Internet presence of the third
    party provider via TeamSpeak.com.
    5.2. A contract will be exclusively concluded between the customer and the
    respective third party in the event of the mediation of server places
    offered by a third party.

6. Conclusion of contract concerning the licensing of the client

    6.1. A contract concerning the licensing of the client will be concluded as
    follows:
        6.1.1 The customer will press the button with the inscription
        “Download” on TeamSpeak.com. The customer will be directed to a
        sub-domain which shows all available versions of the Client (Windows,
        Linux and macOS as well as the versions for mobile devices).
        6.1.2 The customer will select the version which fits to his needs and
        will press the button with the inscription “Download” which is
        displayed next to the version he has chosen. 
        6.1.3 If the customer choses the versions Windows, Linux or macOS, by
        pressing the button “Download” the customer submits a binding offer for
        the conclusion of the contract. A binding contract is concluded if and
        when the client is successfully downloaded. 
        6.1.4 If the customer choses a version for mobile devices, the customer
        will be directed to the internet-shop “Apple AppStore” (iOS) or
        “Android Market” (Android). The customer gets the possibility to
        download the client within the terms and conditions of the provider of
        the respective shop. The customer should inform himself about these
        terms and conditions in the shop of the third-party provider. 

7.  Conclusion of contract concerning the upload and download of Add-ons

    7.1. TeamSpeak only makes the platform available for the purpose of
    uploading and downloading Add-ons. The contract concerning the use of the
    respective Add-On shall be exclusively concluded between the customer,
    which uploads the Add-On and the customer, which downloads the Add-On.
    7.2. In order to upload Add-ons the customer must register for a customer
    account as a Developer (hereinafter referred to as "Developer Account").
    7.3. For this purpose, the customer will press the button with the
    inscription "MyTeamSpeak" and on the subsequently displayed subpage the
    button with the inscription "Register".
    7.4. The customer will complete the displayed registration form with
    details of an e-mail address and a password and press the button with the
    inscription "Register".
    7.5. TeamSpeak will send a confirmation e-mail to the customer with a
    confirmation link.
    7.6. The customer will press the confirmation link contained in the e-mail
    and will be kept in its customer account under the menu item "Dashboard".
    7.7. The customer will press the button in its customer account with the
    inscription "Become a developer". By entering its name and mobile phone
    number the customer completes a registration form and presses the button
    with the inscription "Send confirmation code".
    7.8. TeamSpeak will send a confirmation code to the mobile phone number
    entered by the customer with a limited period of validity.
    7.9. The customer will enter the confirmation code in the form field
    envisaged for this purpose and press the button with the inscription
    "Confirm".
    7.10. In order to download Add-ons the customer does not have to register
    for a customer account. The downloading is made possible free of charge on
    the subpage "MyTeamSpeak" and without registration.

8. Conclusion of a contract with the use of the forum

    8.1. The customer shall press the button with the inscription "Forum" and
    subsequently the button with the inscription "Register".
    8.2. The customer will complete the registration form displayed after
    pressing the "Register" button.
    8.3. After completing the registration form the customer will press the
    button with the inscription "Complete Registration". It can correct its
    data at all times until the "Complete Registration" button is pressed or
    discontinue the registration by closing its browser window or pressing the
    "Back" button of its browser.
    8.4. The customer will receive a confirmation of receipt from TeamSpeak,
    which contains a confirmation link. This confirmation of receipt does not
    represent an offer for the conclusion of a contract by TeamSpeak, but
    merely serves to verify the customer's data.
    8.5. The customer can press the confirmation link and then log-in to its
    customer account. When pressing the confirmation link the customer submits
    a binding offer concerning the free use of the forum.
    8.6. With the provision of the customer account TeamSpeak accepts the offer
    of the customer so that a binding contract is concluded.

 

B. Special terms for the aforementioned contracts

9. Licence fees for the software solutions 

    9.1. Licence fees within the framework of the licence model "ATHP":
        9.1.1 A flat rate basic fee as well as use-based regular licence fees
        are to be paid for the use of the software solution in the licence
        model "ATHP".
        9.1.2 The basic fee is a flat rate of 50 U.S. Dollars and will be due
        and payable one time upon conclusion of the contract.
        9.1.3 The amount of the recurring licence fees for the granting of the
        licence in the licence model "ATHP" will be determined based on the
        actual use of the number of slots per calendar day. For this purpose
        the number of used slots by the virtual server will be transmitted
        daily to a server operated by TeamSpeak. The customer obligates towards
        TeamSpeak not to take any measures, which are suitable for preventing
        this transmission or for changing the transmission result. The regular
        licence fees will be due and payable ten workdays after receipt of the
        invoice by the customer.
        9.1.4 A minimum licence fee shall be deemed as agreed between the
        customer and TeamSpeak. For the first year in which the licence is used
        this is the licence fee for a use of 200 used slots and for each
        further year in which the licence is used the licence fee for a use of
        1000 used slots. If the minimum licence fee is not achieved the
        customer, nevertheless, has to pay licence fees in the amount of the
        minimum licence fee.
    9.2. Subject to Subclause 9.1 of these General Business Terms or a
    deviating agreement between the customer and TeamSpeak the licence fees
    stated in the service specifications for the respective licence model shall
    be deemed as agreed.
    9.3. TeamSpeak is entitled to change the licence fees within the framework
    of a further development of the software solutions or due to the adjustment
    to the market situation.
    9.4. In the event of a price adjustment a list with the changed prices will
    be sent to the customer in a text form.
    9.5. The customer has the possibility to terminate the licence agreement
    extraordinarily without notice within a deadline of four weeks beginning
    with the receipt of the notification described in Subclause 9.4 of these
    General Business Terms.
    9.6. The customer has the possibility to object to the price adjustment
    within a deadline of four weeks beginning with the receipt of the
    notification described in Subclause 9.4 of these General Business Terms. In
    the event of an objection of the customer TeamSpeak is entitled to
    terminate the contract extraordinarily within a deadline of four weeks
    beginning with the receipt of the objection by TeamSpeak.

10. Price details and terms of payment concerning the licensing of the software
solutions

    10.1. All prices or price details stated by TeamSpeak shall always concern,
    even if an explicit currency detail is missing, US Dollar, insofar as not
    agreed otherwise between the parties.
    10.2. All prices or price details shall be deemed plus the respective
    applicable value added tax as well as public duties, which possibly
    continue to be due.
    10.3. Only the payment possibilities displayed under the menu item "Pay"
    are open to the customer with orders via TeamSpeak.com, whereby TeamSpeak
    explicitly reserves the right to refuse a payment method selected by the
    customer in the contractual offer.
    10.4. In case of orders by telephone or orders sent by e-mail, fax or post
    the payment by bank transfer is agreed as payment in advance subject to a
    deviating agreement, whereby the remuneration of TeamSpeak will be due and
    payable upon conclusion of the contract, i.e. that the customer is obliged
    to pay the remuneration in advance.
    10.5. In the event of the agreement of a payment by invoice the payment
    will be due and payable within fourteen days from the time when the invoice
    is received by the customer.
    10.6. TeamSpeak is entitled to only carry out or provide still outstanding
    services against advance payment or provision of security if it becomes
    aware of circumstances after conclusion of the contract, which are suitable
    for substantially reducing the creditworthiness of the customer and through
    which the payment of the outstanding receivables of TeamSpeak by the
    customer from the respective contractual relationship (including from other
    individual orders) is jeopardised.

11. Termination of the contracts concerning the licensing of the software
solutions

    11.1. The contracts have the contractual term stated in the service
    specifications (hereinafter referred to as "minimum contractual term"),
    i.e.
        11.1.1 The contract concerning the licence model "Unlicensed" has no
        fixed contractual term. The licence model can be used by the customer
        at all times as long as TeamSpeak offers this licence model.
        11.1.2 The contract concerning the licence model "NPL" has a minimum
        contractual term of six months.
        11.1.3 The contract concerning the licence model "AAL" has a minimum
        contractual term of twelve months.
        11.1.4 The contract concerning the licence model "ATHP" has a minimum
        contractual term of twelve months.
        11.1.5 The contract concerning the licence model "SDK" has the
        individually agreed minimum contractual term.
    11.2. The licence agreement can be terminated by the customer at all times
    as of the end of the minimum contract term without adhering to a period of
    notice. TeamSpeak can terminate the licence agreement at all times by
    adhering to a period of notice in the amount of half the period of the
    minimum contractual term as of the end of the minimum contractual term.
    11.3. The contract will be extended automatically by the minimum
    contractual term if none of the parties terminates the contract as of the
    end of the minimum contractual term. With the licence model "NPL" the
    contract will only be extended automatically if the customer has used the
    software solution within a period of one month before termination of the
    minimum contractual term; otherwise the contract will end automatically
    with the termination of the minimum contractual term.
    11.4. The right of both parties to the extraordinary termination shall
    remain unaffected. 
    11.5. An extraordinary right of termination for TeamSpeak shall in
    particular exist,
        11.5.1 if the customer is in default with two consecutive invoices
        regarding the licence payment.
        11.5.2 if the customer repeatedly falls short of the minimum licence
        fee with a contract concerning the licence model "ATHP".
        11.5.3 if, despite a warning, the customer repeatedly breaches its
        obligations from the licence agreement, including these General
        Business Terms, and the breaches are not insignificant.
        11.5.4 if the customer, despite a warning by TeamSpeak, repeatedly
        breaches its main obligation under this contract and is responsible for
        the breach.
        11.5.5 if the customer has selected the licence models "Unlicensed" or
        "NPL" without having the capacity as a consumer or non-commercial
        grouping or this capacity has subsequently ceased to exist. In this
        case the right is reserved to assert damages.
    11.6. Each termination requires a text form.

12. Obligations of the customer concerning the use of the client

    12.1. The customer has the obligation and responsibility to make use of
    data backups at sufficient intervals. TeamSpeak assumes no responsibility
    for any loss of data resulting from a breach of this obligation. This does
    not apply if TeamSpeak is responsible for the breach.
    12.2. The customer shall make use of virus protection following the latest
    technical standards.
    12.3. Standard software upgrades are free of charge, if and when they
    become available. The customer has the responsibility to install client
    upgrades promptly after publication. Otherwise the usability of the client
    may be restricted.

13. Termination of the contracts concerning the client

    13.1. The customer is entitled to terminate this agreement at any time by
    removal of the client from all devices. 
    13.2. The mutual right for premature extraordinary termination (also
    without previous notice) remains unaffected
    13.3. Any termination requires the immediate removal of the client.

14. Publication of contributions in the forum

    14.1. The registered customer has the possibility to publish contributions
    via the customer area of its customer account in the "Forum" zone on
    TeamSpeak.com.
    14.2. For the purpose of publishing a new contribution the customer will
    upload the contribution by pressing the "Post New Thread" button . When
    replying to the contribution of another customer the customer will press
    the button with the inscription "Reply To Thread" in order to publish its
    reply contribution. The contribution will be transmitted to TeamSpeak
    hereby and published by TeamSpeak on TeamSpeak.com.
    14.3. TeamSpeak does not check the contributions before publication. In the
    event of a reference to the unlawful nature of a contribution TeamSpeak
    explicitly reserves the right to delete individual contributions.
    14.4. The customer undertakes towards TeamSpeak not to publish any
    contributions, which violate the laws of the Federal Republic of Germany or
    infringe the rights of third parties.
    14.5. The customer shall indemnify TeamSpeak from all rights of third
    parties, which these assert against TeamSpeak owing to the publication of
    contributions on TeamSpeak.com by the customer. Subject to the approval of
    the customer TeamSpeak will not submit any acknowledgements or other
    legally relevant declarations, which substantiate the asserted claims of
    the third party.
    14.6. The indemnification obligation described in Subclause 14.5 of these
    General Business Terms shall cease to apply if the circumstances which
    substantiate the claims of the third party are verifiably due to a grossly
    negligent or wilful misconduct of TeamSpeak.
    14.7. TeamSpeak undertakes to inform the customer immediately of the filing
    of actions against it or the assertion of claims and to give it the
    possibility to take over the legal defence.

15. Termination of the user account for the forum

    15.1. The customer has the possibility to have its customer account deleted
    by TeamSpeak at all times. For this purpose the customer will send the
    deletion request to TeamSpeak in a text form. A termination is also
    possible towards a moderator of the forum in a text form. TeamSpeak will
    delete the customer's forum account immediately after receipt of the
    termination. Contributions published by the customer can be deleted or
    anonymised at the discretion of TeamSpeak. The contract concerning the use
    of the customer account will end with the deletion.
    15.2. TeamSpeak is entitled to terminate the contract concerning the use of
    the customer account at all times by adhering to a period of notice of
    three months to the end of the quarter of a calendar year.
    15.3. The right to the extraordinary termination of both parties shall
    remain unaffected. A right to the extraordinary termination shall in
    particular exist if the customer, despite a warning, repeatedly breaches
    its obligations from Subclause 14.4 of these General Business Terms and the
    breach is not insignificant.
    15.4. Each termination shall require a text form.

16. Publication of Add-ons

    16.1. If the customer is registered as a Developer it has the possibility
    to upload Add-ons and therefore offer these to third parties for download
    free of charge
    16.2. In order to upload Add-Ons the customer will press the button with
    the inscription "Upload Add-ons" in the customer area of its customer
    account.
    The customer will transmit the Add-ons uploaded to it by pressing the
    button with the inscription "Add Addon" to TeamSpeak.
    16.3. TeamSpeak publishes the Add-ons on "MyTeamSpeak".
    16.4. TeamSpeak does not check the uploaded Add-ons before publication. In
    the event of a reference to the unlawful nature of an Add-On TeamSpeak
    explicitly reserves the right to delete individual contributions.
    16.5. The customer undertakes towards TeamSpeak not to publish any Add-ons,
    which violate the laws of the Federal Republic of Germany or infringe the
    rights of third parties.
    16.6. The customer shall indemnify TeamSpeak from all rights of third
    parties, which these assert against TeamSpeak owing to the publication of
    Add-ons on TeamSpeak.com by the customer. Subject to the approval of the
    customer TeamSpeak will not submit any acknowledgements or other legally
    relevant declarations, which substantiate the asserted claims of the third
    party.
    16.7. The indemnification obligation described in Subclause 16.6 of these
    General Business Terms shall cease to apply if the circumstances which
    substantiate the claims of the third party are verifiably due to a grossly
    negligent or wilful misconduct of TeamSpeak.
    16.8. TeamSpeak undertakes to inform the customer immediately of the filing
    of actions against it or the assertion of claims and to give it the
    possibility to take over the legal defence.

17. Termination of the customer account as a Developer

    17.1. The customer has the possibility to have its customer account as
    Developer deleted by TeamSpeak at all times. For this purpose the customer
    will send the deletion request to TeamSpeak in a text form. TeamSpeak will
    delete the customer's Developer account immediately after receipt of the
    termination. Add-ons published by the customer will also be deleted
    immediately. With the deletion the contract will end concerning the use of
    the Developer account.
    17.2. TeamSpeak is entitled to terminate the contract concerning the use of
    the Developer account at all times by adhering to a period of notice of
    three months to the end of the quarter of a calendar year.
    17.3. The right to the extraordinary termination of both parties shall
    remain unaffected. A right to the extraordinary termination shall in
    particular exist if the customer, despite a warning, repeatedly breaches
    its obligations from Subclause 16.5 of these General Business Terms and the
    breach is not insignificant.
    17.4. Each termination shall require a text form.

 

C. General terms

18. Warranty

    18.1. The statutory warranty rights shall apply to consumers.
    18.2. The following provisions will apply towards entrepreneurs:
        18.2.1 The warranty rights of the customer shall become statute-barred
        within one year. This shall not apply to culpably caused damages that
        can be attributed to TeamSpeak from the injury to life, the body or the
        health and damages caused by gross negligence or wilful intent or
        fraudulent intent as well as with claims for recourse according to
        Sections 478, 479 BGB.
        18.2.2 A warranty on the part of TeamSpeak is excluded insofar as the
        defect was suffered due to circumstances, which TeamSpeak caused at the
        explicit request of the customer.
        18.2.3 The liability for damages, irrespective of fault, for initial
        defects according to Section 536a Par. 1 BGB is excluded.

19. Liability

    19.1. TeamSpeak shall be liable in all cases of contractual and
    non-contractual liability in case of wilful intent and gross negligence
    according to the statutory provisions.
    19.2. In other cases TeamSpeak shall only be liable - insofar as not
    otherwise regulated in Subclause 19.3 of these General Business Terms -
    with a breach of a contractual obligation, the fulfilment of which makes
    the proper execution of the contract possible at all and on the compliance
    with which the customer may therefore, as a rule, rely upon (so-called
    cardinal obligation). The liability of TeamSpeak is excluded in all other
    cases, subject to the regulation in Subclause 19.3 of these General
    Business Terms.
    19.3. Insofar as TeamSpeak is fundamentally liable according to Subclause
    19.1 of these General Business Terms, this liability is limited to damages,
    which TeamSpeak foresaw as a possible consequence of a breach of contract
    upon conclusion of the contract or should have foreseen when applying the
    customary care and attention. Indirect damages and follow-up damages, which
    are the consequence of defects to the service by TeamSpeak, are in addition
    only capable of compensation insofar as such damages can typically be
    expected with the use of the service as intended.
    19.4. The liability of TeamSpeak for damages from the injury to life, the
    body or the health and according to the German Product Liability Act shall
    remain unaffected by the aforementioned liability limitations and
    exclusions.

20. Offsetting, rights of retention and assignment

    20.1. The customer is only entitled to offset against claims against
    TeamSpeak, which have been declared final and binding or are undisputed.
    The same shall apply to the assertion of rights of retention.
    20.2. The assignment of claims against TeamSpeak to third parties is only
    possible with the written consent of TeamSpeak. This shall in particular
    also apply to an assignment of the licence granted by TeamSpeak to third
    parties.

21. Text form

    21.1. Addendums and amendments to the reached agreements between TeamSpeak
    and the customer including these General Business Terms shall require a
    text form in order to be valid.
    21.2. With the exception of managing directors or authorized signatories
    the employees of TeamSpeak are not entitled to reach oral agreements, which
    deviate from these regulations.

22. Applicable law and place of jurisdiction

    22.1. German law will apply. With consumers this choice of law will only
    apply insofar as the protection granted by mandatory provisions of the law
    of the state of the consumer's customary place of above is not withdrawn
    hereby (principle of favourability).
    22.2. The place of performance for all services from the business
    relationships existing with TeamSpeak as well as the place of jurisdiction
    is the registered seat of TeamSpeak, insofar as the user is not a consumer,
    but a merchant, legal entity under public law or special fund under public
    law. The same shall apply if the user does not have a general place of
    jurisdiction in Germany or the EU or the place of residence or customary
    place of abode is not known at the time when the action is filed. The
    authorization to also bring the matter before the court at another
    statutory place of jurisdiction, shall remain unaffected hereby.
    22.3. The provisions of the UN Convention on Contracts for the
    International Sale of Goods will explicitly not apply.

 

II. Customer information

1. Identity of the provider

TeamSpeak Systems GmbH
Soiernstr. 1
82494 Krün
Phone: +49-8825-920-2000
E-mail: info@teamspeak.com

2. Information regarding the conclusion of the contract

The technical steps for the conclusion of the contract, the conclusion of the
contract itself and the possibilities for correction are carried out according
to clause B. of the General Business Terms (Part I).

3. Contractual language, storage of contractual text

The contractual language is German.
The full contractual text is not stored by TeamSpeak. Before sending the
respective offer the offer data can be printed out or stored electronically
through the print function of the browser. With the acceptance of the offer by
TeamSpeak the contractual data, the information stipulated by law with distance
selling contracts and the General Business Terms will be sent to the user by
e-mail once again.

4.Essential features of the goods and services

The essential features of the goods and services can be found in the service
specifications and the supplementary details on TeamSpeak.com.

5.Prices and payment modalities

All prices and payment modalities can be seen during the conclusion of the
respective contract as well as above in the General Business Terms (Part I.).

6.Statutory right to liability for defects

The statutory rights to liability for defects shall exist towards consumers.

7.Term of contract, termination

You can find information relating to the term of the contract as well as the
terms and conditions for the termination in the respective service
specifications as well as in B. of the General Business Terms.





Privacy statement

TeamSpeak Systems GmbH

1. Scope

    1.1 Please find information below concerning the collection, storage and
    processing of personal data when using the websites operated by TeamSpeak
    Systems GmbH under the domains teamspeak.com, teamspeakusa.com and
    myteamspeak.com (hereinafter the first and the second one referred to as
    "TeamSpeak.com" and the last one referred to as "Myteamspeak.com"; all of
    them jointly referred to as "TeamSpeak Websites"), especially but not
    restricted to the download of the software solutions "TeamSpeak 3" and
    "TeamSpeak 3 Software Development Kit" (hereinafter referred to as
    "software solutions"), download and use of the TeamSpeak Software Client
    (for PC or for mobile devices), participation in the forum as well as the
    down- and upload of own software programmes onto the TeamSpeak websites,
    which are compatible with the software solutions of TeamSpeak (hereinafter
    referred to as "Add-ons") as well as rent of servers.
    1.2 Personal data are all data, which can refer back to you personally,
    i.e. could be associated with your person. These are in particular name,
    e-mail address, address, telephone number, user behaviour, IP address, etc.

2. Service provider

    2.1 The service provider according to Section 13 German Telemedia Act and
    the responsible body according to Section 3 Par. 7 Federal Data Protection
    Act is TeamSpeak Systems GmbH, Soiernstr. 1, 82494 Krün, entered in the
    register of companies of Munich County Court under the register number HRB
    172523 (hereinafter referred to as "TeamSpeak").
    2.2 The TeamSpeak Websites contain links, by activating which you will be
    forwarded to the websites of third parties. TeamSpeak explicitly points out
    that in this case you must inform yourself on the linked website about the
    collection, storage and processing of personal data by the third party
    provider, as TeamSpeak has no influence on such a process.

3. Information

    3.1 You are entitled to request detailed information from TeamSpeak at all
    times regarding the data stored and processed relating to your person as
    well as their origin, the purpose of the storage and processing as well as
    the recipients or categories of recipients, to whom these data are
    forwarded.
    3.2 Please direct the enquiry for information by e-mail to
    privacy@teamspeak.com.

4. Revocation

    4.1 You can revoke your consent to the storage, collection and processing
    of your personal data at all times.
    4.2 Please send your revocation by e-mail to privacy@teamspeak.com or by
    e-mail, telephone, post or fax to the contact details stated in the imprint
    of the TeamSpeak Websites.

5. Use of cookies

    5.1 Cookies are stored on your computer when using the TeamSpeak Websites,
    even if the TeamSpeak Websites are used purely for informational purposes.
    5.2 Cookies are small text files, which are stored on your hard disk drive,
    allocated to the browser used by you, are stored and through which certain
    information is conveyed to the agency, which places the cookie. Cookies
    cannot carry out any programme and, above all, not transmit any viruses to
    your computer either. Cookies serve in particular to design the TeamSpeak
    Websites more user-friendly.
    5.3 If you have a user account for the TeamSpeak Websites , cookies in
    particular serve to identifying you for follow-up visits to the TeamSpeak
    Websites. This prevents that you must log-in once again for each visit.
    5.4 The TeamSpeak Websites use the following types of cookies:
      * Transient cookies, i.e. with temporary use
      * Persistent cookies, i.e. with time-limited use
      * Third party cookies, i.e. cookies of third party providers
    5.5 Transient cookies will be deleted as soon as you close your browser.
    These shall in particular include the so-called session cookies. Session
    cookies store a session-ID, with which the enquiries of your browser can be
    allocated to the session so that your computer can be recognised again by
    the system when you return to the TeamSpeak Websites. As soon as you
    log-out or close your browser, all session cookies will be deleted
    automatically.
    5.6 Persistent cookies will only be deleted after a duration that depends
    on the respective cookie, which goes beyond the session, however no later
    than two months after the cookie was set. You can delete these cookies
    yourself at all times in the security settings of your browser.
    5.7 In your browser settings, you can adjust the use of cookies
    individually and also prevent this completely. You can also completely
    prevent the use of third party cookies. In this case it is, however,
    possible that you will not be able to use all functions of the TeamSpeak
    Websites.
    5.8 The information stored via cookies will be stored separately from your
    other personal data and not linked with such data.
    5.9 TeamSpeak points out that the third party providers, which collect data
    by using cookies, also use data regarding the use of the TeamSpeak Websites
    for user-generated advertising on other websites. TeamSpeak has no
    influence on this data collection.

6. Informational use of the TeamSpeak Websites

    6.1 In case of a purely informational use of the TeamSpeak Websites,
    TeamSpeak will only collect the data transmitted by your browser, these
    are:
      * Your IP address
      * Date, time and duration of your visit to the respective website of the
        TeamSpeak Websites
      * Your user behaviour, i.e. your visit to the TeamSpeak Websites,
        subpages of the TeamSpeak Websites as well as the order of your visits,
        clicks carried out as well as time spent on individual pages and
        subpages
      * Time zone difference to the Greenwich Mean Time
      * The access status / http-status code
      * Concretely transmitted data volumes
      * Operating system and its interface
      * Browser as well as language and version of the browser software
      * The website, from which the request comes
    When using a mobile device for visiting the TeamSpeak Websites the
    following data will be additionally stored:
      * Type of mobile device and its settings
      * Your location, from where you are accessing the TeamSpeak Websites
    6.2 A purely informational use of the TeamSpeak Websites exists if you do
    not register for a customer account or a forum account, do not make any
    enquiry via the TeamSpeak Websites, nor download the software solutions or
    the TeamSpeak Software Client or send any other information regarding your
    person to TeamSpeak either.

7. Data collection when acquiring licences for the software solutions via
TeamSpeak.com

    7.1 If you acquire licences for the software solutions via the TeamSpeak
    Websites, you must create a customer account. An order without an existing
    or a customer account that is to be newly created is not possible.
    7.2 When registering for a user account your data given during the
    registration process - subject to a deletion of your user account by
    TeamSpeak that can be carried out at all times upon request by you - will
    be stored.
    7.3 The data transmitted by you will, in particular, be used for the mutual
    fulfilment of the contract. For this purpose, your data will, if
    applicable, also be forwarded to the partner that is required in order to
    fulfil the contract. This is, for example, the payment service provider Pay
    Pal Inc., 2211 North First Street, 95131 San José, California, USA
    (hereinafter referred to as "PayPal"). You will find further information
    relating to the forwarding of your personal data to third parties under
    Subclause 11 of this privacy statement.
    7.4 TeamSpeak additionally uses your personal data for the purpose of
    marketing and advertising for the services of TeamSpeak. However, without
    your separate consent information will only be send to you for this purpose
    relating to services of TeamSpeak, which are similar to the services used
    by you.
    7.5 You have the possibility to have your customer account deleted by us at
    all times by sending a corresponding request to the e-mail address
    privacy@teamspeak.com or the data provided in the imprint of the TeamSpeak
    Websites. If your user account is deleted at your request your data will be
    deleted immediately, as soon as they are no longer required for the mutual
    fulfilment of the contract and TeamSpeak is not legally obliged to store
    that data.
    7.6 In order to prevent unauthorized accesses of third parties to your
    personal data, in particular financial data, the order process will be
    encrypted per SSL technology.

8. Download of the TeamSpeak Software

    8.1 Download of the TeamSpeak Client Software
      * If you choose a version for mobile devices, you will be directed to the
        internet-shop “Apple AppStore” (iOS) or “Android Market” (Android). The
        third party provider may collect, store and process your personal data.
        Please inform yourself about the collection, storage and processing of
        data by the third part provider, as TeamSpeak has no influence on such
        a process.
      * During the download process TeamSpeak itself does not collect, store
        and process personal data in addition to that stated before. Subclauses
        5 and 6 and 7.2 until 7.6 of this privacy statement apply accordingly.
      * If you choose to download a version of the TeamSpeak Software Client
        for PC Subclauses 5, 6 and 7.2 until 7.6 of this privacy statement
        apply accordingly. TeamSpeak does not collect, store and process any
        additional personal data from you.
    8.2 Download of the TeamSpeak Server Software
      * By downloading TeamSpeak Server software via Docker, the third part may
        collect, store and process personal data. Please inform yourself about
        the collection, storage and processing of data by the third party
        provider, as TeamSpeak has no influence on such a process.
      * During the download process TeamSpeak itself does not collect, store
        and process personal data in addition to that stated before. Subclauses
        5 and 6 and 7.2 until 7.6 of this privacy statement apply accordingly.
      * If you choose to download a version of the TeamSpeak Software Server
        for PC Subclauses 5, 6 and 7.2 until 7.6 of this privacy statement
        apply accordingly. TeamSpeak does not collect, store and process any
        additional personal data from you.

9. Special terms for the use of the TeamSpeak Software Client (PC)

    9.1 In the event of using the TeamSpeak Software Client TeamSpeak for PC
    TeamSpeak possibly collects, stores and processes the following data:
      * IP address
      * Used operation system and type (32 or 64 bit)
      * Data about your behavior (particularly clicks, used menus)
      * Crash report, if sent by the you (program line, incident, basic data of
        computer hardware used)
    9.2 TeamSpeak uses this data exclusively for quality assurance as well as
    further development of the software solutions and the TeamSpeak Software
    Client. The data mentioned above under Subclause 9.1 of this Privacy
    Statement will not be combined with other personal data stored about you.
    The data will be anonymized immediately for further use.
    9.3 If you do not agree with the collection, storage and processing of the
    data mentioned under clause 9.1 of this Privacy Statement you can change
    the status in the field “anonymous statistics” (following the menu items
    Settings - Options - Applications).
    9.4 You can revoke your consent to collect, store and process the data
    mentioned under clause 9.1 of this Privacy Statement at all times. Please
    send your revocation by e-mail to privacy@teamspeak.com or by e-mail,
    telephone, post or fax to the contact details stated in the imprint of the
    TeamSpeak Websites. All personal data, which can refer back to you
    personally, will be deleted without undue delay.
    9.5 The sending of a crash-report is subject to your separate consent which
    will be queried separately before you can send the report. You are not
    obligated to send a crash-report. If you send a crash-report, clause 9.2
    and 9.4 of this Privacy Statement apply accordingly.

10. Server rent

    10.1 TeamSpeak itself does not collect, store and process any personal data
    in addition to that stated before. Subclauses 5, 6 and 7.2 and 7.6 of this
    privacy statement apply accordingly.
    10.2 TeamSpeak has no influence on the collection, storage and processing
    of your personal data by the lessor. Please inform yourself about the
    collection, storage and processing of data by the lessor.
    10.3 If you rent a server of a third party, this contract is just mediated
    by TeamSpeak.

11. Use of the forum

    11.1 The forum can be read without this requiring a registration. In this
    case it concerns a purely informational use of the TeamSpeak Websites (cf.
    in this respect Subclause 6 of this privacy statement).
    11.2 In order to be able to actively participate in the forum you must
    register and create a forum account. A user name, a password, your date of
    birth and your e-mail address are to be entered with the registration. It
    is not compulsory to use a real name, a use under a pseudonym user name is
    possible.
    11.3 We use the so-called Double-Opt-In-procedure for the registration,
    i.e. your registration is only completed when you have previously confirmed
    your registration via a confirmation e-mail sent to you for this purpose by
    clicking on the link contained therein. If your corresponding confirmation
    is not carried out promptly, your registration will be automatically
    deleted from our database.
    11.4 The data entered by you with the registration are stored by us and
    linked with the contents published by you, which are also stored by
    TeamSpeak. These data are exclusively used in order to operate the forum
    and to process the contract concluded with you concerning the use of the
    forum.
    11.5 You have the possibility to have your forum account deleted by us at
    all times by a corresponding request to the e-mail address
    privacy@teamspeak.com or the data stated in the imprint of Teamsspeak.com.
    In this case the personal data stored regarding your forum account will be
    deleted immediately as soon as they are no longer required for processing
    the contractual relationship concerning the use of the forum and we are not
    legally obliged to store said data either. Contributions published by you
    will be displayed anonymised under the marking "guest" after the successful
    deletion of your forum account

12. Up- and Downloading of Add-Ons

    12.1 In order to be able to upload Add-Ons you must register for a customer
    account as a Developer (hereinafter referred to as "Developer Account").
        12.1.1 During the registration you must submit your e-mail-address,
        your name and your phone number.
        12.1.2 When registering for a developer account your data given during
        the registration process - subject to a deletion of your developer
        account by us that can be carried out at all times upon request by you
        - will be stored.
        12.1.3 The data transmitted by you will, in particular, be used for the
        mutual fulfilment of the contract as well as the assertion of claims in
        the event that the Add-Ons uploaded by you violate the applicable Law
        or our General Business Terms.
        12.1.4 TeamSpeak additionally uses your personal data for the purpose
        of marketing and advertising for the services of TeamSpeak. However,
        without your separate consent information will only be send to you for
        this purpose relating to services of TeamSpeak, which are similar to
        the services used by you.
        12.1.5 You have the possibility to have your developer account deleted
        by us at all times by sending a corresponding request to the e-mail
        address privacy@teamspeak.com or the data provided in the imprint of
        the TeamSpeak Websites. If your user account is deleted at your request
        your data will be deleted immediately, as soon as they are no longer
        required for the mutual fulfilment of the contract and TeamSpeak is not
        legally obliged to store this data.
    12.2 In order to download Add-Ons you do not have to register for a
    customer account. Subclauses 5 and 6 of this privacy statement apply
    accordingly.

13. Use of the online enquiry; order by e-mail, fax or telephone

    13.1 You also have the possibility to contact TeamSpeak online via your
    customer account as well as by telephone and by e-mail.
    13.2 The data sent or entered by you within the framework of such will be
    used in order to answer your enquiry and to contact you by telephone or by
    e-mail for this purpose and, if applicable, for the mutual fulfilment of
    the contract. If your data are also used for the purpose of the mutual
    fulfilment of the contract Subclauses 7.2 and 7.3 of this privacy statement
    shall apply accordingly.

14. Social networks and services of third parties

    14.1 TeamSpeak uses social media plug-ins of the social networks Facebook,
    Google+, Twitter and YouTube on the TeamSpeak Websites.
    14.2 No personal data will be transmitted to the providers of these
    plug-ins without you clicking on the button of a plug-in - irrespective of
    whether you place an order.
    14.3 If you press the button of a plug-in personal data will be
    automatically transmitted to the provider of the plug-in and can be stored
    and used by that provider. Please note that this may be carried out
    overseas, i.e. in particular in the United States of America.
    14.4 TeamSpeak has no full knowledge of the type and scope of the data
    collection and their use and processing and cannot exert any influence on
    such processes either.
    14.5 If you activate a plug-in the plug-in provider will receive the
    information that you have activated this on the respective website of the
    TeamSpeak Websites or the corresponding subpage of the respective website
    from the TeamSpeak Websites. In addition, the information stated in
    Subclause 6 of this privacy statement will be transmitted to the plug-in
    provider. According to the own information of the plug-in provider in the
    case of Facebook only an anonymised IP address will be collected and
    transmitted in Germany.
        14.5.1 The data collection and transmission described in Subclause 10.5
        of this privacy statement is carried out irrespective of whether you
        have a user account at the respective plug-in provider or not. If you
        have a user account at the respective plug-in provider and you are
        logged into this user account at the time, at which you click on the
        respective plug-in the data transmitted to the respective plug-in
        provider will be directly allocated to your user account. If you
        confirm the activated plug-in and e.g. link the page, the plug-in
        provider will also store this information in your user account and can
        also notify your contacts to the public. In order to prevent the
        allocation to your user account at the respective plug-in provider you
        should log-out from your user account at the respective plug-in
        provider before clicking the plug-in on the TeamSpeak Websites.
        14.5.2 The respective plug-in provider stores the data transmitted to
        it, irrespective of whether you are also logged-in to your user account
        at the respective plug-in provider as a rule as user profiles, which
        are used for the following purposes:
          * Advertising suitable for the needs
          * Market research
          * Optimisation of the websites of the plug-in provider suitable for
            the needs
          * Information of other members of the social network about your
            activities on the TeamSpeak Websites
        14.5.3 You are entitled to object to the formation of user profiles
        with the data collected about you. For this purpose, please contact the
        respective plug-in provider. TeamSpeak has no influence on the
        compliance with your objection and is not responsible for this either.
    14.6 You can find further relevant information and regarding your rights in
    this respect in the privacy statements of the plug-in providers as the
    responsible bodies, which you can call as follows:
        14.6.1 Facebook Inc., 1601 S California Ave, Palo Alto, California
        94304 USA - https://www.facebook.com/policy.php
        14.6.2 Google+: Google Inc., 1600 Amphitheatre Parkway, Mountainview,
        California 94103 USA - https://www.google.com/policies/privacy/partners
        /?hl=de
        14.6.3 Twitter: Twitter, Inc. 1355 Market St., Suite 900, San
        Francisco, California 94103 USA - https://twitter.com/privacy?lang=de
        14.6.4 YouTube: YouTube, LLC (Google Inc.), 901 Cherry Ave., San Bruno,
        CA 94066 USA - https://www.google.de/intl/de/policies/privacy/

15. Forwarding of data to third parties

    15.1 TeamSpeak can forward your personal data to third parties if
    contractually agreed services and conditions are offered together with the
    third party provider or include its services. In this case TeamSpeak will
    inform you about the transmission of the data to the third party within the
    framework of the order process.
    15.2 TeamSpeak will also carry out the data processing through external
    service providers.
        15.2.1 These external services providers are carefully selected by
        TeamSpeak and commissioned in writing. The external service providers
        involved for the data processing are bound to the instructions of
        TeamSpeak and are regularly checked regarding the compliance with the
        data protection and the data security.
        15.2.2 The external service providers are not entitled to forward the
        data to third parties.
    15.3 TeamSpeak shall disclose personal data for the assertion of rights or
    towards regulatory authorities if TeamSpeak is obliged to do so by law.

16. Webtracking

    16.1 TeamSpeak uses Google Analytics on the TeamSpeak Websites. Google
    Analytics is a web analysis service of Google Inc., 1600 Amphitheatre
    Parkway, Mountainview, California 94103 USA (hereinafter referred to as
    "Google"). Google Analytics uses cookies, which are stored on your computer
    and enable an analysis of your user behaviour. The information generated by
    the cookie is stored by Google also overseas, in particular on a server of
    Google in the United States of America.
    16.2 The TeamSpeak Websites use Google Analytics with the extension
    "_anonymizeIP ()", i.e. the anonymization function of Google Analytics.
    This leads to the fact that your IP address will be abbreviated before
    transmission to the United States of America, as a rule by Google in a
    state in the European Economic Area.
    16.3 The IP address transmitted by your browser within the framework of the
    use of Google Analytics will not be converged with other data, which Google
    collected about you.
    16.4 You can exclude the storage of the cookies used by Google Analytics by
    excluding the use of cookies in your browser settings. In this case you can
    however not use further functions of the TeamSpeak Websites either.
    16.5 You also have the possibility to exclude the entry and processing of
    your personal data by Google by installing the browser plug-in that is
    available under the following link:
    http://tools.google.com/dlpage/gaoptout?hl=de
    16.6 The use of Google Analytics is carried out in line with the
    pre-requisites which the German data protection authorities have agreed
    with Google.
    16.7 You can view an overview of the data protection provisions of Google
    Analytics under this link:
    https://support.google.com/analytics/answer/6004245?hl=de

17. Data security

    17.1 TeamSpeak takes current technical measures in order to guarantee the
    data security and thus in particular for the protection of your personal
    data against dangers with the data transmission and the gaining of
    knowledge by third parties. These measures are adjusted regularly by
    TeamSpeak to the state-of-the-at technology.
    17.2 TeamSpeak will provide you information at all times regarding the data
    security in the company. Please send your enquiry to privacy@teamspeak.com
    or to the data referred to in the imprint of the TeamSpeak Websites.
