diff --git a/doc/development/api/index.rst b/doc/development/api/index.rst
index 9c9246024f..d4ac408553 100644
--- a/doc/development/api/index.rst
+++ b/doc/development/api/index.rst
@@ -11,5 +11,7 @@ Contents:
ticketoutput
payment
invoice
+ shredder
customview
general
+ quality
diff --git a/doc/development/api/payment.rst b/doc/development/api/payment.rst
index 4c66d81695..01edd2bf34 100644
--- a/doc/development/api/payment.rst
+++ b/doc/development/api/payment.rst
@@ -104,6 +104,8 @@ The provider class
.. automethod:: is_implicit
+ .. automethod:: shred_payment_info
+
Additional views
----------------
diff --git a/doc/development/api/quality.rst b/doc/development/api/quality.rst
new file mode 100644
index 0000000000..46ff5e1fcc
--- /dev/null
+++ b/doc/development/api/quality.rst
@@ -0,0 +1,125 @@
+.. highlight:: python
+ :linenothreshold: 5
+
+.. _`pluginquality`:
+
+Plugin quality checklist
+========================
+
+If you want to write a high-quality pretix plugin, this is a list of things you should check before
+you publish it. This is also a list of things that we check, if we consider installing an externally
+developed plugin on our hosted infrastructure.
+
+A. Meta
+-------
+
+#. The plugin is clearly licensed under an appropriate license.
+
+#. The plugin has an unambiguous name, description, and author metadata.
+
+#. The plugin has a clear versioning scheme and the latest version of the plugin is kept compatible to the latest
+ stable version of pretix.
+
+#. The plugin is properly packaged using standard Python packaging tools.
+
+#. The plugin correctly declares its external dependencies.
+
+#. A contact address is provided in case of security issues.
+
+B. Isolation
+------------
+
+#. If any signal receivers use the `dispatch_uid`_ feature, the UIDs are prefixed by the plugin's name and do not
+ clash with other plugins.
+
+#. If any templates or static files are shipped, they are located in subdirectories with the name of the plugin and do
+ not clash with other plugins or core files.
+
+#. Any keys stored to the settings store are prefixed with the plugin's name and do not clash with other plugins or
+ core.
+
+#. Any keys stored to the user session are prefixed with the plugin's name and do not clash with other plugins or
+ core.
+
+#. Any registered URLs are unlikely to clash with other plugins or future core URLs.
+
+C. Security
+-----------
+
+#. All important actions are logged to the :ref:`shared log storage
{% trans "You can instead take your shop offline. This will hide it from everyone except from the organizer teams you configured to have access to the event." %}
diff --git a/src/pretix/control/templates/pretixcontrol/order/mail_history.html b/src/pretix/control/templates/pretixcontrol/order/mail_history.html
index 98f302a260..d84233a0f0 100644
--- a/src/pretix/control/templates/pretixcontrol/order/mail_history.html
+++ b/src/pretix/control/templates/pretixcontrol/order/mail_history.html
@@ -24,6 +24,9 @@
{% if log.display %}
{{ log.display }}
{% endif %}
+ {% if log.parsed_data.recipient %}
+
{{ log.parsed_data.recipient }}
+ {% endif %}
+ {% blocktrans trimmed %} + This feature allows you to remove personal data from this event. You will first select what kind of data + you want to shred, then you are able to download the affected data and after you confirmed the download, + the data will be removed from the server's database. The data might still exist in backups for a limited + period of time. + {% endblocktrans %} + + {% blocktrans trimmed %} + Using this will not remove the orders for your event, it just scrubs them of data that can be linked + to individual persons. + {% endblocktrans %} + +
+