diff --git a/district/blocks.py b/district/blocks.py
index ef39822efd9cd3fa6febff6343d3dfb24a2a96b7..423bf15bc5f18bb660baf03ef8d36641a7acd565 100644
--- a/district/blocks.py
+++ b/district/blocks.py
@@ -137,18 +137,6 @@ class CenterContactBlock(StructBlock):
         label = "Kontakt"
 
 
-class ContactItemBlock(StructBlock):
-    name = CharBlock(label="Role")
-    person = PageChooserBlock(
-        label="Osoba",
-        page_type=["district.DistrictPersonPage"],
-    )
-
-    class Meta:
-        icon = "mail"
-        label = "Kontakt"
-
-
 class HomepageHeaderBlock(StructBlock):
     title = CharBlock(label="Titulek", required=False, help_text="Nap")
     image = ImageChooserBlock()
diff --git a/district/migrations/0083_alter_districtcontactpage_contact_people.py b/district/migrations/0083_alter_districtcontactpage_contact_people.py
new file mode 100644
index 0000000000000000000000000000000000000000..aeb74ce853fbf550d3d8ec86d141e870f792dab9
--- /dev/null
+++ b/district/migrations/0083_alter_districtcontactpage_contact_people.py
@@ -0,0 +1,96 @@
+# Generated by Django 4.0.4 on 2022-06-02 14:33
+
+import wagtail.core.blocks
+import wagtail.core.fields
+from django.db import migrations
+from wagtail.core.blocks import StreamValue
+
+
+def name_to_position(block):
+    block["value"]["position"] = block["value"]["name"]
+    del block["value"]["name"]
+    return block
+
+
+def position_to_name(block):
+    block["value"]["name"] = block["value"]["position"]
+    del block["value"]["position"]
+
+    return block
+
+
+def get_content(page, mapper):
+    stream_data = []
+    mapped = False
+
+    for block in page.contact_people.raw_data:
+        if block["type"] == "item":
+            stream_data.append(mapper(block))
+            mapped = True
+
+        else:
+            stream_data.append(block)
+
+    return stream_data, mapped
+
+
+def migrate(apps, mapper):
+    DistrictContactPage = apps.get_model("district", "DistrictContactPage")
+
+    for page in DistrictContactPage.objects.all():
+        contact_people, mapped = get_content(page, mapper)
+
+        if mapped:
+            page.contact_people = StreamValue(
+                page.contact_people, contact_people, is_lazy=True
+            )
+            page.save()
+
+
+def forwards(apps, schema_editor):
+    migrate(apps, name_to_position)
+
+
+def backwards(apps, schema_editor):
+    migrate(apps, position_to_name)
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("district", "0082_alter_districtcenterpage_sidebar_content_and_more"),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name="districtcontactpage",
+            name="contact_people",
+            field=wagtail.core.fields.StreamField(
+                [
+                    (
+                        "item",
+                        wagtail.core.blocks.StructBlock(
+                            [
+                                (
+                                    "position",
+                                    wagtail.core.blocks.CharBlock(
+                                        label="Název pozice", required=False
+                                    ),
+                                ),
+                                (
+                                    "person",
+                                    wagtail.core.blocks.PageChooserBlock(
+                                        label="Osoba",
+                                        page_type=["district.DistrictPersonPage"],
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                verbose_name="Kontakty",
+            ),
+        ),
+        migrations.RunPython(forwards, backwards),
+    ]
diff --git a/district/models.py b/district/models.py
index 10420258e50e6ea0a964ce11d7b18e10bc0faadd..b5a0ce91e94981045e72d90c7871e731c292e7d5 100644
--- a/district/models.py
+++ b/district/models.py
@@ -450,7 +450,7 @@ class DistrictContactPage(
     ### FIELDS
 
     contact_people = StreamField(
-        [("item", blocks.ContactItemBlock())],
+        [("item", blocks.PersonCustomPositionBlock())],
         verbose_name="Kontakty",
         blank=True,
     )
diff --git a/district/templates/district/district_contact_page.html b/district/templates/district/district_contact_page.html
index 63adf19e40f529219cb72f5eea8ac67e1505e7c0..12a2763454afaa65becd95cb2deb5ee55274423b 100644
--- a/district/templates/district/district_contact_page.html
+++ b/district/templates/district/district_contact_page.html
@@ -17,12 +17,18 @@
 
         {% for item in page.contact_people %}
           <div>
-            <h2 class="head-heavy-sm mb-2 lg:mb-4">
-              {{ item.value.name }}
-            </h2>
+              {% if item.value.position %}
+                  <h2 class="head-heavy-sm mb-2 lg:mb-4">
+                      {{ item.value.position }}
+                  </h2>
+              {% elif item.value.person.job_function %}
+                  <h2 class="head-heavy-sm mb-2 lg:mb-4">
+                      {{ item.value.person.job_function }}
+                  </h2>
+              {% endif %}
             <div class="card elevation-3">
               <div class="card__body">
-                {% include "shared/person_badge_wide_snippet.html" with person_page=item.value.person %}
+                {% include "shared/person_badge_wide_snippet.html" with person_page=item.value.person title=item.value.position %}
               </div>
             </div>
           </div>