diff --git a/main/models.py b/main/models.py
index e8a9e8cd3c1d0780dd66cd691e0f9f7be9682e1b..a02fb785fb493ea6f037e07bf39ae72e74f95ca8 100644
--- a/main/models.py
+++ b/main/models.py
@@ -302,9 +302,12 @@ class MainArticlesPage(
     class Meta:
         verbose_name = "Rozcestník článků"
 
-    def get_article_data_list(self):
-        last_month = timezone.now().today().replace(day=1) - timedelta(days=1)
-        first_day_of_last_month = last_month.replace(day=1)
+    def get_article_data_list(self, month_back):
+        first_day_of_last_month = None
+        last_month = timezone.now().today()
+        for x in range(month_back):
+            last_month = last_month.replace(day=1) - timedelta(days=1)
+            first_day_of_last_month = last_month.replace(day=1)
 
         sorted_article_qs = MainArticlePage.objects.filter(
             date__gt=first_day_of_last_month
@@ -331,9 +334,28 @@ class MainArticlesPage(
 
     def get_context(self, request, *args, **kwargs):
         ctx = super().get_context(request, args, kwargs)
-        ctx["article_data_list"] = self.get_article_data_list()
+        article_list = self.get_article_data_list(1)
+        ctx["article_data_list"] = article_list
+        ctx["show_next_articles"] = MainArticlePage.objects.count() > len(article_list)
         return ctx
 
+    def get_articles_response(self, request):
+        article_list = self.get_article_data_list(int(request.GET.get('months', None)))
+        context = {
+            "article_data_list": article_list
+        }
+        data = {
+            'html': render(request, 'main/blocks/articles_block.html', context).content.decode("utf-8"),
+            'last_article': article_list[-1] == MainArticlePage.objects.all().order_by('-date').last()
+        }
+        return JsonResponse(data=data, safe=False)
+
+    def serve(self, request, *args, **kwargs):
+        if not request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest':
+            return super().serve(request, *args, **kwargs)
+        if 'months' in request.GET:
+            return self.get_articles_response(request)
+
     @staticmethod
     def get_empty_month_data(date_obj):
         return {
diff --git a/main/templates/main/blocks/articles_block.html b/main/templates/main/blocks/articles_block.html
new file mode 100644
index 0000000000000000000000000000000000000000..0946fd767187bffa672df29961311a1cb06cf00b
--- /dev/null
+++ b/main/templates/main/blocks/articles_block.html
@@ -0,0 +1,28 @@
+{% for month_article_data in article_data_list %}
+  <div class="mb-4">
+    <h3 class="head-7xl mb-4 xl:hidden">
+      {{ month_article_data.month_text }}
+    </h3>
+    <div class="flex flex-col justify-between xl:flex-row">
+      <div class="xl:pt-8">
+        {% for article_page in month_article_data.left_column %}
+          {% include 'main/includes/work_article_preview.html' %}
+        {% empty %}
+          <div class="p-7 flex flex-col max-w-xl mb-8" />
+        {% endfor %}
+      </div>
+      <div class="relative border border-violet-400 mx-8 hidden xl:block">
+        <div class="absolute bg-violet-400 p-1 text-white font-bold" style="transform: translateX(-50%); top: -1rem">
+          {{ month_article_data.month_text }}
+        </div>
+      </div>
+      <div class="xl:pt-14">
+        {% for article_page in month_article_data.right_column %}
+          {% include 'main/includes/work_article_preview.html' %}
+        {% empty %}
+          <div class="p-7 flex flex-col max-w-xl mb-8" />
+        {% endfor %}
+      </div>
+    </div>
+  </div>
+{% endfor %}
\ No newline at end of file
diff --git a/main/templates/main/blocks/twitter_block.html b/main/templates/main/blocks/twitter_block.html
index e967635d596b217a0e75bbc3c36cdf9e060267f2..867d5b9b7e3da1c8475fd7825db50392650be312 100644
--- a/main/templates/main/blocks/twitter_block.html
+++ b/main/templates/main/blocks/twitter_block.html
@@ -8,7 +8,7 @@
     {% if show_next_tweet %}
       <div class="text-center">
           <a
-             onclick="showMoreTweets(this)"
+             onclick="showMoreTweets(event, this)"
              href="#"
              data-url="{{ page_url }}?page="
              data-page="2"
@@ -24,7 +24,8 @@
     {% endif %}
 </div>
 <script type="text/javascript">
-    function showMoreTweets(tweet) {
+    function showMoreTweets(event, tweet) {
+        event.preventDefault()
         let btn = tweet;
         let tweetsList = document.getElementById('tweetsList');
 
@@ -39,9 +40,7 @@
                 tweetsList.innerHTML += data.html;
                 if (tweet.getAttribute('data-page') === data.last_page)
                     btn.hide();
-                console.log(tweet.getAttribute('data-page'))
                 let dataPage = parseInt(tweet.getAttribute('data-page')) + 1
-                console.log(dataPage)
                 tweet.setAttribute('data-page', dataPage)
             });
     }
diff --git a/main/templates/main/main_articles_page.html b/main/templates/main/main_articles_page.html
index ddd4955a0e1c2a0995fc75d4afa81db73927dba7..863661a7912957e8d44b8ff500549df7b5d7023f 100644
--- a/main/templates/main/main_articles_page.html
+++ b/main/templates/main/main_articles_page.html
@@ -18,38 +18,49 @@
 
     <div class="grid-container article-section">
       <div class="grid-full mb-8">
-        {% for month_article_data in article_data_list %}
-          <div class="mb-4">
-            <h3 class="head-7xl mb-4 xl:hidden">
-              {{ month_article_data.month_text }}
-            </h3>
-            <div class="flex flex-col justify-between xl:flex-row">
-              <div class="xl:pt-8">
-                {% for article_page in month_article_data.left_column %}
-                  {% include 'main/includes/work_article_preview.html' %}
-                {% empty %}
-                  <div class="p-7 flex flex-col max-w-xl mb-8" />
-                {% endfor %}
-              </div>
-              <div class="relative border border-violet-400 mx-8 hidden xl:block">
-                <div class="absolute bg-violet-400 p-1 text-white font-bold" style="transform: translateX(-50%); top: -1rem">
-                  {{ month_article_data.month_text }}
-                </div>
-              </div>
-              <div class="xl:pt-14">
-                {% for article_page in month_article_data.right_column %}
-                  {% include 'main/includes/work_article_preview.html' %}
-                {% empty %}
-                  <div class="p-7 flex flex-col max-w-xl mb-8" />
-                {% endfor %}
-              </div>
-            </div>
-          </div>
-        {% endfor %}
-        <div class="flex justify-center">
-          {% include 'main/includes/button_animated.html' with btn_text="Zobrazit starší" %}
+        <div id="searchResultWrapper">
+          {% include 'main/blocks/articles_block.html' with article_data_list=article_data_list %}
         </div>
-      </div>
+        {% if show_next_articles %}
+          <div class="text-center">
+            <a
+              onclick="showMoreArticles(event, this)"
+              href="#"
+              data-url="{{ page_url }}?months="
+              data-months="2"
+              class="btn btn__slide__wrap"
+            >
+              <span class="btn text-sm bg-black text-white w-32 lg:text-base">
+                Zobrazit další
+              </span>
+              <span class="btn text-sm bg-white text-black w-32 lg:text-base">
+                Zobrazit další
+              </span>
+            </a>
+          </div>
+          </div>
+
+        {% endif %}
     </div>
   </main>
+
+  <script type="text/javascript">
+    async function showMoreArticles(event, btn) {
+      event.preventDefault()
+
+      const searchResultWrapper = document.getElementById('searchResultWrapper')
+      const url = btn.getAttribute('data-url') + btn.getAttribute('data-months')
+
+      const response = await fetch(url, {
+        method: "GET",
+        headers: {"X-Requested-With": "XMLHttpRequest"},
+      })
+      const data = await response.json()
+
+      if (data.last_article) { btn.hide() }
+
+      searchResultWrapper.innerHTML = data.html
+      btn.setAttribute('data-months', parseInt(btn.getAttribute('data-months')) + 1)
+    }
+  </script>
 {% endblock content %}