diff --git a/czech_inspirational/migrations/0008_alter_czechinspirationalhomepage_title_suffix.py b/czech_inspirational/migrations/0008_alter_czechinspirationalhomepage_title_suffix.py
new file mode 100644
index 0000000000000000000000000000000000000000..1ae4a5d0d66910400141c1ce91d5fd07492d3ac0
--- /dev/null
+++ b/czech_inspirational/migrations/0008_alter_czechinspirationalhomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('czech_inspirational', '0007_czechinspirationalhomepage_title_suffix'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='czechinspirationalhomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/district/blocks.py b/district/blocks.py
index ffb1bfcf917db1703a830795ae8e17f3a48a5a0e..99f2a13449650df8ed4e518fc52905f67e6636d5 100644
--- a/district/blocks.py
+++ b/district/blocks.py
@@ -157,8 +157,6 @@ class CardLinkBlock(CardLinkBlockMixin):
             "district.DistrictCrossroadPage",
             "district.DistrictCustomPage",
             "district.DistrictPeoplePage",
-            "district.DistrictProgramPage",
-            "district.DistrictInteractiveProgramPage",
             "district.DistrictGeoFeatureCollectionPage",
             "district.DistrictCalendarPage",
             "district.DistrictPdfPage",
@@ -282,12 +280,9 @@ class CardLinkBlock(CardLinkBlockMixin):
             "district.DistrictContactPage",
             "district.DistrictCrossroadPage",
             "district.DistrictCustomPage",
-            "district.DistrictElectionCampaignPage",
-            "district.DistrictElectionProgramPage",
             "district.DistrictPeoplePage",
             "district.DistrictPersonPage",
-            "district.DistrictPostElectionStrategyPage",
-            "district.DistrictProgramPage",
+            "district.DistrictNewProgramPage",
         ],
         required=False,
     )
diff --git a/district/migrations/0037_districtcrossroadpage_districtcustompage.py b/district/migrations/0037_districtcrossroadpage_districtcustompage.py
index 3a8fc0061721b97dba2f93a6e9af448a7dcc026f..eae599c64f0a6c954e8bd5edcc16e2a5302acb9c 100644
--- a/district/migrations/0037_districtcrossroadpage_districtcustompage.py
+++ b/district/migrations/0037_districtcrossroadpage_districtcustompage.py
@@ -100,7 +100,7 @@ class Migration(migrations.Migration):
                                                     "district.DistrictCustomPage",
                                                     # "district.DistrictElectionPage",
                                                     "district.DistrictPeoplePage",
-                                                    "district.DistrictProgramPage",
+                                                    # "district.DistrictProgramPage",
                                                     # "district.DistrictTagsPage",
                                                 ],
                                             ),
diff --git a/district/migrations/0038_auto_20220303_1107.py b/district/migrations/0038_auto_20220303_1107.py
index 41688bf4edc654c2a030709ed5cb865adeeb39f6..f91df1e1872344d18d687fb651aaaae2e85324f9 100644
--- a/district/migrations/0038_auto_20220303_1107.py
+++ b/district/migrations/0038_auto_20220303_1107.py
@@ -66,7 +66,7 @@ class Migration(migrations.Migration):
                                             # "district.DistrictElectionPointPage",
                                             "district.DistrictPeoplePage",
                                             "district.DistrictPersonPage",
-                                            "district.DistrictProgramPage",
+                                            # "district.DistrictProgramPage",
                                             # "district.DistrictTagsPage",
                                         ],
                                     ),
diff --git a/district/migrations/0049_alter_districtcrossroadpage_cards_content.py b/district/migrations/0049_alter_districtcrossroadpage_cards_content.py
index d16ba763aa8b5df86e142506ecc6a7da61ce7d0f..b920e665076587e5ebb4a095270b03c0d9eaf009 100644
--- a/district/migrations/0049_alter_districtcrossroadpage_cards_content.py
+++ b/district/migrations/0049_alter_districtcrossroadpage_cards_content.py
@@ -49,18 +49,18 @@ class Migration(migrations.Migration):
                                                     wagtail.blocks.PageChooserBlock(
                                                         label="Stránka",
                                                         page_type=[
-                                                            "district.DistrictAfterElectionPage",
+                                                            # "district.DistrictAfterElectionPage",
                                                             "district.DistrictArticlePage",
                                                             "district.DistrictArticlesPage",
                                                             "district.DistrictCenterPage",
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionPage",
-                                                            "district.DistrictElectionPointPage",
+                                                            # "district.DistrictElectionPage",
+                                                            # "district.DistrictElectionPointPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictProgramPage",
                                                             # "district.DistrictTagsPage",
                                                         ],
                                                         required=False,
diff --git a/district/migrations/0053_alter_districtcrossroadpage_cards_content.py b/district/migrations/0053_alter_districtcrossroadpage_cards_content.py
index b1abcbf87b155892dca7ece592cca295d5a57571..52471438d2b8da6ddafabde1253f296eba23b699 100644
--- a/district/migrations/0053_alter_districtcrossroadpage_cards_content.py
+++ b/district/migrations/0053_alter_districtcrossroadpage_cards_content.py
@@ -67,7 +67,7 @@ class Migration(migrations.Migration):
                                                             # "district.DistrictElectionPointPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictProgramPage",
                                                             # "district.DistrictTagsPage",
                                                         ],
                                                         required=False,
