diff --git a/calendar_utils/management/commands/update_callendars.py b/calendar_utils/management/commands/update_callendars.py
index 912faaf88948d2607b742c156ecb67bbe2bc3cf8..d1c51b56670280b919d5779555ea884d46eb6acf 100644
--- a/calendar_utils/management/commands/update_callendars.py
+++ b/calendar_utils/management/commands/update_callendars.py
@@ -11,11 +11,15 @@ class Command(BaseCommand):
     def handle(self, *args, **options):
         self.stdout.write("Removing orphaned calendars...")
         for cal in Calendar.objects.filter(
+            districtcalendarpage=None,
             districtcenterpage=None,
             districthomepage=None,
+            districtpersonpage=None,
             elections2021calendarpage=None,
+            mainpersonpage=None,
             senatcampaignhomepage=None,
             uniwebhomepage=None,
+            uniwebcalendarpage=None,
         ):
             try:
                 self.stdout.write(f"- {cal.id} | {cal.url}")
diff --git a/calendar_utils/models.py b/calendar_utils/models.py
index efed763d62d70fc789a55ec336612a87afd0342f..871ac5838a5dabad2694da6d7f7b99c2091adfad 100644
--- a/calendar_utils/models.py
+++ b/calendar_utils/models.py
@@ -1,14 +1,13 @@
 import json
 import logging
-from datetime import date, timedelta
-from pathlib import Path
+from datetime import timedelta
 
 import arrow
 from django.core.serializers.json import DjangoJSONEncoder
 from django.core.validators import URLValidator, ValidationError
 from django.db import models
+from django.utils.timezone import now
 from icalevents import icalevents
-from wagtail.admin.panels import FieldPanel
 
 from .parser import process_event_list
 
@@ -69,8 +68,8 @@ class Calendar(models.Model):
     def update_source(self):
         event_list = icalevents.events(
             url=self.url,
-            start=date.today() - timedelta(days=30),
-            end=date.today() + timedelta(days=60),
+            start=now() - timedelta(days=30),
+            end=now() + timedelta(days=60),
         )
         self.handle_event_list(event_list)
 
@@ -131,7 +130,7 @@ class CalendarMixin(models.Model):
                     self.calendar.url = self.calendar_url
                     self.calendar.save()
             else:
-                self.calendar = Calendar.objects.create(url=self.calendar_url)
+                self.calendar, _ = Calendar.objects.get_or_create(url=self.calendar_url)
 
             try:
                 self.calendar.update_source()
diff --git a/calendar_utils/parser.py b/calendar_utils/parser.py
index d5795aa0908a81d4f39ac78e7ceaf2109c2e043b..7698207bbfdaea29382b105efd733f3070d065ad 100644
--- a/calendar_utils/parser.py
+++ b/calendar_utils/parser.py
@@ -5,6 +5,7 @@ from zoneinfo import ZoneInfo
 import arrow
 import bleach
 from django.conf import settings
+from django.utils.timezone import is_naive
 
 if TYPE_CHECKING:
     from icalevents.icalparser import Event
@@ -49,12 +50,7 @@ def set_event_duration(event: "Event") -> "Event":
 
 def set_event_timezone(event: "Event") -> "Event":
     """Sets default project timezone for event if missing."""
-    if (
-        not event.start.tzinfo
-        or not event.start.tzinfo.utcoffset(event.start)
-        or not event.end.tzinfo
-        or not event.end.tzinfo.utcoffset(event.end)
-    ):
+    if is_naive(event.start) or is_naive(event.end):
         event.start = event.start.replace(tzinfo=ZoneInfo(settings.TIME_ZONE))
         event.end = event.end.replace(tzinfo=ZoneInfo(settings.TIME_ZONE))
     return event
