diff --git a/district/migrations/0096_districtelectioncampaignpage_show_program_points_inline_and_more.py b/district/migrations/0096_districtelectioncampaignpage_show_program_points_inline_and_more.py
new file mode 100644
index 0000000000000000000000000000000000000000..8f3bdf38b1f686ce6b4fa85b651247bb968bdb70
--- /dev/null
+++ b/district/migrations/0096_districtelectioncampaignpage_show_program_points_inline_and_more.py
@@ -0,0 +1,25 @@
+# Generated by Django 4.0.7 on 2022-08-11 16:38
+
+from django.db import migrations, models
+import wagtail.blocks
+import wagtail.fields
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('district', '0095_alter_districtpersonpage_options_and_more'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='districtelectioncampaignpage',
+            name='show_program_points_inline',
+            field=models.BooleanField(default=False, help_text='Hodí se v případě spousty krátkých bodů programu, z nichž si většina nezaslouží vlastní stránku.', verbose_name='Zobrazit obsah celého programu na jedné stránce'),
+        ),
+        migrations.AlterField(
+            model_name='districtinteractiveprogrampage',
+            name='content',
+            field=wagtail.fields.StreamField([('interactive_program_block', wagtail.blocks.StructBlock([('name', wagtail.blocks.CharBlock(label='Název části programu', required=True)), ('heading', wagtail.blocks.CharBlock(label='Nadpis', required=True)), ('description', wagtail.blocks.RichTextBlock(blank=True, label='Krátký popis, BEZ BODŮ', required=False)), ('icon', wagtail.blocks.ChoiceBlock(choices=[('verejne-sluzby', 'Veřejné služby'), ('zdravotni-pece', 'Zdravotní péče'), ('sport', 'Sport'), ('sport-plavec', 'Sport - plavec'), ('socialni-politika', 'Sociální politika'), ('aktivni-verejnost', 'Aktivní veřejnost'), ('priroda', 'Příroda'), ('vzdelavani', 'Vzdělávání'), ('kultura', 'Kultura'), ('otevrena-radnice', 'Otevřená radnice'), ('cestovni-ruch', 'Cestovní ruch'), ('doprava', 'Doprava'), ('bydleni', 'Bydlení')], label='Ikona')), ('program_items', wagtail.blocks.ListBlock(wagtail.blocks.StructBlock([('content', wagtail.blocks.RichTextBlock(label='Obsah', required=True))]), label='Seznam bodů', required=True))]))], use_json_field=None, verbose_name='Části programu'),
+        ),
+    ]
diff --git a/district/migrations/0097_alter_districtelectioncampaignpage_show_program_points_inline.py b/district/migrations/0097_alter_districtelectioncampaignpage_show_program_points_inline.py
new file mode 100644
index 0000000000000000000000000000000000000000..972978cd045635b7e459948ec1e4c73ff3cfaee3
--- /dev/null
+++ b/district/migrations/0097_alter_districtelectioncampaignpage_show_program_points_inline.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.0.7 on 2022-08-11 16:40
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('district', '0096_districtelectioncampaignpage_show_program_points_inline_and_more'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='districtelectioncampaignpage',
+            name='show_program_points_inline',
+            field=models.BooleanField(default=False, help_text='Hodí se v případě spousty krátkých bodů programu, z nichž si většina nezaslouží vlastní stránku.', verbose_name='Zobrazit obsah programu na jedné stránce'),
+        ),
+    ]
diff --git a/district/models.py b/district/models.py
index b3530f5903119b760c34d8971b009c40d7a13491..d5278c881419c043c1138849daecdd5ae2417a50 100644
--- a/district/models.py
+++ b/district/models.py
@@ -917,6 +917,11 @@ class DistrictElectionCampaignPage(DistrictElectionBasePage):
         max_length=128,
         help_text="Např. Program pro magistrát.",
     )