diff --git a/district/migrations/0068_districtelectioncampaignpage_and_more.py b/district/migrations/0068_districtelectioncampaignpage_and_more.py
index e20c9b3eb5e2c675aebf4768050efd44b70aaada..9eb55286795155380cd95c9722d508fe87b2e1ff 100644
--- a/district/migrations/0068_districtelectioncampaignpage_and_more.py
+++ b/district/migrations/0068_districtelectioncampaignpage_and_more.py
@@ -14965,13 +14965,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                             # "district.DistrictTagsPage",
                                                         ],
                                                         required=False,
diff --git a/district/migrations/0102_alter_districtarticlepage_content_and_more.py b/district/migrations/0102_alter_districtarticlepage_content_and_more.py
index db043e4cf43cdc4818013d37f8ce7ee45d1f9d12..3f7acc82474e800827594b8b71267726fdde4b96 100644
--- a/district/migrations/0102_alter_districtarticlepage_content_and_more.py
+++ b/district/migrations/0102_alter_districtarticlepage_content_and_more.py
@@ -12052,13 +12052,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
diff --git a/district/migrations/0106_alter_districtcrossroadpage_cards_content.py b/district/migrations/0106_alter_districtcrossroadpage_cards_content.py
index 578566b67c690acb1b762c710d9411ab9713c021..00d3bd34ab70b321ec2d1e5cce27e190bb011aa9 100644
--- a/district/migrations/0106_alter_districtcrossroadpage_cards_content.py
+++ b/district/migrations/0106_alter_districtcrossroadpage_cards_content.py
@@ -62,13 +62,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
diff --git a/district/migrations/0211_alter_districtcrossroadpage_cards_content_and_more.py b/district/migrations/0211_alter_districtcrossroadpage_cards_content_and_more.py
index a57d7c4352a7d255846a50cfd4ef9c68cd9d1163..595200ba63603c4c35b0e31e8ee521594c9ca382 100644
--- a/district/migrations/0211_alter_districtcrossroadpage_cards_content_and_more.py
+++ b/district/migrations/0211_alter_districtcrossroadpage_cards_content_and_more.py
@@ -67,10 +67,10 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
-                                                            "district.DistrictProgramPage",
-                                                            "district.DistrictInteractiveProgramPage",
+                                                            # "district.DistrictProgramPage",
+                                                            # "district.DistrictInteractiveProgramPage",
                                                             "district.DistrictGeoFeatureCollectionPage",
                                                             "district.DistrictCalendarPage",
                                                             "district.DistrictPdfPage",
@@ -196,8 +196,8 @@ class Migration(migrations.Migration):
                                                                             "district.DistrictCustomPage",
                                                                             "district.DistrictElectionRootPage",
                                                                             "district.DistrictPeoplePage",
-                                                                            "district.DistrictProgramPage",
-                                                                            "district.DistrictInteractiveProgramPage",
+                                                                            # "district.DistrictProgramPage",
+                                                                            # "district.DistrictInteractiveProgramPage",
                                                                             "district.DistrictGeoFeatureCollectionPage",
                                                                             "district.DistrictCalendarPage",
                                                                             "district.DistrictPdfPage",
@@ -364,13 +364,13 @@ class Migration(migrations.Migration):
                                                                     "district.DistrictContactPage",
                                                                     "district.DistrictCrossroadPage",
                                                                     "district.DistrictCustomPage",
-                                                                    "district.DistrictElectionCampaignPage",
-                                                                    "district.DistrictElectionProgramPage",
-                                                                    "district.DistrictElectionRootPage",
+                                                                    # "district.DistrictElectionCampaignPage",
+                                                                    # "district.DistrictElectionProgramPage",
+                                                                    # "district.DistrictElectionRootPage",
                                                                     "district.DistrictPeoplePage",
                                                                     "district.DistrictPersonPage",
-                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                    "district.DistrictProgramPage",
+                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                    # "district.DistrictProgramPage",
                                                                 ],
                                                                 required=False,
                                                             ),