diff --git a/tests/calendar_utils/conftest.py b/tests/calendar_utils/conftest.py
index 1aea614630b9fab206a7f52970cf82a8854075d0..f8241f1b8abb29a2324ca82afa15ac457b8053de 100644
--- a/tests/calendar_utils/conftest.py
+++ b/tests/calendar_utils/conftest.py
@@ -21,6 +21,7 @@ def sample_response():
         event.all_day = event_dict["all_day"]
         event.description = event_dict["description"]
         event.location = event_dict["location"]
+        event.url = event_dict["url"]
         event_list.append(event)
 
     return event_list
diff --git a/tests/calendar_utils/samples/future_events.json b/tests/calendar_utils/samples/future_events.json
index e2197bdf909985065f75294f99e287c08522a613..bf4547be3e9da0809ebe66827ee0d5f7ea46bdac 100644
--- a/tests/calendar_utils/samples/future_events.json
+++ b/tests/calendar_utils/samples/future_events.json
@@ -5,7 +5,8 @@
     "all_day": false,
     "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
     "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-05-19T17:00:00+02:00",
@@ -13,7 +14,8 @@
     "all_day": false,
     "summary": "Proch\u00e1zka s architekty - Vize s\u00eddli\u0161t\u011b \u010e\u00e1blice",
     "description": "Kr\u00e1sn\u00e9 Kobylisy por\u00e1daji tak\u00e9 proch\u00e1zku po s\u00eddlisti D\u00e1blice, na niz architekti a urbanist\u00e9 predstav\u00ed moznou budouci podobu ieho neizaj\u00edmav\u00e8 sich mist. Akci zakonc\u00ed pr\u00e1telsk\u00e9 posezen\u00ed v pivovaru Cobolis. Bud'te u toho!",
-    "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-23T16:00:00+02:00",
@@ -21,7 +23,8 @@
     "all_day": false,
     "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
     "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-05-24T18:00:00+02:00",
@@ -29,7 +32,8 @@
     "all_day": false,
     "summary": "Beseda o budouc\u00ed podob\u011b s\u00eddli\u0161t\u011b \u010e\u00e1blice",
     "description": "Spolek Kr\u00e1sn\u00e9 Kobylisy a M\u00a2 Praha 8 v\u00e1s prostrednictvim radn\u00edho Tom\u00e1Se Hrebika zvou na besedu v Kulturn\u00edm dom\u00e8 L\u00e1dvi.\nCek\u00e1 s\u00eddlist\u00e9 promysleny rozvoj, nebo prom\u00e9na v betonovou dZungli? Jak\u00e9 se tvori pl\u00e1ny na ochranu s\u00eddlist\u00e9 pred nez\u00e1douci\nvystavbou? Pozv\u00e1n\u00ed prijali odborn\u00edci a architekturu a urbanistiku, z\u00e1stupci M\u00e8stsk\u00e9 c\u00e1sti Praha 8 a Magistr\u00e1tu hlavn\u00edho m\u00e8sta Prahy.",
-    "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-27T09:30:00+02:00",
@@ -37,7 +41,8 @@
     "all_day": false,
     "summary": "Anthropoid80 - Rekonstrukce atent\u00e1tu",
     "description": "",
-    "location": "Pam\u00e1tn\u00edk Operace Anthropoid\nV Hole\u0161ovi\u010dk\u00e1ch, 182 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Pam\u00e1tn\u00edk Operace Anthropoid\nV Hole\u0161ovi\u010dk\u00e1ch, 182 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-27T14:00:00+02:00",
@@ -45,7 +50,8 @@
     "all_day": false,
     "summary": "Anthropoid80",
     "description": "",
-    "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-28T11:00:00+02:00",
@@ -53,7 +59,8 @@
     "all_day": false,
     "summary": "Anthropoid80",
     "description": "",
-    "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-06-02T18:00:00+02:00",
@@ -61,7 +68,8 @@
     "all_day": false,
     "summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f",
     "description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec.&nbsp;<br><br>",