+    show_program_points_inline = models.BooleanField(
+        "Zobrazit obsah programu na jedné stránce",
+        default=False,
+        help_text="Hodí se v případě spousty krátkých bodů programu, z nichž si většina nezaslouží vlastní stránku."
+    )
     hero_headline = models.CharField(
         "Banner headline",
         max_length=128,
@@ -976,6 +981,7 @@ class DistrictElectionCampaignPage(DistrictElectionBasePage):
                 FieldPanel("number"),
                 FieldPanel("candidate_list_title"),
                 FieldPanel("program_point_list_title"),
+                FieldPanel("show_program_points_inline"),
                 FieldPanel("content"),
             ],
             "Personalizace",
diff --git a/district/templates/district/district_election_campaign_page.html b/district/templates/district/district_election_campaign_page.html
index c0c3d0dca1c7f8231f2b7f6b76ed128b21c18f09..ebd363c3f8904a379602c6d7d30eac4aca88d497 100644
--- a/district/templates/district/district_election_campaign_page.html
+++ b/district/templates/district/district_election_campaign_page.html
@@ -106,28 +106,50 @@
 
           {% if page.program_points %}
             <template v-if="isCurrentView('program')">
-              <h1 class="head-alt-md text-center py-8 lg:pt-24 lg:pb-8">{{ page.program_point_list_title|default:"Volební program" }}</h1>
-
-              <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
+              <h1
+                class="head-alt-md text-center py-8 lg:pt-24 {% if not page.show_program_points_inline %}lg:pb-8{% else %}pb-0{% endif %}"
+              >{{ page.program_point_list_title|default:"Volební program" }}</h1>
+              {% if page.show_program_points_inline %}
                 {% for program_point in page.program_points %}
-                  <div class="card card--hoveractive">
-                    <a href="{% pageurl program_point %}">
-                      {% image program_point.image width-357 as list_image %}
-                      <img src="{{ list_image.url }}" alt="{{ program_point.title }}" class="w-full h-48 object-cover">
-                    </a>
-                    <div class="card__body p-4">
-                      <h1 class="card-headline mb-2">
-                        <a href="{% pageurl program_point %}">
-                          {{ program_point.title }}
-                        </a>
-                      </h1>
-                      <p class="card-body-text">
-                        {{ program_point.perex }}
-                      </p>
-                    </div>
-                  </div>
+                  <h2 class="head-alt-md mb-2 mt-8">
+                    {{ program_point.title }}
+                  </h2>
+                  <p class="font-bold text-lg leading-normal mb-3">
+                    {{ program_point.perex }}
+                  </p>
+                  <p class="mb-8 text-grey-300">
+                    Garant:
+                    <a
+                      href="{{ program_point.guarantor.url }}"
+                    >{{ program_point.guarantor }}</a>
+                  </p>
+
+                  {% for block in program_point.content %}
+                    {% include_block block %}
+                  {% endfor %}
                 {% endfor %}
-              </div>
+              {% else %}
+                <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
+                  {% for program_point in page.program_points %}
+                    <div class="card card--hoveractive">
+                      <a href="{% pageurl program_point %}">
+                        {% image program_point.image width-357 as list_image %}
+                        <img src="{{ list_image.url }}" alt="{{ program_point.title }}" class="w-full h-48 object-cover">
+                      </a>
+                      <div class="card__body p-4">
+                        <h1 class="card-headline mb-2">
+                          <a href="{% pageurl program_point %}">
+                            {{ program_point.title }}
+                          </a>
+                        </h1>
+                        <p class="card-body-text">
+                          {{ program_point.perex }}
+                        </p>
+                      </div>
+                    </div>
+                  {% endfor %}
+                </div>
+              {% endif %}
             </template>
           {% endif %}
         </section>
diff --git a/shared/templates/shared/article_preview.html b/shared/templates/shared/article_preview.html
index b6a1b7c3ae0e5a2f4846965cde6ee0bb149e54f2..f577fed130a45802ab3b4e66515c230a30af7ff2 100644
--- a/shared/templates/shared/article_preview.html
+++ b/shared/templates/shared/article_preview.html
@@ -43,7 +43,7 @@
         </div>
       </div>
 
-      <div class="article-card-meta"  class="c-metadata-block-section__item" >
+      <div class="article-card-meta c-metadata-block-section__item">
         <span itemprop="description" class="article-card-meta__item">
           {{ article.date|date:"SHORT_DATE_FORMAT" }}
           <meta itemprop="datePublished" content="{{ article.last_published_at }}" />