diff --git a/README.md b/README.md
index 021b8d2..be59f04 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@
 you'll have to run this command:
 
 ```
-docker run --rm -p 4000:4000 -p 35729:35729 --mount type=bind,src=$PWD,dst=/root/build --mount type=volume,dst=/root/build/node_modules -it apache/privacy_apache_org serve --watch --incremental
+docker run --rm -p 4000:4000 --mount type=bind,src=$PWD,dst=/root/build --mount type=volume,dst=/root/build/node_modules -it apache/privacy_apache_org serve --watch --incremental
 ```
 
 Once it runs, you can reach your website at:
@@ -31,12 +31,12 @@
 http://localhost:4000/
 ```
 
-Jekyll will regenerate content as you change it and you can see all changes with 
+Jekyll will regenerate content as you change it and you can see all changes with
 hitting refresh.
 
 If you find it necessary to connect to your Docker instance while working, you can run
 and connect to it with this command:
 
 ```
-docker run --rm -p 4000:4000 -p 35729:35729 --mount type=bind,src=$PWD,dst=/root/build --mount type=volume,dst=/root/build/node_modules -it  --entrypoint "/bin/bash" apache/privacy_apache_org
+docker run --rm -p 4000:4000 --mount type=bind,src=$PWD,dst=/root/build --mount type=volume,dst=/root/build/node_modules -it  --entrypoint "/bin/bash" apache/privacy_apache_org
 ```
diff --git a/_config.yml b/_config.yml
index ea8be2b..e08c1e1 100644
--- a/_config.yml
+++ b/_config.yml
@@ -17,7 +17,7 @@
 
 title: "Apache Software Foundation - Data Privacy"
 email: vp-privacy@apache.org
-description: >- 
+description: >-
   Write an awesome description for your new site here. You can edit this
   line in _config.yml. It will appear in your document head meta (for
   Google search results) and in your feed.xml site description.
@@ -28,7 +28,7 @@
   - jekyll-feed
 
 sass:
-  sass_dir: _sass  
+  sass_dir: _sass
   style: compressed
 
 # Exclude from processing.
diff --git a/_includes/header.html b/_includes/header.html
index 74c8d63..cdcb403 100644
--- a/_includes/header.html
+++ b/_includes/header.html
@@ -8,10 +8,12 @@
 	<input type="checkbox" id="show-menu" role="button">
         <ul id="menu">
             <li><a href="/">Home</a></li>
+            <li><a href="/policies">Policies</a></li>
             <li>
                 <a href="#">FAQ &#9660;</a>
                 <ul class="hidden">
                     <li><a href="/faq/committers.html">Committers' FAQ</a></li>
+                    <li><a href="/faq/infrastructure.html">Infrastructure FAQ</a></li>
                 </ul>
             </li>
             <li><a href="http://www.apache.org/foundation/">About the ASF</a></li>
diff --git a/_sass/main.scss b/_sass/main.scss
index 0dd05b7..095b2d2 100644
--- a/_sass/main.scss
+++ b/_sass/main.scss
@@ -178,6 +178,7 @@
     padding: 0.5em;
     margin: 0 auto;
     max-width: 85%;
+    min-width: 85%;
     color: $color_text;
     background: $main_background_color;
     font-family: $font;
diff --git a/faq/committers.md b/faq/committers.md
index 1f7ba83..1c695c7 100644
--- a/faq/committers.md
+++ b/faq/committers.md
@@ -21,6 +21,30 @@
 
 # Committers FAQ
 
+## General Privacy Questions
+
+### What, if we receive a data removal request?
+
+If you receive removal requests for mailing lists or of a generic kind,
+please forward this message to privacy@apache.org. If you feel the email
+is of a sensitive kind or did not arrive on a mailing list, 
+please forward this message to vp-privacy@apache.org.
+
+You can reply to the original message that you have forwarded this request,
+but don't reply with any further information (confirmation of deletions etc).
+
+In example:
+
+"Dear sender,
+
+we have forwarded your message to Apache Software Foundation privacy committee,
+which will handle your request. You can always reach out to VP Data Privacy (vp-privacy@apache.org)
+or to the comittee directly (privacy@apache.org) if you have further questions.
+
+Kind regards,"
+
+
+
 ## Project Websites
 
 ### Can I use Google Analytics?
@@ -31,10 +55,13 @@
 
  - the users IP addressed would be anonymized before transmitting data
  - the user approved the use of Google Analytics it was loaded
+ - you have a privacy policy clearly explaining what user data is collected on your web site
 
 Court decision around Google Analytics have changed various times
 in the past years and made its use uncertain.
 
+For this reason, ASF projects shall not use Google Analytics at all.
+
 ### Can I use Google Fonts?
 
 You can use Google Fonts, but please host the fonts on ASF servers.
diff --git a/faq/infrastructure.md b/faq/infrastructure.md
new file mode 100644
index 0000000..769a4cb
--- /dev/null
+++ b/faq/infrastructure.md
@@ -0,0 +1,49 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+layout: default
+---
+
+# Infrastructure FAQ
+
+## When should I notify privacy@?
+
+All changes which may require an update in our terms or other privacy related
+documentation need to be reported to privacy@apache.org. In best case, with some 
+time between announcement and change.
+
+Examples for changes which may require privacy policy updates:
+
+ - adding a new service, like webhost server company
+ - removing a service, which may not be any longer in the terms
+ - changes to logfiles, in example when IP addresses are logged (which werent't before)
+ - moving data with PI to other services like a managed service
+ - a new domain was registered, transferred or removed
+
+Other notifications may be sent when:
+
+ - another office or committee requests user data from infra, which they may not access (like running analytics on diversification with a 3rd party)
+ - a security issue happened and user addresses and password have been stolen (data leaks in general)
+
+No notification is required when:
+
+ - new VMs are started or reorganized with companies which we already have an DPA for
+ - data is migrated from an outdated database version to a new version
+ - a CDN is setup with a company which we already have a DPA for and which is already mentioned in the terms
+ - a new project subdomain was created or removed
+ - a new user account was created or removed
diff --git a/index.md b/index.md
index 3d3bbe8..5f97f6c 100644
--- a/index.md
+++ b/index.md
@@ -21,14 +21,14 @@
 
 # ASF - Data Privacy
 
-Welcome to the Data Privacy website. 
+Welcome to the Data Privacy website.
 
 The Apache Software Foundation is committed to protect the privacy
 of their Members, Committers and Users.
 
 ## Privacy related questions
 
-If you have questions related to privacy at 
+If you have questions related to privacy at
 The Apache Software Foundation which are not of confidential
 nature, feel free to ask at our (archived) mailing list:
 
diff --git a/policies/asf-domains.md b/policies/asf-domains.md
new file mode 100644
index 0000000..25d0e34
--- /dev/null
+++ b/policies/asf-domains.md
@@ -0,0 +1,69 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+layout: default
+---
+
+# Domains controlled by The Apache Software Foundation
+
+The following list represents all domains currently owned, maintained and
+controlled by The Apache Software Foundation:
+ 
+ - any23.com
+ - any23.org
+ - apache-extras.org
+ - apache.org
+ - apachecon.com
+ - apachecon.org
+ - apacheextras.org
+ - apachextras.org
+ - cloudstack.com
+ - cloudstack.org
+ - codehaus.org
+ - couchapp.com
+ - couchapp.org
+ - couchhack.org
+ - deltaspike.org
+ - feathercast.org
+ - freemarker.org
+ - gremlint.com
+ - groovy-lang.org
+ - ignite.run
+ - jclouds.com
+ - jclouds.net
+ - jclouds.org
+ - jspwiki.org
+ - libcloud.com
+ - libcloud.net
+ - libcloud.org
+ - modssl.com
+ - modssl.net
+ - myfaces.org
+ - netbeans.org
+ - ofbiz.org
+ - openoffice.org
+ - openwhisk.com
+ - openwhisk.net
+ - openwhisk.org
+ - projectgeode.org
+ - qi4j.org
+ - spamassassin.org
+ - subversion.com
+ - subversion.net
+ - subversion.org
+ - tinkerpop.com
diff --git a/policies/index.md b/policies/index.md
new file mode 100644
index 0000000..e8736e3
--- /dev/null
+++ b/policies/index.md
@@ -0,0 +1,32 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+layout: default
+---
+
+# Available Policies
+
+## Privacy Policies 
+
+ - [Privacy Policy for public services](/policies/privacy-policy-public.html)
+ - Privacy Policy for committers
+
+## Internal Policies
+
+ - [Website Policy](/policies/website-policy.html)
+ - [Mailing List Policy](/policies/mailinglist-policy.html)
\ No newline at end of file
diff --git a/policies/mailinglist-policy.md b/policies/mailinglist-policy.md
new file mode 100644
index 0000000..e5fed01
--- /dev/null
+++ b/policies/mailinglist-policy.md
@@ -0,0 +1,82 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+layout: default
+---
+
+**---> DRAFT VERSION**
+
+This policy describes restrictions for mailing lists managed by the
+ASF or hosted on ASF servers.
+
+## 1) Subscription Information
+
+When a user subscribes to a new mailing list, the following text need to be included 
+when asking for subscription confirmation:
+
+"By subscribing to this mailing list you agree to the privacy policies of 
+The Apache Software Foundation. The privacy policies can be found at:
+https://privacy.apache.org/policies/
+
+The subscriber is fully aware that message may be posted in public and distributed by 3rd parties. The subscriber is also aware, that private message lists will also be read by multiple people with appropriate access rights, like - but not exclusively - Foundation Members, Board Members, Officers etc..
+
+The subscriber is also fully aware that messages may not be (fully) removed from our archives if there is no strong reason to do so; also, we may decide to only remove parts of a message."
+
+## 2) Email distribution
+
+Every email send from our mailing list servers have a footer message with the text:
+"You receive this message because you are subscribed to &lt;listname&gt;. You can unsubscribe any time by sending a blank message to: &lt;listname&gt;-unsubscribe@&lt;subdomain&gt;.apache.org
+
+## 3) Message/Data removal
+
+Messages are only edited in rare occassions and when necessary from a privacy perspective.
+
+Messages need to be edited or removed, when personal information according to the GDPR or CCPA is disclosed and need to be removed. 
+
+This includes all data which makes it possible to identify a person. In example:
+
+ - full name
+ - email address
+ - phone number
+ - address, city, country of origin
+ - ethnicity
+ - medical conditions
+ - etc
+
+Messages are not considered for removal when data is not related to a person:
+
+ - login names (if it is not a real name) 
+ - ssh passwords
+ - production IP addresses
+ - machine names 
+ - URLs 
+
+Please not that any edit to our archives does not automatically edit the archives of 3rd party services which mirror our archives. A requestors will need to contact mirror services themselves.
+
+## 4) Procedures for archive modifications
+
+A removal request need to be sent to privacy@apache.org (private, but archived list) or directly sent to vp-privacy@apache.org. Please note that you request will be documented for future reference.
+
+Please include the following:
+
+ - country of residence, to apply the right data privacy laws
+ - the list of messages to be removed or edited
+
+After submitting the request, VP Data Privacy will confirm it's receipt and discuss appropriate solutions with the Infrastructure team.
+
+Please note: The Apache Software Foundation is a volunteer organization; we do our best to handle each request as quickly as we can.
\ No newline at end of file
diff --git a/policies/privacy-policy-committer.md b/policies/privacy-policy-committer.md
new file mode 100644
index 0000000..fb82ce3
--- /dev/null
+++ b/policies/privacy-policy-committer.md
@@ -0,0 +1,43 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+layout: default
+---
+
+**---> DRAFT VERSION**
+
+
+This Privacy Policy clarifies the nature, scope and purpose of the processing of personal data (hereinafter referred to as "Data") within our online offering and the related websites, features and content, as well as external online presence, e.g. our social media profiles on. (collectively referred to as "online offer"). With regard to the terminology used, e.g. "Processing" or "Responsible", we refer to the definitions in Article 4 of the General Data Protection Regulation (GDPR).
+
+## 1.  Name and contact details of the controller and the company data protection officer
+
+This privacy policy applies to data processing by:
+
+Responsible:    
+
+The Apache Software Foundation  
+V. P. Data Privacy  
+1000 N West Street, Suite 1200  
+Wilmington, DE  19801  
+U.S.A.  
+
+E-Mail: vp-privacy@apache.org
+
+##  2. Collection and storage of personal data and the nature and purpose of their use
+
+TODO
diff --git a/policies/privacy-policy-public.md b/policies/privacy-policy-public.md
new file mode 100644
index 0000000..dc2a40b
--- /dev/null
+++ b/policies/privacy-policy-public.md
@@ -0,0 +1,193 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+layout: default
+---
+
+**---> DRAFT VERSION**
+
+
+This Privacy Policy clarifies the nature, scope and purpose of the processing of personal data (hereinafter referred to as "Data") within our online offering and the related websites, features and content, as well as external online presence, e.g. our social media profiles on. (collectively referred to as "online offer"). With regard to the terminology used, e.g. "Processing" or "Responsible", we refer to the definitions in Article 4 of the General Data Protection Regulation (GDPR).
+
+## 1.  Name and contact details of the controller and the company data protection officer
+
+This privacy policy applies to data processing by:
+
+Responsible:    
+
+The Apache Software Foundation  
+V. P. Data Privacy  
+1000 N West Street, Suite 1200  
+Wilmington, DE  19801  
+U.S.A.  
+
+E-Mail: vp-privacy@apache.org
+
+##  2. Collection and storage of personal data and the nature and purpose of their use
+
+### a) When visiting the website
+
+When you visit our websites ([full list of websites](/policies/asf-domains.html)) or one of our subdomains, the browser used on your device automatically sends information to the server of our website. This information is temporarily stored in a so-called log file. The following information will be collected without your intervention and stored until automated deletion:
+
+ - IP address of the requesting computer,
+ - date and time of access,
+ - name and URL of the retrieved file,
+ - website from which access is made (referrer URL),
+ - the geo information from which access is made,
+ - The browser used and, if applicable, the operating system of your computer and the name of your access provider.
+
+The data mentioned are processed by us for the following purposes:
+
+ - ensuring a smooth connection of the website,
+ - ensuring comfortable use of our website,
+ - Evaluation of system security and stability as well
+ - for further administrative purposes.
+
+The retention time for this data is 90 days.
+
+The legal basis for data processing is Art. 6 para. 1 p. 1 lit. f GDPR. Our legitimate interest follows from the data collection purposes listed above. In no case we use the collected data for the purpose of drawing conclusions about you.
+In addition, we use cookies and analysis services when visiting our website. Further details can be found under no. 4 and 5 of this privacy policy.
+
+### b) When registering for our newsletter and mailing lists
+
+If, pursuant to Art. 6 para. 1 sentence 1 lit. a GDPR have expressly consented, we use your e-mail address to regularly send you our newsletter. For the receipt of the newsletter the indication of an e-mail address is sufficient.
+
+We inform our visitors at regular intervals through newsletters about news and offers from The Apache Software Foundation.
+
+The newsletter of our company can only be received if (1) the data subject has a valid e-mail address and (2) the person concerned registers for the newsletter. For legal reasons, a confirmation e-mail will be sent to the e-mail address entered by an affected person for the first time for newsletter mailing using the double-opt-in procedure. This confirmation email is used to check whether the owner of the e-mail address as the person concerned authorized the receipt of the newsletter.
+
+When subscribing to the newsletter, we store the date and time of registration and the email address. The collection of this data is necessary in order to understand the (possible) misuse of an affected person's e-mail address at a later date and therefore serves as legal safeguards for the controller.
+
+The personal data collected in the context of registering for the newsletter will be used exclusively to send our newsletter. 
+
+Subscribers may also be notified by e-mail if this is necessary for the operation of the newsletter service or registration, as might be the case in the event of changes to the newsletter/mailing list or technical changes. 
+
+There will be no transfer of the personal data collected as part of the newsletter service to third parties.
+
+Subscription to our newsletter may be terminated by the person concerned at any time. The consent to the storage of personal data that the data subject has given us for the newsletter dispatch can be revoked at any time. For the purpose of revoking the consent, instructions are given by the end of any email. 
+
+### c) When registering for our mailing lists
+
+If, pursuant to Art. 6 para. 1 sentence 1 lit. a GDPR have expressly consented, we use your e-mail address to send you messages arriving at our mailing lists. For the receipt of the mailing list message the indication of an e-mail address is sufficient.
+
+Visitors may communicate with us through our mailing lists.
+
+The mailing list messages of our organisation can only be received if (1) the data subject has a valid e-mail address and (2) the person concerned registers for the mailing list. For legal reasons, a confirmation e-mail will be sent to the e-mail address entered by an affected person for the first time using the double-opt-in procedure. This confirmation email is used to check whether the owner of the e-mail address as the person concerned authorized the receipt of the mailing list messages.
+
+When subscribing to the mailing list, we store the date and time of registration and the email address. The collection of this data is necessary in order to understand the (possible) misuse of an affected person's e-mail address at a later date and therefore serves as legal safeguards for the controller. When a mailing list is archived, the log file will be deleted.
+
+The personal data collected in the context of registering for the mailing list will be used exclusively to send messages arriving at the mailing list. The personal data collected in the context of registering for a mailing list will be used exclusively to send messages arriving at our mailing list. 
+
+Subscribers may also be notified by e-mail if this is necessary for the operation of the mailing list service or registration, as might be the case in the event of changes to the mailing list or technical changes. 
+
+We will not actively transfer any personal data as part of the mailing list service to third parties. However, almost all of our mailing lists are of public nature.
+
+This means, your name and email may be exposed to the public. Also, all information you send to a mailing list will be exposed to the public. Third parties may collect this information and process separately. The sender of messages is responsible for exposing their data to the public.
+
+All content sent to mailing lists are archived indefinitely. By using our mailing list service, you agree that any content is archived in that way.
+
+Subscription to our mailing lists may be terminated by the person concerned at any time. The consent to the storage of personal data that the data subject has given us for the mailing list dispatch can be revoked at any time. For the purpose of revoking the consent, instructions are given by the end of any email. 
+
+## 3. Disclosure of data
+
+A transfer of your personal data to third parties for purposes other than those listed below does not take place.
+We only share your personal information with third parties if:
+
+ - You your according to Art. 6 para. 1 p. 1 lit. a GDPR have given express consent to this
+ - disclosure pursuant to Art. 6 para. 1 sentence 1 lit. f GDPR is required to assert, exercise or defend legal claims and there is no reason to assume that you have a predominantly legitimate interest in not disclosing your data,
+ - in the event that disclosure pursuant to Art. 6 para. 1 sentence 1 lit. c GDPR is a legal obligation, as well
+ - as permitted by law and according to Art. 6 para. 1 sentence 1 lit. b GDPR is required for the settlement of contractual relationships with you.
+
+## 4. External service providers
+
+The Apache Software Foundation uses the following external service providers who help to optimize the service. Insofar as these service providers process data on behalf of The Apache Software Foundation, agreements have been concluded with them which set the European data protection standards as binding and in particular prohibit the use of the data for other purposes. If we commission third parties to process data on the basis of a so-called "contract processing contract", this is done on the basis of Art. 28 GDPR.
+
+### (a) Hetzner: Hosting 
+
+The Apache Software Foundation uses the Hetzner Data Centers (Hetzner Online GmbH, Industriestr. 25, 91710 Gunzenhausen, Germany) for maintaining our servers. The servers are located in Finland and used for hosting databases and webcontent. 
+
+### (b) Amazon Web Services: DNS
+The Apache Software Foundation uses the Amazon Web Services ("AWS") service of Amazon Web Services, Inc. (P.O. Box 81226, Seattle, WA 98108-1226, USA), for hosting DNS records. As by the nature of DNS, the data is stored in several server accross the globe. AWS data centers are certified to ISO 27001, 27017 and 2018 as well as PCI DSS Level 1.
+
+### (c) LeaseWeb: Hosting 
+
+The Apache Software Foundation uses the LeaseWeb Data Centers (Leaseweb USA, Inc., 9301 Innovation Drive / Suite 100, Manassas, VA 20110) for maintaining our servers. The servers are located in the USA and used for hosting databases and webcontent. LeaseWeb fully supports the GDPR. Details and privacy statements can be found [here](https://www.leaseweb.us/legal/personal-data-protection-acts).
+
+### (d) Microsoft Azure: Hosting 
+
+The Apache Software Foundation uses the Microsoft Azure Data Centers (Microsoft Corporation, One Microsoft Way, Redmond, Washington 98052 USA) for maintaining our servers. The servers are located in the USA and used for hosting databases and webcontent. Microsoft fully supports the GDPR. Details and privacy statements can be found [here](https://www.microsoftvolumelicensing.com/DocumentSearch.aspx?Mode=3&DocumentTypeId=67).
+
+### (d) Online.net (Scaleway): Hosting 
+
+The Apache Software Foundation uses the Scaleway Data Centers (Scaleway S.A.S., 8 rue de la Ville l’Evêque, 75008 Paris) for maintaining our servers. The servers are located in Europe and used for hosting databases and webcontent. Scaleway fully supports the GDPR. Details and privacy statements can be found [here](https://images-www.scaleway.com/wp-content/uploads/2021/05/05103001/DPA_EN_2020.pdf).
+
+
+### (e) GitHub: Source Code Hosting 
+
+The Apache Software Foundation uses the GitHub Services (GitHub Inc., 88 Colin P. Kelly Jr. Street, San Francisco, California 94107 USA) for serving and maintaining source code. GitHub fully supports the GDPR. Details and privacy statements can be found [here](https://github.com/enterprise-legal/github-addendum-to-microsoft-dpa).
+
+### (f) Fastly: CDN
+
+The Apache Software Foundation uses the GitHub Services (Fastly Inc., PO Box 78266, San Francisco, California, 94107, United States of America) for serving our services. Fastly fully supports the GDPR. Details and privacy statements can be found [here](https://www.fastly.com/data-processing).
+
+
+## 5. Social Media Plug-ins
+
+We rely on our website on the basis of Art. 6 para. 1 sentence 1 lit. f GDPR social plug-ins from the social networks Facebook, Twitter and Instagram to make our company better known. The underlying commercial purpose is to be regarded as a legitimate interest within the meaning of the GDPR. Responsibility for the operation compliant with data protection is to be guaranteed by their respective providers. The integration of these plug-ins by us is done by means of the so-called two-click method to protect visitors to our website in the best possible way.
+
+### a) Youtube
+
+On our website we have integrated components from YouTube. YouTube is an internet video portal that allows video publishers to freely watch video clips and other users for free viewing, rating and commenting. YouTube allows the publication of all types of videos, so that both complete film and television broadcasts, but also music videos, trailers or user-made videos via the Internet portal are available.
+
+YouTube's operating company is YouTube, LLC, 901 Cherry Ave., San Bruno, CA 94066, USA. YouTube, LLC is a subsidiary of Google Inc., 1600 Amphitheater Pkwy, Mountain View, CA 94043-1351, USA.
+
+Each visit to one of the pages of this site operated by the controller and incorporating a YouTube component (YouTube video) will automatically cause the Internet browser on the subject's information technology system to be represented by the respective YouTube component to download an illustration of the corresponding YouTube component from YouTube. More information about YouTube can be found at https://www.youtube.com/yt/about/en/. As part of this technical process, YouTube and Google are aware of the specific bottom of our site visited by the person concerned.
+If the data subject is logged in to YouTube at the same time, YouTube recognizes by calling a sub-page containing a YouTube video, which specific bottom of our website the affected person visits. This information is collected by YouTube and Google and associated with the individual YouTube account.
+
+YouTube and Google will always receive information through the YouTube component that the data subject has visited our website if the data subject is simultaneously logged into YouTube at the time of access to our website; this happens regardless of whether the person clicks on a YouTube video or not. If such transmission of this information to YouTube and Google is not wanted by the data subject, it can prevent the transmission by logging out of their YouTube account before calling our website.
+
+YouTube's privacy policy, available at https://www.google.com/intl/en/policies/privacy/, identifies the collection, processing, and use of personally identifiable information by YouTube and Google.
+
+## 7. Affected rights
+
+You have the right:
+
+ - in accordance with Art. 15 GDPR, to request information about your personal data processed by us. In particular, you can provide information on the processing purposes, the category of personal data, the categories of recipients to whom your data has been disclosed, the planned retention period, the right to rectification, deletion, limitation of processing or opposition, the existence of a The right to complain, the source of their data, if not collected from us, and the existence of automated decision-making including profiling and, where appropriate, meaningful information about their details;
+ - in accordance with Art. 16 GDPR, immediately demand the correction of incorrect or complete personal data stored with us;
+ - in accordance with Art. 17 GDPR, to demand the deletion of your personal data stored by us, unless the processing for the exercise of the right to freedom of expression and information, for the fulfillment of a legal obligation, for reasons of public interest or for the assertion, exercise or defense of Legal claims is required;
+ - to demand the restriction of the processing of your personal data according to Art. 18 GDPR, as far as the accuracy of the data is disputed by you, the processing is unlawful, but you reject its deletion and we no longer need the data, but you assert this, Exercise or defense of legal claims or you have objected to the processing in accordance with Art. 21 GDPR;
+ - in accordance with Art. 20 GDPR, to receive your personal data provided to us in a structured, standard and machine-readable format or to request transmission to another person responsible;
+ - according to Art. 7 para. 3 GDPR, to revoke your once given consent to us at any time. As a result, we are not allowed to continue the data processing based on this consent for the future and
+ - to complain to a supervisory authority pursuant to Art. 77 GDPR. As a rule, you can contact the supervisory authority of your usual place of residence or work or our office.
+
+## 8. Right to object
+
+If your personal data are based on legitimate interests in accordance with Art. 6 para. 1 sentence 1 lit. f GDPR are processed, you have the right to file an objection against the processing of your personal data in accordance with Art. 21 GDPR, provided that there are reasons for this arising from your particular situation or the objection is directed against direct mail. In the latter case, you have a general right of objection, which is implemented by us without specifying any particular situation.
+If you would like to exercise your right of revocation or objection, please send an e-mail to vp-privacy@apache.org.
+
+## 9. Data security
+
+We use the popular SSL (Secure Socket Layer) method within the site visit, in conjunction with the highest level of encryption supported by your browser. In general, this is a 256-bit encryption. If your browser does not support 256-bit encryption, we'll use 128-bit v3 technology instead. Whether a single page of our website is encrypted is shown by the closed representation of the key or lock icon in the lower status bar of your browser.
+
+We also take appropriate technical and organizational security measures to protect your data against accidental or intentional manipulation, partial or total loss, destruction or against unauthorized access by third parties. Our security measures are continuously improved in line with technological developments.
+
+## 10. Updating and changing this privacy policy
+
+This privacy policy is currently valid and is valid as of **TODO: VALIDITY DATE**.
+
+As a result of the further development of our website and offers thereof or due to changed legal or official requirements, it may be necessary to change this privacy policy. The current privacy policy can be viewed and printed by you at any time on the website at https://privacy.apache.org/policies/privacy-policy-public.html.
\ No newline at end of file
diff --git a/policies/website-policy.md b/policies/website-policy.md
new file mode 100644
index 0000000..991bcfb
--- /dev/null
+++ b/policies/website-policy.md
@@ -0,0 +1,63 @@
+---
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+layout: default
+---
+
+**---> DRAFT VERSION**
+
+This policy describes restrictions for websites managed by the
+ASF or hosted on ASF servers.
+
+## 1) Analytics
+
+All analytics software embedded on a website needs to be confirmed by
+V.P. Data Privacy. Analytics software need to support the GDPR and a
+DPA need to be signed before it can be used. 
+
+Note: Google Analytics cannot be used on any ASF website because
+of Schrems-II.
+
+## 2) YouTube
+
+YouTube content can be embedded only when the user gave consent before loading
+any file from YouTube.
+
+## 3) Cookies
+
+No cookies are allowed, except the user gave consent before setting the cookie.
+
+If the cookie is not used for tracking, but used for managing a so called session, no user content is necessary.
+
+## 4) Using Assets from other Domains
+
+Assets (JS, Images, Fonts, CSS etc) from other domains cannot be loaded. Assets
+need to be hosted on ASF servers.
+
+## 5) (Google) Maps 
+
+(Google) can usually be used, when the user gave consent before loading.
+
+## 6) Social Media
+
+Social Media buttons (Facebook Like, showing Instagram embeds, Twitter pixel) can
+only be used when the user gave consent before loading.
+
+## 7) Facebook Pages
+
+ASF Projects cannot run Facebook pages due to Art. 5 §2 and Art. 26 of the GDPR.