-    "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko"
+    "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko",
+    "url": ""
   },
   {
     "start": "2022-06-06T17:00:00+02:00",
@@ -69,7 +77,8 @@
     "all_day": false,
     "summary": "P8 - KDP (Komise pro dopravu)",
     "description": "kontaktn\u00ed osoba: Michal Nov\u00e1k (Michal.Novak@pirati.cz)<br><a href=\"https://www.praha8.cz/Komise-pro-dopravu-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-06-20T16:00:00+02:00",
@@ -77,7 +86,8 @@
     "all_day": false,
     "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
     "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-06-22T14:00:00+02:00",
@@ -85,7 +95,8 @@
     "all_day": false,
     "summary": "Zastupitelstvo M\u010c Praha 8",
     "description": "https://www.praha8.cz/Harmonogram-a-program-zasedani-zastupitelstva.html",
-    "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika"
+    "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-07-07T18:00:00+02:00",
@@ -93,6 +104,7 @@
     "all_day": false,
     "summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f",
     "description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec.&nbsp;<br><br>",
-    "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko"
+    "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko",
+    "url": ""
   }
 ]
diff --git a/tests/calendar_utils/samples/past_events.json b/tests/calendar_utils/samples/past_events.json
index 9e5ca0ebaba17739c9ae0da841f48044764aeaf6..76c8f3ac9a767af5628b2692e64d47cdcc9226e5 100644
--- a/tests/calendar_utils/samples/past_events.json
+++ b/tests/calendar_utils/samples/past_events.json
@@ -5,7 +5,8 @@
     "all_day": false,
     "summary": "P8: Sch\u016fzka MS",
     "description": "V\u00edce informac\u00ed na: \nhttps://forum.pirati.cz/viewtopic.php?p=807442#p807442",
-    "location": "Rezidence ROSA\nSt\u0159elni\u010dn\u00e1 1680/8, 182 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Rezidence ROSA\nSt\u0159elni\u010dn\u00e1 1680/8, 182 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-09T17:00:00+02:00",
@@ -13,7 +14,8 @@
     "all_day": false,
     "summary": "P8 - KDP (Komise pro dopravu)",
     "description": "kontaktn\u00ed osoba: Michal Nov\u00e1k (Michal.Novak@pirati.cz)<br><a href=\"https://www.praha8.cz/Komise-pro-dopravu-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-05-09T00:00:00+02:00",
@@ -21,7 +23,8 @@
     "all_day": true,
     "summary": "Volba 13.\u201320. pozice - MS Praha 8 (1. kolo)",
     "description": "",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-05-06T14:00:00+02:00",
@@ -29,7 +32,8 @@
     "all_day": false,
     "summary": "Pietn\u00ed akt",
     "description": "https://www.facebook.com/csol.cz/posts/4955450444502712.",
-    "location": "Kobylisk\u00e1 st\u0159elnice\nBojasova 13, 182 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Kobylisk\u00e1 st\u0159elnice\nBojasova 13, 182 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-05T18:00:00+02:00",
@@ -37,7 +41,8 @@
     "all_day": false,
     "summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f",
     "description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec.&nbsp;<br><br>",
