diff --git a/doc/images/order_states.png b/doc/images/order_states.png
index 8297351b93..a47808d4b1 100644
Binary files a/doc/images/order_states.png and b/doc/images/order_states.png differ
diff --git a/doc/images/order_states.puml b/doc/images/order_states.puml
index 9c32f0fa12..743c4207ca 100644
--- a/doc/images/order_states.puml
+++ b/doc/images/order_states.puml
@@ -11,6 +11,7 @@ Pending --> Paid: successful payment
Pending --> Expired: automatically\nor manually\non admin action
Expired --> Paid: if payment is received\nonly if quota left
Expired --> Canceled
+Expired --> Pending: manually\non admin action
Paid --> Refunded: manually on\nadmin action\nor if an external\npayment provider\nnotifies about a\npayment refund
Pending --> Canceled: on admin or\ncustomer action
Paid -> Pending: manually on admin action
diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py
index fc3a893acf..294ee9c181 100644
--- a/src/pretix/base/models/orders.py
+++ b/src/pretix/base/models/orders.py
@@ -286,8 +286,6 @@ class Order(LoggedModel):
raise Quota.QuotaExceededException(error_messages['unavailable'])
for quota in quotas:
- # Lock the quota, so no other thread is allowed to perform sales covered by this
- # quota while we're doing so.
if quota.id not in quota_cache:
quota_cache[quota.id] = quota
quota.cached_availability = quota.availability(now_dt)[1]
diff --git a/src/pretix/control/forms/orders.py b/src/pretix/control/forms/orders.py
index 053941c2ff..c335f304dd 100644
--- a/src/pretix/control/forms/orders.py
+++ b/src/pretix/control/forms/orders.py
@@ -1,6 +1,7 @@
from django import forms
from django.core.exceptions import ValidationError
from django.db import models
+from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _
from pretix.base.forms import I18nModelForm
@@ -15,6 +16,12 @@ class ExtendForm(I18nModelForm):
'expires': forms.DateTimeInput(attrs={'class': 'datetimepicker'}),
}
+ def clean(self):
+ data = super().clean()
+ if data['expires'] < now():
+ raise ValidationError(_('The new expiry date needs to be in the future.'))
+ return data
+
class ExporterForm(forms.Form):
diff --git a/src/pretix/control/templates/pretixcontrol/order/index.html b/src/pretix/control/templates/pretixcontrol/order/index.html
index bd5f75fdab..397b206c75 100644
--- a/src/pretix/control/templates/pretixcontrol/order/index.html
+++ b/src/pretix/control/templates/pretixcontrol/order/index.html
@@ -23,11 +23,11 @@