diff --git a/district/blocks.py b/district/blocks.py
index 6cba4aca96e9492d28279f8abcc89da1e7d7033c..b3a58725d95b907bb782786cd30c86abd73f0764 100644
--- a/district/blocks.py
+++ b/district/blocks.py
@@ -1,3 +1,4 @@
+from django.forms.utils import ErrorList
 from wagtail.core.blocks import (
     CharBlock,
     IntegerBlock,
@@ -7,6 +8,7 @@ from wagtail.core.blocks import (
     TextBlock,
     URLBlock,
 )
+from wagtail.core.blocks.struct_block import StructBlockValidationError
 from wagtail.images.blocks import ImageChooserBlock
 
 
@@ -81,13 +83,42 @@ class CardLinkBlock(StructBlock):
             "district.DistrictProgramPage",
             "district.DistrictTagsPage",
         ],
+        required=False,
     )
+    link = URLBlock(label="Odkaz", required=False)
 
     class Meta:
         template = "district/blocks/card_link_block.html"
         icon = "link"
         label = "Karta odkazu"
 
+    def clean(self, value):
+        errors = {}
+
+        if value["page"] and value["link"]:
+            errors["page"] = ErrorList(
+                ["Stránka nemůže být vybrána současně s odkazem."]
+            )
+            errors["link"] = ErrorList(
+                ["Odkaz nemůže být vybrán současně se stránkou."]
+            )
+        elif not value["page"] and not value["link"]:
+            errors["page"] = ErrorList(["Zvolte stránku nebo vyplňte odkaz."])
+            errors["link"] = ErrorList(["Vyplňte odkaz nebo zvolte stránku."])
+        if errors:
+            raise StructBlockValidationError(errors)
+        return super().clean(value)
+
+
+class CardLinkWithHeadlineBlock(StructBlock):
+    headline = CharBlock(label="Titulek bloku", required=False)
+    card_items = ListBlock(CardLinkBlock(), label="Karty odkazu")
+
+    class Meta:
+        template = "district/blocks/card_link_with_headline_block.html"
+        icon = "link"
+        label = "Karta odkazu s nadpisem"
+
 
 class CenterContactBlock(StructBlock):
     title = CharBlock(label="Titulek", required=True)