-    "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko"
+    "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko",
+    "url": ""
   },
   {
     "start": "2022-05-04T16:00:00+02:00",
@@ -45,7 +50,8 @@
     "all_day": false,
     "summary": "P8 - KKV\u010c (Komise pro kulturu a voln\u00fd \u010das)",
     "description": "Sch\u016fze b\u00fdvaj\u00ed: Libe\u0148sk\u00fd z\u00e1mek, m\u00edstnost \u010d. 2, v dob\u011b pandemie online<br><br>kontaktn\u00ed osoba: <a href=\"https://praha8.pirati.cz/lide/martin-stanek/\">Martin Stan\u011bk</a>\u00a0-\u00a0<a href=\"mailto:Martin.Stanek@pirati.cz\">Martin.Stanek@pirati.cz</a>\u00a0- 775058555<br><br><a href=\"https://www.praha8.cz/Komise-pro-kulturu-a-volny-cas-2018-2022.html\">Str\u00e1nka komise na webu m\u011bstsk\u00e9 \u010d\u00e1sti</a><br><br><a href=\"https://forum.pirati.cz/viewtopic.php?f=943&amp;t=46454\">Z\u00e1pisy a jmenn\u00e9 hlasov\u00e1n\u00ed na f\u00f3ru</a>",
-    "location": "Libe\u0148sk\u00fd z\u00e1mek, 180 00 Prague-Prague 8, Czechia"
+    "location": "Libe\u0148sk\u00fd z\u00e1mek, 180 00 Prague-Prague 8, Czechia",
+    "url": ""
   },
   {
     "start": "2022-04-27T14:00:00+02:00",
@@ -53,7 +59,8 @@
     "all_day": false,
     "summary": "Zastupitelstvo M\u010c Praha 8",
     "description": "https://www.praha8.cz/Harmonogram-a-program-zasedani-zastupitelstva.html",
-    "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika"
+    "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-04-25T00:00:00+02:00",
@@ -61,7 +68,8 @@
     "all_day": true,
     "summary": "Volba m\u00edstop\u0159edsed\u016f MS Praha 8 (1. kolo)",
     "description": "",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-04-21T00:00:00+02:00",
@@ -69,7 +77,8 @@
     "all_day": true,
     "summary": "Volba 7.\u201312. pozice - MS Praha 8 (2. kolo)",
     "description": "",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-04-20T19:00:00+02:00",
@@ -77,7 +86,8 @@
     "all_day": false,
     "summary": "P8 - Sch\u016fze ZK",
     "description": "kontaktn\u00ed osoba: Michal Nov\u00e1k michal.novak@pirati.cz (mailto:michal.novak@pirati.cz)",
-    "location": "JITSI"
+    "location": "JITSI",
+    "url": ""
   },
   {
     "start": "2022-04-20T18:00:00+02:00",
@@ -85,7 +95,8 @@
     "all_day": false,
     "summary": "Sch\u016fzka k volb\u00e1m (KS Praha)",
     "description": "",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-04-19T16:00:00+02:00",
@@ -93,7 +104,8 @@
     "all_day": false,
     "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
     "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-04-19T00:00:00+02:00",
@@ -101,7 +113,8 @@
     "all_day": true,
     "summary": "Volba 7.\u201312. pozice - MS Praha 8 (1. kolo)",
     "description": "",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-04-18T16:00:00+02:00",
@@ -109,7 +122,8 @@
     "all_day": false,
     "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
     "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-04-18T00:00:00+02:00",
@@ -117,6 +131,7 @@
     "all_day": true,
     "summary": "Volba p\u0159edsedy MS Praha 8 (1. kolo)",
     "description": "",
-    "location": ""
+    "location": "",
+    "url": ""
   }
 ]
diff --git a/tests/calendar_utils/samples/response.json b/tests/calendar_utils/samples/response.json
index ec375e012c838a691366138aabd651f76540ef13..3a5c4188a6acbd91aa28de2ef7cc86a658ab9ffd 100644
--- a/tests/calendar_utils/samples/response.json
+++ b/tests/calendar_utils/samples/response.json
@@ -5,7 +5,8 @@
     "all_day": false,
     "summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f",
     "description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec.&nbsp;<br><br>",
