diff --git a/aleksis/apps/tezor/migrations/0001_initial.py b/aleksis/apps/tezor/migrations/0001_initial.py
index 78902e2c22002582ad57b32b646b851d9f328a94..5edb70016cfa2a9904b0a215dea7b4f318e82299 100644
--- a/aleksis/apps/tezor/migrations/0001_initial.py
+++ b/aleksis/apps/tezor/migrations/0001_initial.py
@@ -11,7 +11,6 @@ class Migration(migrations.Migration):
     initial = True
 
     dependencies = [
-        ('sites', '0002_alter_domain_unique'),
         ('contenttypes', '0002_remove_content_type_name'),
     ]
 
@@ -22,7 +21,6 @@ class Migration(migrations.Migration):
                 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('extended_data', models.JSONField(default=dict, editable=False)),
                 ('name', models.CharField(max_length=255, verbose_name='Name')),
-                ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.site')),
             ],
             managers=[
                 ('objects', aleksis.core.managers.AlekSISBaseManager()),
@@ -36,7 +34,6 @@ class Migration(migrations.Migration):
                 ('name', models.CharField(max_length=255, verbose_name='Invoice group name')),
                 ('template_name', models.CharField(blank=True, max_length=255, verbose_name='Template to render invoices with as PDF')),
                 ('client', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='invoice_groups', to='tezor.client', verbose_name='Linked client')),
-                ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.site')),
             ],
             managers=[
                 ('objects', aleksis.core.managers.AlekSISBaseManager()),
@@ -89,6 +86,6 @@ class Migration(migrations.Migration):
         ),
         migrations.AddConstraint(
             model_name='client',
-            constraint=models.UniqueConstraint(fields=('name', 'site'), name='uniq_client_per_site'),
+            constraint=models.UniqueConstraint(fields=('name',), name='uniq_client_per_site'),
         ),
     ]
diff --git a/aleksis/apps/tezor/migrations/0003_manual_invoicing.py b/aleksis/apps/tezor/migrations/0003_manual_invoicing.py
index 125bae2603ba33764d4dcb3c245d92dc06a2255e..c6d71e57df58a47b5286d7fcbae9f23a569afd2c 100644
--- a/aleksis/apps/tezor/migrations/0003_manual_invoicing.py
+++ b/aleksis/apps/tezor/migrations/0003_manual_invoicing.py
@@ -9,7 +9,6 @@ class Migration(migrations.Migration):
 
     dependencies = [
         ('core', '0038_notification_send_at'),
-        ('sites', '0002_alter_domain_unique'),
         ('tezor', '0002_invoice_due_date'),
     ]
 
@@ -41,11 +40,6 @@ class Migration(migrations.Migration):
             model_name='invoice',
             constraint=models.CheckConstraint(check=models.Q(('for_object_id__isnull', True), ('person__isnull', True), _connector='OR'), name='object_or_person'),
         ),