diff --git a/district/migrations/0212_alter_districtnewprogrampage_program.py b/district/migrations/0212_alter_districtnewprogrampage_program.py
index ca7f3bb8ae5a8fcf30ee9c57ec84a9a4af91808c..6364b4e78582e378882d972b318b6d58784778fc 100644
--- a/district/migrations/0212_alter_districtnewprogrampage_program.py
+++ b/district/migrations/0212_alter_districtnewprogrampage_program.py
@@ -128,13 +128,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -355,13 +355,13 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
-                                                                                    "district.DistrictElectionRootPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionRootPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0213_alter_districtnewprogrampage_program.py b/district/migrations/0213_alter_districtnewprogrampage_program.py
index 4f36ab9c6bb226dbfa978f82dfba51a5b250e152..87ae4971eb88ca35346a15a90de35a6ad52fd0c0 100644
--- a/district/migrations/0213_alter_districtnewprogrampage_program.py
+++ b/district/migrations/0213_alter_districtnewprogrampage_program.py
@@ -128,13 +128,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -373,13 +373,13 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
-                                                                                    "district.DistrictElectionRootPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionRootPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0214_alter_districtnewprogrampage_program.py b/district/migrations/0214_alter_districtnewprogrampage_program.py
index 4e4478d17a7558245da98219be079b0530e2c0bb..59445f0af412342df09f43d7ad383cb5cb7a4b3c 100644
--- a/district/migrations/0214_alter_districtnewprogrampage_program.py
+++ b/district/migrations/0214_alter_districtnewprogrampage_program.py
@@ -128,13 +128,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -383,13 +383,13 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
-                                                                                    "district.DistrictElectionRootPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionRootPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0215_alter_districtelectioncampaignpage_candidates_and_more.py b/district/migrations/0215_alter_districtelectioncampaignpage_candidates_and_more.py
index 02469f7d2114f9550e14fc5d97c4e6d434d68ebf..2ef01d11f57b54755a2bf6ad677fd2b59c373ef8 100644
--- a/district/migrations/0215_alter_districtelectioncampaignpage_candidates_and_more.py
+++ b/district/migrations/0215_alter_districtelectioncampaignpage_candidates_and_more.py
@@ -178,13 +178,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -509,13 +509,13 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
-                                                                                    "district.DistrictElectionRootPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionRootPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0216_alter_districtnewprogrampage_program.py b/district/migrations/0216_alter_districtnewprogrampage_program.py
index 81a76479931edd66f54f6c202392538e6c081227..4d857b462e094b2301b532854d4296c0a6ddaa5f 100644
--- a/district/migrations/0216_alter_districtnewprogrampage_program.py
+++ b/district/migrations/0216_alter_districtnewprogrampage_program.py
@@ -128,13 +128,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -459,13 +459,13 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
-                                                                                    "district.DistrictElectionRootPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionRootPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0218_auto_20240601_1530.py b/district/migrations/0218_auto_20240601_1530.py
index 532b563f787eede86245a640c7b3ac48eb30c08b..ca5a491c8e8f90efb9b9e77bab7e960824f38280 100644
--- a/district/migrations/0218_auto_20240601_1530.py
+++ b/district/migrations/0218_auto_20240601_1530.py
@@ -656,13 +656,13 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
-                                                            "district.DistrictElectionRootPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionRootPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -1002,13 +1002,13 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
-                                                                                    "district.DistrictElectionRootPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionRootPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0219_alter_districtelectioncampaignpage_options_and_more.py b/district/migrations/0219_alter_districtelectioncampaignpage_options_and_more.py
index de2b9c98ede36a4ce5e72effd7e85cdc0447f0e3..439b71920586ef20f39ac884da037f2f922ba3af 100644
--- a/district/migrations/0219_alter_districtelectioncampaignpage_options_and_more.py
+++ b/district/migrations/0219_alter_districtelectioncampaignpage_options_and_more.py
@@ -206,8 +206,8 @@ class Migration(migrations.Migration):
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
                                                             "district.DistrictPeoplePage",
-                                                            "district.DistrictProgramPage",
-                                                            "district.DistrictInteractiveProgramPage",
+                                                            # "district.DistrictProgramPage",
+                                                            # "district.DistrictInteractiveProgramPage",
                                                             "district.DistrictGeoFeatureCollectionPage",
                                                             "district.DistrictCalendarPage",
                                                             "district.DistrictPdfPage",
@@ -354,12 +354,12 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -699,12 +699,12 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
@@ -925,8 +925,8 @@ class Migration(migrations.Migration):
                                                                             "district.DistrictCrossroadPage",
                                                                             "district.DistrictCustomPage",
                                                                             "district.DistrictPeoplePage",