-    "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko"
+    "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko",
+    "url": ""
   },
   {
     "start": "2022-06-22T14:00:00+02:00",
@@ -13,7 +14,8 @@
     "all_day": false,
     "summary": "Zastupitelstvo M\u010c Praha 8",
     "description": "https://www.praha8.cz/Harmonogram-a-program-zasedani-zastupitelstva.html",
-    "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika"
+    "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-06-20T16:00:00+02:00",
@@ -21,7 +23,8 @@
     "all_day": false,
     "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
     "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-06-06T17:00:00+02:00",
@@ -29,7 +32,8 @@
     "all_day": false,
     "summary": "P8 - KDP (Komise pro dopravu)",
     "description": "kontaktn\u00ed osoba: Michal Nov\u00e1k (Michal.Novak@pirati.cz)<br><a href=\"https://www.praha8.cz/Komise-pro-dopravu-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-06-02T18:00:00+02:00",
@@ -37,7 +41,8 @@
     "all_day": false,
     "summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f",
     "description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec.&nbsp;<br><br>",
-    "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko"
+    "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko",
+    "url": ""
   },
   {
     "start": "2022-05-28T11:00:00+02:00",
@@ -45,7 +50,8 @@
     "all_day": false,
     "summary": "Anthropoid80",
     "description": "",
-    "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-27T14:00:00+02:00",
@@ -53,7 +59,8 @@
     "all_day": false,
     "summary": "Anthropoid80",
     "description": "",
-    "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Thomayerovy sady\nThomayerovy sady, 180 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-27T09:30:00+02:00",
@@ -61,7 +68,8 @@
     "all_day": false,
     "summary": "Anthropoid80 - Rekonstrukce atent\u00e1tu",
     "description": "",
-    "location": "Pam\u00e1tn\u00edk Operace Anthropoid\nV Hole\u0161ovi\u010dk\u00e1ch, 182 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Pam\u00e1tn\u00edk Operace Anthropoid\nV Hole\u0161ovi\u010dk\u00e1ch, 182 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-24T18:00:00+02:00",
@@ -69,7 +77,8 @@
     "all_day": false,
     "summary": "Beseda o budouc\u00ed podob\u011b s\u00eddli\u0161t\u011b \u010e\u00e1blice",
     "description": "Spolek Kr\u00e1sn\u00e9 Kobylisy a M\u00a2 Praha 8 v\u00e1s prostrednictvim radn\u00edho Tom\u00e1Se Hrebika zvou na besedu v Kulturn\u00edm dom\u00e8 L\u00e1dvi.\nCek\u00e1 s\u00eddlist\u00e9 promysleny rozvoj, nebo prom\u00e9na v betonovou dZungli? Jak\u00e9 se tvori pl\u00e1ny na ochranu s\u00eddlist\u00e9 pred nez\u00e1douci\nvystavbou? Pozv\u00e1n\u00ed prijali odborn\u00edci a architekturu a urbanistiku, z\u00e1stupci M\u00e8stsk\u00e9 c\u00e1sti Praha 8 a Magistr\u00e1tu hlavn\u00edho m\u00e8sta Prahy.",
-    "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-23T16:00:00+02:00",
@@ -77,7 +86,8 @@
     "all_day": false,
     "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
     "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-05-19T17:00:00+02:00",
@@ -85,7 +95,8 @@
     "all_day": false,
     "summary": "Proch\u00e1zka s architekty - Vize s\u00eddli\u0161t\u011b \u010e\u00e1blice",
     "description": "Kr\u00e1sn\u00e9 Kobylisy por\u00e1daji tak\u00e9 proch\u00e1zku po s\u00eddlisti D\u00e1blice, na niz architekti a urbanist\u00e9 predstav\u00ed moznou budouci podobu ieho neizaj\u00edmav\u00e8 sich mist. Akci zakonc\u00ed pr\u00e1telsk\u00e9 posezen\u00ed v pivovaru Cobolis. Bud'te u toho!",
-    "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Kulturn\u00ed d\u016fm L\u00e1dv\u00ed\nBure\u0161ova 2, 182 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-16T16:00:00+02:00",
@@ -93,7 +104,8 @@
     "all_day": false,
     "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
     "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-05-09T18:00:00+02:00",
@@ -101,7 +113,8 @@
     "all_day": false,
     "summary": "P8: Sch\u016fzka MS",
     "description": "V\u00edce informac\u00ed na: \nhttps://forum.pirati.cz/viewtopic.php?p=807442#p807442",
-    "location": "Rezidence ROSA\nSt\u0159elni\u010dn\u00e1 1680/8, 182 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Rezidence ROSA\nSt\u0159elni\u010dn\u00e1 1680/8, 182 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-09T17:00:00+02:00",
@@ -109,7 +122,8 @@
     "all_day": false,
     "summary": "P8 - KDP (Komise pro dopravu)",
     "description": "kontaktn\u00ed osoba: Michal Nov\u00e1k (Michal.Novak@pirati.cz)<br><a href=\"https://www.praha8.cz/Komise-pro-dopravu-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-05-09T00:00:00+02:00",
@@ -117,7 +131,8 @@
     "all_day": true,
     "summary": "Volba 13.\u201320. pozice - MS Praha 8 (1. kolo)",
     "description": "",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-05-06T14:00:00+02:00",
@@ -125,7 +140,8 @@
     "all_day": false,
     "summary": "Pietn\u00ed akt",
     "description": "https://www.facebook.com/csol.cz/posts/4955450444502712.",
-    "location": "Kobylisk\u00e1 st\u0159elnice\nBojasova 13, 182 00 Praha, \u010cesk\u00e1 republika"
+    "location": "Kobylisk\u00e1 st\u0159elnice\nBojasova 13, 182 00 Praha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-05-05T18:00:00+02:00",
@@ -133,7 +149,8 @@
     "all_day": false,
     "summary": "Krajsk\u00e1 sch\u016fze pra\u017esk\u00fdch Pir\u00e1t\u016f",
     "description": "Op\u011bt tu m\u00e1me prvn\u00ed \u010dtvrtek v m\u011bs\u00edci a s n\u00edm pravidelnou sch\u016fzi kraje Praha. Dozv\u00edte se zpr\u00e1vy se Sn\u011bmovny, z Magistr\u00e1tu, z m\u011bstsk\u00fdch \u010d\u00e1st\u00ed, p\u0159edstav\u00ed se z\u00e1jemci o \u010dlenstv\u00ed a z\u00e1jemci o spolupr\u00e1ci s n\u00e1mi v\u016fbec.&nbsp;<br><br>",
-    "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko"
+    "location": "Pir\u00e1tsk\u00e9 centrum Praha - PiCe, Na Mor\u00e1ni 360/3, 120 00 Praha-Nov\u00e9 M\u011bsto, \u010cesko",
+    "url": ""
   },
   {
     "start": "2022-05-04T16:00:00+02:00",
@@ -141,7 +158,8 @@
     "all_day": false,
     "summary": "P8 - KKV\u010c (Komise pro kulturu a voln\u00fd \u010das)",
     "description": "Sch\u016fze b\u00fdvaj\u00ed: Libe\u0148sk\u00fd z\u00e1mek, m\u00edstnost \u010d. 2, v dob\u011b pandemie online<br><br>kontaktn\u00ed osoba: <a href=\"https://praha8.pirati.cz/lide/martin-stanek/\">Martin Stan\u011bk</a>\u00a0-\u00a0<a href=\"mailto:Martin.Stanek@pirati.cz\">Martin.Stanek@pirati.cz</a>\u00a0- 775058555<br><br><a href=\"https://www.praha8.cz/Komise-pro-kulturu-a-volny-cas-2018-2022.html\">Str\u00e1nka komise na webu m\u011bstsk\u00e9 \u010d\u00e1sti</a><br><br><a href=\"https://forum.pirati.cz/viewtopic.php?f=943&amp;t=46454\">Z\u00e1pisy a jmenn\u00e9 hlasov\u00e1n\u00ed na f\u00f3ru</a>",
-    "location": "Libe\u0148sk\u00fd z\u00e1mek, 180 00 Prague-Prague 8, Czechia"
+    "location": "Libe\u0148sk\u00fd z\u00e1mek, 180 00 Prague-Prague 8, Czechia",
+    "url": ""
   },
   {
     "start": "2022-04-27T14:00:00+02:00",
@@ -149,7 +167,8 @@
     "all_day": false,
     "summary": "Zastupitelstvo M\u010c Praha 8",
     "description": "https://www.praha8.cz/Harmonogram-a-program-zasedani-zastupitelstva.html",
-    "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika"
+    "location": "U Meteoru 6\nPraha, \u010cesk\u00e1 republika",
+    "url": ""
   },
   {
     "start": "2022-04-25T00:00:00+02:00",
@@ -157,7 +176,8 @@
     "all_day": true,
     "summary": "Volba m\u00edstop\u0159edsed\u016f MS Praha 8 (1. kolo)",
     "description": "",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-04-21T00:00:00+02:00",
@@ -165,7 +185,8 @@
     "all_day": true,
     "summary": "Volba 7.\u201312. pozice - MS Praha 8 (2. kolo)",
     "description": "",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-04-20T19:00:00+02:00",
@@ -173,7 +194,8 @@
     "all_day": false,
     "summary": "P8 - Sch\u016fze ZK",
     "description": "kontaktn\u00ed osoba: Michal Nov\u00e1k michal.novak@pirati.cz (mailto:michal.novak@pirati.cz)",
-    "location": "JITSI"
+    "location": "JITSI",
+    "url": ""
   },
   {
     "start": "2022-04-20T18:00:00+02:00",
@@ -181,7 +203,8 @@
     "all_day": false,
     "summary": "Sch\u016fzka k volb\u00e1m (KS Praha)",
     "description": "",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-04-19T16:00:00+02:00",
@@ -189,7 +212,8 @@
     "all_day": false,
     "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
     "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-04-19T00:00:00+02:00",
@@ -197,7 +221,8 @@
     "all_day": true,
     "summary": "Volba 7.\u201312. pozice - MS Praha 8 (1. kolo)",
     "description": "",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-04-18T16:00:00+02:00",
@@ -205,7 +230,8 @@
     "all_day": false,
     "summary": "P8 - RR (Redak\u010dn\u00ed rada \u010dasopisu Osmi\u010dka)",
     "description": "kontaktn\u00ed osoba: Martin \u0160t\u011brba (<a href=\"mailto:martin.sterba@pirati.cz\">martin.sterba@pirati.cz</a>)<br><a href=\"https://www.praha8.cz/Komise-Redakcni-rada-casopisu-Osmicka-2018-2022.html\">web</a>",
-    "location": ""
+    "location": "",
+    "url": ""
   },
   {
     "start": "2022-04-18T00:00:00+02:00",
@@ -213,6 +239,7 @@
     "all_day": true,
     "summary": "Volba p\u0159edsedy MS Praha 8 (1. kolo)",
     "description": "",
-    "location": ""
+    "location": "",
+    "url": ""
   }
 ]
diff --git a/tests/calendar_utils/test_parser.py b/tests/calendar_utils/test_parser.py
index c34fdbedc6d37ef6b367f89ebb3cb1d05af47ccb..b4f9a0743f86cd39dc8a54ff4ea9aeda500b76b5 100644
--- a/tests/calendar_utils/test_parser.py
+++ b/tests/calendar_utils/test_parser.py
@@ -18,7 +18,7 @@ def test_split_events(sample_response, sample_future_events, sample_past_events)
 
 
 @pytest.mark.freeze_time("2022-05-13")
-def test_split_dist_list(sample_events, sample_future_events, sample_past_events):
+def test_split_dict_list(sample_events, sample_future_events, sample_past_events):
     past_events, future_events = split_event_dict_list(sample_events)
     assert sample_past_events == past_events
     assert sample_future_events == future_events