diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 054e1dc63d669f99a3c67f4384abf77af7d9068c..8df41116abd320c3b09e782405463a27749fd3f6 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -12,6 +12,11 @@ Unreleased
 This version requires AlekSIS-Core 3.0. It is incompatible with any previous
 version.
 
+Breaking
+~~~~~~~~
+
+* `PaymentVariant`'s class variable `name` has been renamed to `_class_name`.
+
 Removed
 ~~~~~~~
 
diff --git a/aleksis/apps/tezor/models/base.py b/aleksis/apps/tezor/models/base.py
index fd51caa42aa650dc4056bd7bd28bf45ffb176d6c..18dc03a4e1cbc6139f1d288052efc9caa25645e0 100644
--- a/aleksis/apps/tezor/models/base.py
+++ b/aleksis/apps/tezor/models/base.py
@@ -9,7 +9,7 @@ class Client(ExtensibleModel):
     email = models.EmailField(verbose_name=_("Email"))
 
     def get_payment_variant_choices(self):
-        return [(v.name, v.verbose_name) for v in self.payment_variants.all()]
+        return [(v._class_name, v.verbose_name) for v in self.payment_variants.all()]
 
     def __str__(self):
         return self.name
diff --git a/aleksis/apps/tezor/models/invoice.py b/aleksis/apps/tezor/models/invoice.py
index b7f37816d9e7267a276727deccc532340d02fda4..550cbe08f1f122b9a7b97ef66e29224efbe3d760 100644
--- a/aleksis/apps/tezor/models/invoice.py
+++ b/aleksis/apps/tezor/models/invoice.py
@@ -127,14 +127,16 @@ class Invoice(BasePayment, PureDjangoModel):
         super().save(*args, **kwargs)
 
     def get_variant(self):
-        variants = [v for v in self.group.client.payment_variants.all() if v.name == self.variant]
+        variants = [
+            v for v in self.group.client.payment_variants.all() if v._class_name == self.variant
+        ]
         return variants[0] if variants else None
 
     def get_absolute_url(self):
         return reverse("invoice_by_token", kwargs={"slug": self.token})
 
     def get_variant_name(self) -> str:
-        return PaymentVariant.registered_objects_dict[self.variant].name
+        return PaymentVariant.registered_objects_dict[self.variant]._class_name
 
     def get_variant_icon(self) -> str:
         return PaymentVariant.registered_objects_dict[self.variant].icon
diff --git a/aleksis/apps/tezor/models/payment_variant.py b/aleksis/apps/tezor/models/payment_variant.py
index 1fb91aaf08c88252db9af64bfa9ecffc76762557..62d95f4b73fe06f073be1aef8553ca82ef3fefd1 100644
--- a/aleksis/apps/tezor/models/payment_variant.py
+++ b/aleksis/apps/tezor/models/payment_variant.py
@@ -44,7 +44,7 @@ class PaymentVariant(RegistryObject, ExtensiblePolymorphicModel):
 class SofortPaymentVariant(PaymentVariant):
     icon = "simple-icons:klarna"
     verbose_name = _("Klarna/Sofort")
-    name = "sofort"
+    _class_name = "sofort"
 
     api_id = models.CharField(verbose_name=_("API ID"), max_length=255)
     api_key = models.CharField(verbose_name=_("API key"), max_length=255)
@@ -64,7 +64,7 @@ class SofortPaymentVariant(PaymentVariant):
 class PaypalPaymentVariant(PaymentVariant):
     icon = "logos:paypal"
     verbose_name = _("PayPal")
-    name = "paypal"
+    _class_name = "paypal"
 
     api_client_id = models.CharField(verbose_name=_("Client ID"), max_length=255)
     secret = models.CharField(verbose_name=_("Secret"), max_length=255)
@@ -90,7 +90,7 @@ class PaypalPaymentVariant(PaymentVariant):
 class SEPADirectDebitPaymentVariant(PaymentVariant):
     icon = "mdi:bank-transfer"
     verbose_name = _("SEPA Direct Debit")
-    name = "sdd"
+    _class_name = "sdd"
 
     creditor = models.CharField(verbose_name=_("Creditor name"), max_length=255)
     creditor_identifier = models.CharField(
@@ -120,7 +120,7 @@ class SEPADirectDebitPaymentVariant(PaymentVariant):
 class PledgePaymentVariant(PaymentVariant):
     icon = "mdi:hand-coin"
     verbose_name = _("Payment pledge/Manual payment")
-    name = "pledge"
+    _class_name = "pledge"
 
     def get_provider(self):
         from djp_sepa.providers import PaymentPledgeProvider  # noqa
diff --git a/aleksis/apps/tezor/templates/tezor/invoice/full.html b/aleksis/apps/tezor/templates/tezor/invoice/full.html
index 1263c94d83783aa8e8ea7156088713362886947c..7ea2caf8db9110a2f825391234ac95bf7a4fb03b 100644
--- a/aleksis/apps/tezor/templates/tezor/invoice/full.html
+++ b/aleksis/apps/tezor/templates/tezor/invoice/full.html
@@ -76,7 +76,7 @@
                   <td>
                     <select name="variant" {% if not can_change_variant %}disabled{% endif %}>
                       {% for payment_variant in object.group.client.payment_variants.all %}
-                        <option value="{{ payment_variant.name }}" {% if object.variant == payment_variant.name %}selected{% endif %}>{{ payment_variant.verbose_name }}</option>
+                        <option value="{{ payment_variant._class_name }}" {% if object.variant == payment_variant._class_name %}selected{% endif %}>{{ payment_variant.verbose_name }}</option>
                       {% endfor %}
                     </select>
                   </td>
diff --git a/aleksis/apps/tezor/views.py b/aleksis/apps/tezor/views.py
index 3fdabfeea09bcb3dc655a869ba9d2321f07ca231..e83aa7072bd1cbbf71950edf7856353105baa811 100644
--- a/aleksis/apps/tezor/views.py
+++ b/aleksis/apps/tezor/views.py
@@ -54,7 +54,7 @@ class DoPaymentView(PermissionRequiredMixin, View):
         self.object = get_object_or_404(self.model, token=token)
 
         allowed_variants = [
-            variant.name for variant in self.object.group.client.payment_variants.all()
+            variant._class_name for variant in self.object.group.client.payment_variants.all()
         ]
 
         new_variant = request.GET.get("variant", None)