-                                                                            "district.DistrictProgramPage",
-                                                                            "district.DistrictInteractiveProgramPage",
+                                                                            # "district.DistrictProgramPage",
+                                                                            # "district.DistrictInteractiveProgramPage",
                                                                             "district.DistrictGeoFeatureCollectionPage",
                                                                             "district.DistrictCalendarPage",
                                                                             "district.DistrictPdfPage",
diff --git a/district/migrations/0221_alter_districthomepage_content_and_more.py b/district/migrations/0221_alter_districthomepage_content_and_more.py
index 238c365b3b90e1dbf53a0f3bbe39be742a2dd872..ad639bb72ebf170b4562ea13d4fd357435e4973b 100644
--- a/district/migrations/0221_alter_districthomepage_content_and_more.py
+++ b/district/migrations/0221_alter_districthomepage_content_and_more.py
@@ -416,12 +416,12 @@ class Migration(migrations.Migration):
                                                             "district.DistrictContactPage",
                                                             "district.DistrictCrossroadPage",
                                                             "district.DistrictCustomPage",
-                                                            "district.DistrictElectionCampaignPage",
-                                                            "district.DistrictElectionProgramPage",
+                                                            # "district.DistrictElectionCampaignPage",
+                                                            # "district.DistrictElectionProgramPage",
                                                             "district.DistrictPeoplePage",
                                                             "district.DistrictPersonPage",
-                                                            "district.DistrictPostElectionStrategyPage",
-                                                            "district.DistrictProgramPage",
+                                                            # "district.DistrictPostElectionStrategyPage",
+                                                            # "district.DistrictProgramPage",
                                                         ],
                                                         required=False,
                                                     ),
@@ -761,12 +761,12 @@ class Migration(migrations.Migration):
                                                                                     "district.DistrictContactPage",
                                                                                     "district.DistrictCrossroadPage",
                                                                                     "district.DistrictCustomPage",
-                                                                                    "district.DistrictElectionCampaignPage",
-                                                                                    "district.DistrictElectionProgramPage",
+                                                                                    # "district.DistrictElectionCampaignPage",
+                                                                                    # "district.DistrictElectionProgramPage",
                                                                                     "district.DistrictPeoplePage",
                                                                                     "district.DistrictPersonPage",
-                                                                                    "district.DistrictPostElectionStrategyPage",
-                                                                                    "district.DistrictProgramPage",
+                                                                                    # "district.DistrictPostElectionStrategyPage",
+                                                                                    # "district.DistrictProgramPage",
                                                                                 ],
                                                                                 required=False,
                                                                             ),