-        migrations.AddField(
-            model_name='invoiceitem',
-            name='site',
-            field=models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.site'),
-        ),
         migrations.AddField(
             model_name='invoice',
             name='items',
diff --git a/aleksis/apps/tezor/migrations/0007_client_payment_variants.py b/aleksis/apps/tezor/migrations/0007_client_payment_variants.py
index 92b9380215f1a1fa285e615ebe39efde0c9a353d..e844067627f299a57312b2267573666e53a6bd3e 100644
--- a/aleksis/apps/tezor/migrations/0007_client_payment_variants.py
+++ b/aleksis/apps/tezor/migrations/0007_client_payment_variants.py
@@ -11,14 +11,14 @@ def configure_clients(apps, schema_editor):
     db_alias = schema_editor.connection.alias
 
     Client = apps.get_model("tezor", "Client")
-    SitePreferenceModel = apps.get_model("core", "SitePreferenceModel")
+    GlobalPreferenceModel = apps.get_model("dynamic_preferences", "GlobalPreferenceModel")
 
     fields = ["sofort_api_id", "sofort_api_key", "sofort_project_id", "paypal_client_id", "paypal_secret", "paypal_capture", "pledge_enabled", "sdd_creditor", "sdd_creditor_identifier"]
     values = {}
     for field in fields:
         try:
-            pref = SitePreferenceModel.objects.using(db_alias).get(section="payments", name=field)
-        except SitePreferenceModel.DoesNotExist:
+            pref = GlobalPreferenceModel.objects.using(db_alias).get(section="payments", name=field)
+        except GlobalPreferenceModel.DoesNotExist:
             continue
 
         value = pref.raw_value
diff --git a/aleksis/apps/tezor/migrations/0010_alter_client_options_alter_invoice_options_and_more.py b/aleksis/apps/tezor/migrations/0010_alter_client_options_alter_invoice_options_and_more.py
index 45e0a284018bdca6cfcd10fea7e791ba6dc6aa7c..70bbdb816c2307a62ef482daf99d8ca1f042298a 100644
--- a/aleksis/apps/tezor/migrations/0010_alter_client_options_alter_invoice_options_and_more.py
+++ b/aleksis/apps/tezor/migrations/0010_alter_client_options_alter_invoice_options_and_more.py
@@ -8,7 +8,6 @@ import django.db.models.deletion
 class Migration(migrations.Migration):
 
     dependencies = [
-        ('sites', '0002_alter_domain_unique'),
         ('tezor', '0009_invoice_billing_phone'),
     ]
 
diff --git a/aleksis/apps/tezor/migrations/0011_drop_sites.py b/aleksis/apps/tezor/migrations/0011_drop_sites.py
new file mode 100644
index 0000000000000000000000000000000000000000..e4782dc634d57e0a8256af8bd39ab6cbdb85e866
--- /dev/null
+++ b/aleksis/apps/tezor/migrations/0011_drop_sites.py
@@ -0,0 +1,44 @@
+# Generated by Django 4.2.10 on 2024-03-01 11:59
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("tezor", "0010_alter_client_options_alter_invoice_options_and_more"),
+    ]
+
+    operations = [
+        migrations.AlterModelManagers(
+            name="client",
+            managers=[],
+        ),
+        migrations.AlterModelManagers(
+            name="invoicegroup",
+            managers=[],
+        ),
+        migrations.AlterModelManagers(
+            name="invoiceitem",
+            managers=[],
+        ),
+        migrations.RemoveConstraint(
+            model_name="client",
+            name="uniq_client_per_site",
+        ),
+    ] + [
+        migrations.RunSQL(
+            f"ALTER TABLE tezor_{model_name} drop column if exists site_id;"
+        ) for model_name  in
+        [
+            "client",
+            "invoicegroup",
+            "invoiceitem",
+        ]
+    ] + [
+        migrations.AlterField(
+            model_name="client",
+            name="name",
+            field=models.CharField(max_length=255, unique=True, verbose_name="Name"),
+        ),
+    ]
diff --git a/aleksis/apps/tezor/model_extensions.py b/aleksis/apps/tezor/model_extensions.py
deleted file mode 100644
index 2c30e614478d877cdd2c14a43334442a6e26e972..0000000000000000000000000000000000000000
--- a/aleksis/apps/tezor/model_extensions.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.utils.translation import gettext as _
-
-from jsonstore import CharField
-
-from aleksis.core.models import Person
-
-Person.field(
-    external_accounting_number=CharField(verbose_name=_("External accounting number"), blank=True)
-)
diff --git a/aleksis/apps/tezor/models/base.py b/aleksis/apps/tezor/models/base.py
index 3d90bd392d95339e2f4821321da4c9e7a231778f..5bb2d1689c3bc8cefd8485527a20a83603b8d975 100644
--- a/aleksis/apps/tezor/models/base.py
+++ b/aleksis/apps/tezor/models/base.py
@@ -15,7 +15,7 @@ class Client(ExtensibleModel):
         "pledge": (_("Payment pledge / manual payment"), "mdi:hand-coin"),
         "sdd": (_("SEPA Direct Debit"), "mdi:bank-transfer"),
     }
-    name = models.CharField(verbose_name=_("Name"), max_length=255)
+    name = models.CharField(verbose_name=_("Name"), max_length=255, unique=True)
     email = models.EmailField(verbose_name=_("Email"))
 
     sofort_enabled = models.BooleanField(verbose_name=_("Sofort / Klarna enabled"), default=False)
@@ -57,7 +57,6 @@ class Client(ExtensibleModel):
         verbose_name = _("Client")
         verbose_name_plural = _("Clients")
         constraints = [
-            models.UniqueConstraint(fields=["name", "site"], name="uniq_client_per_site"),
             models.CheckConstraint(
                 check=(
                     (
diff --git a/aleksis/apps/tezor/settings.py b/aleksis/apps/tezor/settings.py
index f3580c25dc797424edfa408c87f75d0b4370830e..9b622c3ecb5ec94395c924119bb5b39457435d50 100644
--- a/aleksis/apps/tezor/settings.py
+++ b/aleksis/apps/tezor/settings.py
@@ -1,6 +1,9 @@
+from aleksis.core.settings import _settings
+
 INSTALLED_APPS = ["payments", "djp_sepa"]
 
+PAYMENT_HOST = _settings.get("payment.host", "localhost:8000")
 PAYMENT_MODEL = "tezor.Invoice"
 PAYMENT_VARIANT_FACTORY = "aleksis.apps.tezor.util.invoice.provider_factory"
 
-overrides = ["PAYMENT_MODEL", "PAYMENT_VARIANT_FACTORY"]
+overrides = ["PAYMENT_HOST", "PAYMENT_MODEL", "PAYMENT_VARIANT_FACTORY"]