diff --git a/aleksis/apps/paweljong/rules.py b/aleksis/apps/paweljong/rules.py
index 1389ae879299d6a36c4ae8b3fe56198359cf3f5c..3e153809d0d96e7ee5ebeeab1becee85b926cdcd 100644
--- a/aleksis/apps/paweljong/rules.py
+++ b/aleksis/apps/paweljong/rules.py
@@ -253,3 +253,6 @@ rules.add_perm("paweljong.can_retract_registration_rule", can_retract_registrati
 
 can_view_terms_predicate = has_person & (is_participant)
 rules.add_perm("paweljong.can_view_terms_rule", can_view_terms_predicate)
+
+can_mark_payment_as_payed_predicate = has_person & (is_organiser)
+rules.add_perm("paweljong.mark_payment_payed_rule", can_mark_payment_as_payed_predicate)
diff --git a/aleksis/apps/paweljong/templates/paweljong/event_registration/full.html b/aleksis/apps/paweljong/templates/paweljong/event_registration/full.html
index a077f759dbc303df89ce9fd60607c1f7e585ec38..e9090228741c1bfddc3589ecfe14b1226c38c054 100644
--- a/aleksis/apps/paweljong/templates/paweljong/event_registration/full.html
+++ b/aleksis/apps/paweljong/templates/paweljong/event_registration/full.html
@@ -14,6 +14,7 @@
   {% has_perm 'paweljong.delete_registration' user registration as can_delete_registration %}
   {% has_perm 'paweljong.send_notification_mail' user registration as can_send_notification %}
   {% has_perm 'paweljong.can_retract_registration_rule' user registration as can_retract_registration %}
+  {% has_perm 'paweljong.mark_payment_payed_rule' user registration as can_mark_registration_payed %}
   {% has_perm 'tezor.view_invoice_rule' user registration as can_view_invoice %}
   {% has_perm 'core.edit_person_rule' user person as can_change_person %}
 
@@ -282,11 +283,7 @@
                   <i class="material-icons iconify" data-icon="{{ invoice.get_variant_icon }}"></i>
                 </td>
                 <td>
-                  <select name="variant" disabled>
-                    {% for choice in invoice.get_variant_choices %}
-                      <option value="{{ choice.0 }}" {% if invoice.variant == choice.0 %}selected{% endif %}>{{ choice.1 }}</option>
-                    {% endfor %}
-                  </select>
+                  {{ invoice.variant }}
                 </td>
               </tr>
               <tr>
@@ -305,6 +302,16 @@
                   {{ invoice.due_date }}
                 </td>
               </tr>
+              {% if can_mark_registration_payed and not invoice.status == "confirmed" %}
+              <tr>
+                <td>
+                  <a href="{% url 'pay_registration_by_pk' registration.pk %}" class="btn waves-effect waves-light">
+                    <i class="material-icons left iconify" data-icon="mdi:account-check"></i>
+                    {% trans "Mark payed" %}
+                  </a>
+                </td>
+              </tr>
+              {% endif %}
             </table>
           </div>
         </div>
diff --git a/aleksis/apps/paweljong/urls.py b/aleksis/apps/paweljong/urls.py
index a83430272092efded259e35760b0306e544c37d9..41a35aed54c83d50575f98273421f351c9b75b5b 100644
--- a/aleksis/apps/paweljong/urls.py
+++ b/aleksis/apps/paweljong/urls.py
@@ -84,6 +84,11 @@ urlpatterns = [
         views.CheckInRegistration.as_view(),
         name="check_in_registration_by_pk",
     ),
+    path(
+        "event/registrations/<int:pk>/pay",
+        views.MarkRegistrationPayed.as_view(),
+        name="pay_registration_by_pk",
+    ),
     path(
         "event/registrations/<int:pk>/retract",
         views.RetractRegistration.as_view(),
diff --git a/aleksis/apps/paweljong/views.py b/aleksis/apps/paweljong/views.py
index 23a067b5079395d00bd53b1e3d4c2815d34aac1f..5f9778af539d1ac89ad3d1fee86ef10e40af1d52 100644
--- a/aleksis/apps/paweljong/views.py
+++ b/aleksis/apps/paweljong/views.py
@@ -25,6 +25,7 @@ from rules.contrib.views import PermissionRequiredMixin, permission_required
 from templated_email import send_templated_mail
 
 from aleksis.apps.postbuero.models import MailAddress
+from aleksis.apps.tezor.models.invoice import Invoice
 from aleksis.core.mixins import AdvancedCreateView, AdvancedDeleteView, AdvancedEditView
 from aleksis.core.models import Activity, Group, Person
 from aleksis.core.util import messages
@@ -1034,3 +1035,22 @@ class CheckInRegistration(PermissionRequiredMixin, View):
             messages.error(self.request, _("Person is already checked in!"))
 
         return redirect("event_detail_by_name", slug=registration.event.slug)
+
+
+class MarkRegistrationPayed(PermissionRequiredMixin, View):
+
+    permission_required = "paweljong.mark_payment_payed_rule"
+
+    def get_object(self, *args, **kwargs):
+        registration = EventRegistration.objects.get(id=self.kwargs["pk"])
+        invoice = registration.get_invoice()
+        return invoice
+
+    def get(self, *args, **kwargs):
+        invoice = self.get_object()
+
+        invoice.status = "confirmed"
+        invoice.save()
+        messages.success(request, _("Successfully marked as payed!"))
+
+        return redirect("registration_by_pk", pk=invoice.for_object.pk)