diff --git a/district/migrations/0049_alter_districtcrossroadpage_cards_content.py b/district/migrations/0049_alter_districtcrossroadpage_cards_content.py
new file mode 100644
index 0000000000000000000000000000000000000000..46f267bae8cf4a463867b80efaedced0f04dd62a
--- /dev/null
+++ b/district/migrations/0049_alter_districtcrossroadpage_cards_content.py
@@ -0,0 +1,89 @@
+# Generated by Django 4.0.3 on 2022-04-01 10:21
+
+import wagtail.core.blocks
+import wagtail.core.fields
+import wagtail.images.blocks
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("district", "0048_districthomepage_footperson_coord_title_and_more"),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name="districtcrossroadpage",
+            name="cards_content",
+            field=wagtail.core.fields.StreamField(
+                [
+                    (
+                        "cards",
+                        wagtail.core.blocks.StructBlock(
+                            [
+                                (
+                                    "headline",
+                                    wagtail.core.blocks.CharBlock(
+                                        label="Titulek bloku", required=False
+                                    ),
+                                ),
+                                (
+                                    "card_items",
+                                    wagtail.core.blocks.ListBlock(
+                                        wagtail.core.blocks.StructBlock(
+                                            [
+                                                (
+                                                    "image",
+                                                    wagtail.images.blocks.ImageChooserBlock(
+                                                        label="Obrázek"
+                                                    ),
+                                                ),
+                                                (
+                                                    "title",
+                                                    wagtail.core.blocks.CharBlock(
+                                                        label="Titulek", required=True
+                                                    ),
+                                                ),
+                                                (
+                                                    "page",
+                                                    wagtail.core.blocks.PageChooserBlock(
+                                                        label="Stránka",
+                                                        page_type=[
+                                                            "district.DistrictAfterElectionPage",
+                                                            "district.DistrictArticlePage",
+                                                            "district.DistrictArticlesPage",
+                                                            "district.DistrictCenterPage",
+                                                            "district.DistrictContactPage",
+                                                            "district.DistrictCrossroadPage",
+                                                            "district.DistrictCustomPage",
+                                                            "district.DistrictElectionPage",
+                                                            "district.DistrictElectionPointPage",
+                                                            "district.DistrictPeoplePage",
+                                                            "district.DistrictPersonPage",
+                                                            "district.DistrictProgramPage",
+                                                            "district.DistrictTagsPage",
+                                                        ],
+                                                        required=False,
+                                                    ),
+                                                ),
+                                                (
+                                                    "link",
+                                                    wagtail.core.blocks.URLBlock(
+                                                        label="Odkaz", required=False
+                                                    ),
+                                                ),
+                                            ]
+                                        ),
+                                        label="Karty odkazu",
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                verbose_name="Karty rozcestníku",
+            ),
+        ),
+    ]
diff --git a/district/models.py b/district/models.py
index c3608b79947e3a3f85b73758f2ccf8737cf947e8..ae98eafd04f7aa84193ad1d8d67b3851e7c0aa9e 100644
--- a/district/models.py
+++ b/district/models.py
@@ -881,7 +881,7 @@ class DistrictCrossroadPage(SubpageMixin, MetadataPageMixin, Page):
     ### FIELDS
 
     cards_content = StreamField(
-        [("cards", blocks.CardLinkBlock())],
+        [("cards", blocks.CardLinkWithHeadlineBlock())],
         verbose_name="Karty rozcestníku",
         blank=True,
     )
diff --git a/district/templates/district/blocks/card_link_block.html b/district/templates/district/blocks/card_link_block.html
index 0ae2036a29040263757fa52b39c7db3be73c6d98..1694cd92e1a19dcedbefea002679da5e8615ee31 100644
--- a/district/templates/district/blocks/card_link_block.html
+++ b/district/templates/district/blocks/card_link_block.html
@@ -1,14 +1,15 @@
 {% load wagtailcore_tags wagtailimages_tags %}
 
 {% image self.image width-356 as img %}
+{% firstof self.page.url self.link as target_url %}
 <article class="card card--hoveractive">
-  <a href="{{ self.page.url }}">
+  <a href="{{ target_url }}">
     <img src="{{ img.url }}" alt="{{ self.page.title }}" class="w-full h-48 object-cover">
   </a>
   <div class="card__body p-4">
     <h1 class="card-headline mb-2">
-      <a href="{{ self.page.url }}">
-        {{ self.page.title }}
+      <a href="{{ target_url }}">
+        {{ self.title }}
       </a>
     </h1>
     <p class="card-body-text"></p>
diff --git a/district/templates/district/blocks/card_link_with_headline_block.html b/district/templates/district/blocks/card_link_with_headline_block.html
new file mode 100644
index 0000000000000000000000000000000000000000..7556319d0194807bb37b87fb4ee29cb05247bd9c
--- /dev/null
+++ b/district/templates/district/blocks/card_link_with_headline_block.html
@@ -0,0 +1,14 @@
+{% load wagtailcore_tags %}
+
+<div class="mb-8">
+    {% if self.headline %}
+        <h1 class="head-alt-md md:head-alt-lg max-w-5xl mb-8">{{ self.headline }}</h1>
+    {% endif %}
+    <main>
+        <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
+            {% for card_block in self.card_items %}
+                {% include_block card_block %}
+            {% endfor %}
+        </div>
+    </main>
+</div>
diff --git a/district/templates/district/district_crossroad_page.html b/district/templates/district/district_crossroad_page.html
index 124854669e0de97076f48c73ee06f9740486ef64..8297c165f16e6eeac383ee4e86cd7b5b7930994f 100644
--- a/district/templates/district/district_crossroad_page.html
+++ b/district/templates/district/district_crossroad_page.html
@@ -2,16 +2,14 @@
 {% load wagtailcore_tags %}
 
 {% block content %}
-  <main>
-    <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8  pt-8 lg:py-24">
+  <section class="pt-8 lg:py-24">
       {% for card_block in page.cards_content %}
         {% include_block card_block %}
       {% endfor %}
-    </div>
       {% for block in page.content %}
           <div class="content-block mb-8">
               {% include_block block %}
           </div>
       {% endfor %}
-  </main>
+  </section>
 {% endblock %}
diff --git a/region/blocks.py b/region/blocks.py
index a1320b62e58d679686009915349bba9d906bfd5c..2aa7248289b893ea19857bf35b3fed448469f5e2 100644
--- a/region/blocks.py
+++ b/region/blocks.py
@@ -1,3 +1,4 @@
+from django.forms.utils import ErrorList
 from wagtail.core.blocks import (
     CharBlock,
     IntegerBlock,
@@ -7,6 +8,7 @@ from wagtail.core.blocks import (
     TextBlock,
     URLBlock,
 )
+from wagtail.core.blocks.struct_block import StructBlockValidationError
 from wagtail.images.blocks import ImageChooserBlock
 
 
@@ -81,13 +83,42 @@ class CardLinkBlock(StructBlock):
             "region.RegionProgramPage",
             "region.RegionTagsPage",
         ],
+        required=False,
     )
+    link = URLBlock(label="Odkaz", required=False)
 
     class Meta:
         template = "region/blocks/card_link_block.html"
         icon = "link"
         label = "Karta odkazu"
 
+    def clean(self, value):
+        errors = {}
+
+        if value["page"] and value["link"]:
+            errors["page"] = ErrorList(
+                ["Stránka nemůže být vybrána současně s odkazem."]
+            )
+            errors["link"] = ErrorList(
+                ["Odkaz nemůže být vybrán současně se stránkou."]
+            )
+        elif not value["page"] and not value["link"]:
+            errors["page"] = ErrorList(["Zvolte stránku nebo vyplňte odkaz."])
+            errors["link"] = ErrorList(["Vyplňte odkaz nebo zvolte stránku."])
+        if errors:
+            raise StructBlockValidationError(errors)
+        return super().clean(value)
+
+
+class CardLinkWithHeadlineBlock(StructBlock):
+    headline = CharBlock(label="Titulek bloku", required=False)
+    card_items = ListBlock(CardLinkBlock(), label="Karty odkazu")
+
+    class Meta:
+        template = "region/blocks/card_link_with_headline_block.html"
+        icon = "link"
+        label = "Karta odkazu s nadpisem"
+
 
 class CenterContactBlock(StructBlock):
     title = CharBlock(label="Titulek", required=True)
diff --git a/region/migrations/0024_alter_regioncrossroadpage_cards_content.py b/region/migrations/0024_alter_regioncrossroadpage_cards_content.py
new file mode 100644
index 0000000000000000000000000000000000000000..2b170f734c9622265a0c5a8e002a49bbd3685623
--- /dev/null
+++ b/region/migrations/0024_alter_regioncrossroadpage_cards_content.py
@@ -0,0 +1,89 @@
+# Generated by Django 4.0.3 on 2022-04-01 10:21
+
+import wagtail.core.blocks
+import wagtail.core.fields
+import wagtail.images.blocks
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("region", "0023_regionhomepage_footperson_coord_title_and_more"),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name="regioncrossroadpage",
+            name="cards_content",
+            field=wagtail.core.fields.StreamField(
+                [
+                    (
+                        "cards",
+                        wagtail.core.blocks.StructBlock(
+                            [
+                                (
+                                    "headline",
+                                    wagtail.core.blocks.CharBlock(
+                                        label="Titulek bloku", required=False
+                                    ),
+                                ),
+                                (
+                                    "card_items",
+                                    wagtail.core.blocks.ListBlock(
+                                        wagtail.core.blocks.StructBlock(
+                                            [
+                                                (
+                                                    "image",
+                                                    wagtail.images.blocks.ImageChooserBlock(
+                                                        label="Obrázek"
+                                                    ),
+                                                ),
+                                                (
+                                                    "title",
+                                                    wagtail.core.blocks.CharBlock(
+                                                        label="Titulek", required=True
+                                                    ),
+                                                ),
+                                                (
+                                                    "page",
+                                                    wagtail.core.blocks.PageChooserBlock(
+                                                        label="Stránka",
+                                                        page_type=[
+                                                            "region.RegionAfterElectionPage",
+                                                            "region.RegionArticlePage",
+                                                            "region.RegionArticlesPage",
+                                                            "region.RegionCenterPage",
+                                                            "region.RegionContactPage",
+                                                            "region.RegionCrossroadPage",
+                                                            "region.RegionCustomPage",
+                                                            "region.RegionElectionPage",
+                                                            "region.RegionElectionPointPage",
+                                                            "region.RegionPeoplePage",
+                                                            "region.RegionPersonPage",
+                                                            "region.RegionProgramPage",
+                                                            "region.RegionTagsPage",
+                                                        ],
+                                                        required=False,
+                                                    ),
+                                                ),
+                                                (
+                                                    "link",
+                                                    wagtail.core.blocks.URLBlock(
+                                                        label="Odkaz", required=False
+                                                    ),
+                                                ),
+                                            ]
+                                        ),
+                                        label="Karty odkazu",
+                                    ),
+                                ),
+                            ]
+                        ),
+                    )
+                ],
+                blank=True,
+                verbose_name="Karty rozcestníku",
+            ),
+        ),
+    ]
diff --git a/region/models.py b/region/models.py
index f34467c0360667d4f8621703fcf0c4acde7d4e38..b23ccd0ada5604f5bda07de84874c74900fb2bf8 100644
--- a/region/models.py
+++ b/region/models.py
@@ -874,7 +874,7 @@ class RegionCrossroadPage(SubpageMixin, MetadataPageMixin, Page):
     ### FIELDS
 
     cards_content = StreamField(
-        [("cards", blocks.CardLinkBlock())],
+        [("cards", blocks.CardLinkWithHeadlineBlock())],
         verbose_name="Karty rozcestníku",
         blank=True,
     )
diff --git a/region/templates/region/blocks/card_link_block.html b/region/templates/region/blocks/card_link_block.html
index 0ae2036a29040263757fa52b39c7db3be73c6d98..1694cd92e1a19dcedbefea002679da5e8615ee31 100644
--- a/region/templates/region/blocks/card_link_block.html
+++ b/region/templates/region/blocks/card_link_block.html
@@ -1,14 +1,15 @@
 {% load wagtailcore_tags wagtailimages_tags %}
 
 {% image self.image width-356 as img %}
+{% firstof self.page.url self.link as target_url %}
 <article class="card card--hoveractive">
-  <a href="{{ self.page.url }}">
+  <a href="{{ target_url }}">
     <img src="{{ img.url }}" alt="{{ self.page.title }}" class="w-full h-48 object-cover">
   </a>
   <div class="card__body p-4">
     <h1 class="card-headline mb-2">
-      <a href="{{ self.page.url }}">
-        {{ self.page.title }}
+      <a href="{{ target_url }}">
+        {{ self.title }}
       </a>
     </h1>
     <p class="card-body-text"></p>
diff --git a/region/templates/region/blocks/card_link_with_headline_block.html b/region/templates/region/blocks/card_link_with_headline_block.html
new file mode 100644
index 0000000000000000000000000000000000000000..7556319d0194807bb37b87fb4ee29cb05247bd9c
--- /dev/null
+++ b/region/templates/region/blocks/card_link_with_headline_block.html
@@ -0,0 +1,14 @@
+{% load wagtailcore_tags %}
+
+<div class="mb-8">
+    {% if self.headline %}
+        <h1 class="head-alt-md md:head-alt-lg max-w-5xl mb-8">{{ self.headline }}</h1>
+    {% endif %}
+    <main>
+        <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
+            {% for card_block in self.card_items %}
+                {% include_block card_block %}
+            {% endfor %}
+        </div>
+    </main>
+</div>
diff --git a/region/templates/region/region_crossroad_page.html b/region/templates/region/region_crossroad_page.html
index 23294fb89d428a1f8585c5cbb3d9c3087876690a..04fb46e5a2e63a8e05a5bbd3b56aa5049b5f8cf2 100644
--- a/region/templates/region/region_crossroad_page.html
+++ b/region/templates/region/region_crossroad_page.html
@@ -2,16 +2,14 @@
 {% load wagtailcore_tags %}
 
 {% block content %}
-  <main>
-    <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8  pt-8 lg:py-24">
+  <section class="pt-8 lg:py-24">
       {% for card_block in page.cards_content %}
         {% include_block card_block %}
       {% endfor %}
-    </div>
       {% for block in page.content %}
           <div class="content-block mb-8">
               {% include_block block %}
           </div>
       {% endfor %}
-  </main>
+  </section>
 {% endblock %}