diff --git a/district/migrations/0225_auto_20240613_1111.py b/district/migrations/0225_auto_20240613_1111.py
new file mode 100644
index 0000000000000000000000000000000000000000..a71ba1afce9da85cef45b411f80f2d97847dc0c7
--- /dev/null
+++ b/district/migrations/0225_auto_20240613_1111.py
@@ -0,0 +1,33 @@
+# Generated by Django 5.0.6 on 2024-06-13 09:11
+
+from django.db import migrations
+
+
+def remove_old_program_pages(apps, schema_editor):
+    DistrictElectionRootPage = apps.get_model("district", "DistrictElectionRootPage")
+    DistrictProgramPage = apps.get_model("district", "DistrictProgramPage")
+    DistrictInteractiveProgramPage = apps.get_model("district", "DistrictInteractiveProgramPage")
+    DistrictElectionCampaignPage = apps.get_model("district", "DistrictElectionCampaignPage")
+    DistrictElectionProgramPage = apps.get_model("district", "DistrictElectionProgramPage")
+    DistrictPostElectionStrategyPage = apps.get_model("district", "DistrictPostElectionStrategyPage")
+
+    for model in (
+        DistrictElectionRootPage,
+        DistrictProgramPage,
+        DistrictInteractiveProgramPage,
+        DistrictElectionCampaignPage,
+        DistrictElectionProgramPage,
+        DistrictPostElectionStrategyPage
+    ):
+        model.objects.filter().delete()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('district', '0224_alter_districtpeoplepage_perex_col_1_and_more'),
+    ]
+
+    operations = [
+        migrations.RunPython(remove_old_program_pages)
+    ]
diff --git a/district/migrations/0226_remove_districtelectionprogrampage_page_ptr_and_more.py b/district/migrations/0226_remove_districtelectionprogrampage_page_ptr_and_more.py
new file mode 100644
index 0000000000000000000000000000000000000000..a92ef2664918e83ea628e27baafd836c56f7388f
--- /dev/null
+++ b/district/migrations/0226_remove_districtelectionprogrampage_page_ptr_and_more.py
@@ -0,0 +1,59 @@
+# Generated by Django 5.0.6 on 2024-06-13 09:29
+
+import wagtail.blocks
+import wagtail.fields
+import wagtail.images.blocks
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('district', '0225_auto_20240613_1111'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='districtelectionprogrampage',
+            name='page_ptr',
+        ),
+        migrations.RemoveField(
+            model_name='districtelectionrootpage',
+            name='page_ptr',
+        ),
+        migrations.RemoveField(
+            model_name='districtinteractiveprogrampage',
+            name='page_ptr',
+        ),
+        migrations.RemoveField(
+            model_name='districtpostelectionstrategypage',
+            name='page_ptr',
+        ),
+        migrations.RemoveField(
+            model_name='districtprogrampage',
+            name='page_ptr',
+        ),
+        migrations.AlterField(
+            model_name='districtnewprogrampage',
+            name='program',
+            field=wagtail.fields.StreamField([('program_group', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('url', wagtail.blocks.URLBlock(label='Odkaz pokrývající celou tuto část', required=False)), ('icon', wagtail.images.blocks.ImageChooserBlock(label='Ikona', required=False)), ('title', wagtail.blocks.CharBlock(label='Titulek článku programu')), ('text', wagtail.blocks.RichTextBlock(features=['h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], label='Obsah'))]), label='Jednotlivé články programu'))])), ('program_group_crossroad', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek')), ('title', wagtail.blocks.CharBlock(label='Titulek', required=True)), ('text', wagtail.blocks.RichTextBlock(label='Krátký text pod nadpisem', required=False)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['district.DistrictArticlePage', 'district.DistrictArticlesPage', 'district.DistrictCenterPage', 'district.DistrictContactPage', 'district.DistrictCrossroadPage', 'district.DistrictCustomPage', 'district.DistrictPeoplePage', 'district.DistrictPersonPage', 'district.DistrictNewProgramPage'], required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))]), label='Karty programu'))])), ('program_group_popout', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('categories', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Název')), ('icon', wagtail.images.blocks.ImageChooserBlock(label='Ikona', required=False)), ('description', wagtail.blocks.RichTextBlock(label='Popis', required=False)), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek vyskakovacího bloku')), ('content', wagtail.blocks.RichTextBlock(features=['h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], label='Obsah')), ('guarantor', wagtail.blocks.PageChooserBlock(label='Garant', page_type=['district.DistrictPersonPage'], required=False))]), label='Jednotlivé bloky programu'))]), label='Kategorie programu'))])), ('program_group_with_candidates', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('preamble_content', wagtail.blocks.RichTextBlock(help_text='Text, který se zobrazí před přepínačem mezi kandidáty a programem.', label='Preambule', required=False)), ('primary_candidates', wagtail.blocks.StructBlock([('candidates', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['district.DistrictPersonPage'])), ('image', wagtail.images.blocks.ImageChooserBlock(help_text='Pokud není vybrán, použije se obrázek ze stránky kandidáta', label='Obrázek', required=False)), ('description', wagtail.blocks.TextBlock(label='Popis'))]), label=' '))], help_text='Zobrazí se ve velkých blocích na začátku stránky.', label='Osoby na čele kandidátky')), ('secondary_candidates', wagtail.blocks.StructBlock([('heading', wagtail.blocks.CharBlock(default='Ostatní kandidátky', label='Nadpis zbytku kandidátky')), ('candidates', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('number', wagtail.blocks.CharBlock(label='Číslo')), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['district.DistrictPersonPage'])), ('image', wagtail.images.blocks.ImageChooserBlock(help_text='Pokud není vybrán, použije se obrázek ze stránky kandidáta', label='Obrázek', required=False))]), label='Zbylí kandidáti na listině'))], help_text='Zobrazí se v kompaktním seznamu pod čelem kandidátky.', label='Ostatní osoby na kandidátce')), ('program', wagtail.blocks.StreamBlock([('program_group', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('url', wagtail.blocks.URLBlock(label='Odkaz pokrývající celou tuto část', required=False)), ('icon', wagtail.images.blocks.ImageChooserBlock(label='Ikona', required=False)), ('title', wagtail.blocks.CharBlock(label='Titulek článku programu')), ('text', wagtail.blocks.RichTextBlock(features=['h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], label='Obsah'))]), label='Jednotlivé články programu'))])), ('program_group_crossroad', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('image', wagtail.images.blocks.ImageChooserBlock(label='Obrázek')), ('title', wagtail.blocks.CharBlock(label='Titulek', required=True)), ('text', wagtail.blocks.RichTextBlock(label='Krátký text pod nadpisem', required=False)), ('page', wagtail.blocks.PageChooserBlock(label='Stránka', page_type=['district.DistrictArticlePage', 'district.DistrictArticlesPage', 'district.DistrictCenterPage', 'district.DistrictContactPage', 'district.DistrictCrossroadPage', 'district.DistrictCustomPage', 'district.DistrictPeoplePage', 'district.DistrictPersonPage', 'district.DistrictNewProgramPage'], required=False)), ('link', wagtail.blocks.URLBlock(label='Odkaz', required=False))]), label='Karty programu'))])), ('program_group_popout', wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(help_text="Např. 'Krajské volby 2024', 'Evropské volby 2024', ...", label='Název programu')), ('categories', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Název')), ('icon', wagtail.images.blocks.ImageChooserBlock(label='Ikona', required=False)), ('description', wagtail.blocks.RichTextBlock(label='Popis', required=False)), ('point_list', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('title', wagtail.blocks.CharBlock(label='Titulek vyskakovacího bloku')), ('content', wagtail.blocks.RichTextBlock(features=['h3', 'h4', 'h5', 'bold', 'italic', 'ol', 'ul', 'hr', 'link', 'document-link', 'image', 'superscript', 'subscript', 'strikethrough', 'blockquote', 'embed'], label='Obsah')), ('guarantor', wagtail.blocks.PageChooserBlock(label='Garant', page_type=['district.DistrictPersonPage'], required=False))]), label='Jednotlivé bloky programu'))]), label='Kategorie programu'))])), ('carousel_program', wagtail.blocks.StructBlock([('label', wagtail.blocks.CharBlock(default='Program', help_text="Např. 'Program'", label='Nadpis')), ('categories', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('number', wagtail.blocks.IntegerBlock(label='Číslo')), ('name', wagtail.blocks.CharBlock(label='Název')), ('points', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('content', wagtail.blocks.TextBlock(label='Obsah'))]), label='Body'))]), label='Kategorie')), ('long_version_url', wagtail.blocks.URLBlock(help_text='Pro zobrazení odkazu na celou verzi programu musí být obě následující pole vyplněná.', label='Odkaz na celou verzi programu', required=False)), ('long_version_text', wagtail.blocks.CharBlock(label='Nadpis odkazu na celou verzi programu', required=False))], template='styleguide2/includes/molecules/program/program_block.html'))]))]))], blank=True, verbose_name='Programy'),
+        ),
+        migrations.DeleteModel(
+            name='DistrictElectionCampaignPage',
+        ),
+        migrations.DeleteModel(
+            name='DistrictElectionProgramPage',
+        ),
+        migrations.DeleteModel(
+            name='DistrictElectionRootPage',
+        ),
+        migrations.DeleteModel(
+            name='DistrictInteractiveProgramPage',
+        ),
+        migrations.DeleteModel(
+            name='DistrictPostElectionStrategyPage',
+        ),
+        migrations.DeleteModel(
+            name='DistrictProgramPage',
+        ),
+    ]
diff --git a/district/migrations/0227_auto_20240613_1137.py b/district/migrations/0227_auto_20240613_1137.py
new file mode 100644
index 0000000000000000000000000000000000000000..84852bcfc336c01a3589586bcafe31c891771e5f
--- /dev/null
+++ b/district/migrations/0227_auto_20240613_1137.py
@@ -0,0 +1,30 @@
+# Generated by Django 5.0.6 on 2024-06-13 09:37
+
+from django.db import migrations
+
+
+def fix_suffixes(apps, schema_editor):
+    DistrictHomePage = apps.get_model("district", "DistrictHomePage")
+
+    for home_page in DistrictHomePage.objects.all():
+        old_suffix = str(home_page.title_suffix)
+
+        home_page.title_suffix = home_page.title_suffix.replace("piráti", "").replace("Piráti", "").replace("PIRÁTI", "")
+        home_page.title_suffix = home_page.title_suffix.replace("MS", "").replace("KS", "")
+        home_page.title_suffix = home_page.title_suffix.strip()
+
+        if home_page.title_suffix != old_suffix:
+            print(f"Replaced suffix for page {home_page.title}")
+
+        home_page.save()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('district', '0226_remove_districtelectionprogrampage_page_ptr_and_more'),
+    ]
+
+    operations = [
+        migrations.RunPython(fix_suffixes)
+    ]
diff --git a/district/migrations/0228_alter_districthomepage_title_suffix.py b/district/migrations/0228_alter_districthomepage_title_suffix.py
new file mode 100644
index 0000000000000000000000000000000000000000..989fde3a705f849f2dd45d06dd25f1d78bbec906
--- /dev/null
+++ b/district/migrations/0228_alter_districthomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('district', '0227_auto_20240613_1137'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='districthomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/district/models.py b/district/models.py
index ba654fa53d1a5d96b3ff87034d8cc3f321f482d0..40ce46a134eda0ea80e5ea337c45ee6ad91c6440 100644
--- a/district/models.py
+++ b/district/models.py
@@ -1106,28 +1106,4 @@ class LegacyProgramPageMixin(Page):
         return HttpResponseRedirect("/programy/")
 
     class Meta:
-        abstract = True
-
-
-class DistrictElectionRootPage(LegacyProgramPageMixin, Page):
-    pass
-
-
-class DistrictProgramPage(LegacyProgramPageMixin, Page):
-    pass
-
-
-class DistrictInteractiveProgramPage(LegacyProgramPageMixin, Page):
-    pass
-
-
-class DistrictElectionCampaignPage(LegacyProgramPageMixin, Page):
-    pass
-
-
-class DistrictElectionProgramPage(LegacyProgramPageMixin, Page):
-    pass
-
-
-class DistrictPostElectionStrategyPage(LegacyProgramPageMixin, Page):
-    pass
+        abstract = True
\ No newline at end of file
diff --git a/districts/migrations/0003_alter_districtshomepage_title_suffix.py b/districts/migrations/0003_alter_districtshomepage_title_suffix.py
new file mode 100644
index 0000000000000000000000000000000000000000..6d843ffa1c1699b90acf2b2fdb9cc9635fddc2e5
--- /dev/null
+++ b/districts/migrations/0003_alter_districtshomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('districts', '0002_districtshomepage_title_suffix'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='districtshomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/elections/migrations/0038_alter_electionshomepage_title_suffix.py b/elections/migrations/0038_alter_electionshomepage_title_suffix.py
new file mode 100644
index 0000000000000000000000000000000000000000..679ad6f4e35b1ad4cca221a160f5d77b9664ad7b
--- /dev/null
+++ b/elections/migrations/0038_alter_electionshomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('elections', '0037_alter_electionshomepage_content'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='electionshomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/green_deal/migrations/0009_alter_greendealhomepage_title_suffix.py b/green_deal/migrations/0009_alter_greendealhomepage_title_suffix.py
new file mode 100644
index 0000000000000000000000000000000000000000..3af91a5631db9fe04a55341bc1e9fbef2df33432
--- /dev/null
+++ b/green_deal/migrations/0009_alter_greendealhomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('green_deal', '0008_alter_greendealhomepage_content_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='greendealhomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/main/migrations/0096_alter_mainhomepage_title_suffix.py b/main/migrations/0096_alter_mainhomepage_title_suffix.py
new file mode 100644
index 0000000000000000000000000000000000000000..2128b46ef2e0183863209ad90a511a6a6d4b9c0d
--- /dev/null
+++ b/main/migrations/0096_alter_mainhomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('main', '0095_alter_mainpeoplepage_perex_col_1_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='mainhomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/regulace_konopi/migrations/0011_alter_regkonhomepage_title_suffix.py b/regulace_konopi/migrations/0011_alter_regkonhomepage_title_suffix.py
new file mode 100644
index 0000000000000000000000000000000000000000..62a7c50a264cd760e3d4f0306c94c821a71dc3fa
--- /dev/null
+++ b/regulace_konopi/migrations/0011_alter_regkonhomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('regulace_konopi', '0010_alter_regkonhomepage_content_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='regkonhomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/senat_campaign/migrations/0015_alter_senatcampaignhomepage_title_suffix.py b/senat_campaign/migrations/0015_alter_senatcampaignhomepage_title_suffix.py
new file mode 100644
index 0000000000000000000000000000000000000000..70d4081b3418eb6ca41c7203d59d0673264a0dd7
--- /dev/null
+++ b/senat_campaign/migrations/0015_alter_senatcampaignhomepage_title_suffix.py
@@ -0,0 +1,18 @@
+# Generated by Django 5.0.6 on 2024-06-13 10:02
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('senat_campaign', '0014_alter_senatcampaignhomepage_calendar'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='senatcampaignhomepage',
+            name='title_suffix',
+            field=models.CharField(blank=True, help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte 'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. Pokud příponu nevyplníte, použije se název domovské stránky a text 'Piráti', např. 'Kontakt | Piráti Pardubice'.", max_length=100, null=True, verbose_name='Přípona titulku stránky'),
+        ),
+    ]
diff --git a/shared/models/main.py b/shared/models/main.py
index ea0f05b12335ab5cf34b0738ecc8c9d4cf5bdecd..a0aac336daad281c67102968fca2a0f412d2e84e 100644
--- a/shared/models/main.py
+++ b/shared/models/main.py
@@ -68,9 +68,9 @@ class ExtendedMetadataHomePageMixin(models.Model):
         null=True,
         help_text="Umožňuje přidat příponu k základnímu titulku stránky. Pokud "
         "je např. titulek stránky pojmenovaný 'Kontakt' a do přípony vyplníte "
-        "'MS Pardubice | Piráti', výsledný titulek bude "
-        "'Kontakt | MS Pardubice | Piráti'. Pokud příponu nevyplníte, použije "
-        "se název webu.",
+        "'MS Pardubice', výsledný titulek bude 'Kontakt | Piráti MS Pardubice'. "
+        "Pokud příponu nevyplníte, použije se název domovské stránky a text "
+        "'Piráti', např. 'Kontakt | Piráti Pardubice'.",
     )
 
     class Meta:
@@ -89,12 +89,15 @@ class ExtendedMetadataHomePageMixin(models.Model):
         title = super().get_meta_title()
         suffix = self.get_meta_title_suffix()
 
+        if title == self.root_page.title:
+            return f"Domů | Piráti {suffix}"
+
         # Covers scenario when title_suffix is not set and evaluates to super().get_meta_title() value.
         # Rather than having MS Pardubice | MS Pardubice, just use MS Pardubice alone.
         if title != suffix:
-            return f"{super().get_meta_title()} | {self.get_meta_title_suffix()}"
+            return f"{super().get_meta_title()} | Piráti {self.get_meta_title_suffix()}"
 
-        return title
+        return f"Piráti {title}"
 
 
 class ExtendedMetadataPageMixin(models.Model):
@@ -251,7 +254,10 @@ class PageInMenuMixin(Page):
 
         for menu in menu_iterator:
             if menu.block_type == "menu_item":
-                if menu.value["link"].strip() == instance.full_url.strip():
+                if (
+                    instance.full_url is not None and len(instance.full_url) != 0
+                    and menu.value["link"] is not None and len(menu.value["link"]) != 0
+                ) and menu.value["link"].strip() == instance.full_url.strip():
                     return menu.value["title"]
 
                 if menu.value["page"] is None:
@@ -261,7 +267,10 @@ class PageInMenuMixin(Page):
                     return menu.value["title"]
             elif menu.block_type == "menu_parent":
                 for item in menu.value["menu_items"]:
-                    if item.value["link"].strip() == instance.full_url.strip():
+                    if (
+                        instance.full_url is not None and len(instance.full_url) != 0
+                        and item.value["link"] is not None and len(menu.value["link"]) != 0
+                    ) and item.value["link"].strip() == instance.full_url.strip():
                         return item.value["title"]
 
                     if item["page"] is None:
diff --git a/shared/templates/styleguide2/person_page.html b/shared/templates/styleguide2/person_page.html
index 65412f6c4835d17aa83b78fbb4e99b24e49ebd96..08056a9e8bb25564e709036a78e78a23ba5508ab 100644
--- a/shared/templates/styleguide2/person_page.html
+++ b/shared/templates/styleguide2/person_page.html
@@ -33,39 +33,41 @@
           </article>
         </div>
         <div class="grid-right-side mb-8 xl:mb-0">
-          <div>
-            <h3
-              class="
-                hidden font-alt text-[3.5rem] mb-3
-                xl:block
-              "
-            >Kontakty</h3>
-          </div>
+          {% if page.phone or page.email or page.social_links %}
+            <div>
+              <h3
+                class="
+                  hidden font-alt text-[3.5rem] mb-3
+                  xl:block
+                "
+              >Kontakty</h3>
+            </div>
 
-          <div class="flex flex-col gap-2 text-lg mb-12">
-            {% if page.phone %}
-              <a href="tel:{{ page.phone }}" class="font-bold underline">
-                {{ page.phone }}
-              </a>
-            {% endif %}
-
-            {% if page.email %}
-              <a href="{{ page.email }}" class="font-bold underline">
-                {{ page.email }}
-              </a>
-            {% endif %}
-
-            <div class="flex flex-col pt-4 gap-3">
-              {% for social_link in page.social_links %}
-                <div class="flex items-center gap-2">
-                  <i class="{{ social_link.value.icon }}"></i>
-                  <a href="{{ social_link.value.link }}" class="underline">
-                    {{ social_link.value.text }}
-                  </a>
-                </div>
-              {% endfor %}
+            <div class="flex flex-col gap-2 text-lg mb-12">
+              {% if page.phone %}
+                <a href="tel:{{ page.phone }}" class="font-bold underline">
+                  {{ page.phone }}
+                </a>
+              {% endif %}
+
+              {% if page.email %}
+                <a href="{{ page.email }}" class="font-bold underline">
+                  {{ page.email }}
+                </a>
+              {% endif %}
+
+              <div class="flex flex-col pt-4 gap-3">
+                {% for social_link in page.social_links %}
+                  <div class="flex items-center gap-2">
+                    <i class="{{ social_link.value.icon }}"></i>
+                    <a href="{{ social_link.value.link }}" class="underline">
+                      {{ social_link.value.text }}
+                    </a>
+                  </div>
+                {% endfor %}
+              </div>
             </div>
-          </div>
+          {% endif %}
         </div>
       </section>
     </div>