diff --git a/webserver/docker_dokuwiki/templates/sendmail_plenum.py b/webserver/docker_dokuwiki/templates/sendmail_plenum.py
index ed5dc3297ff838e2da2626ae89476c86708d7c59..321ffc47507547d701686d1c91cb80ade52df869 100644
--- a/webserver/docker_dokuwiki/templates/sendmail_plenum.py
+++ b/webserver/docker_dokuwiki/templates/sendmail_plenum.py
@@ -3,8 +3,21 @@ import datetime
 from email.message import EmailMessage
 from email.utils import formatdate
 import requests
+import time
+import os
 
-def do_work():
+def wait_until_unlocked():
+    # Wait for locks to be released
+    # If you don't do this and edit DokuWiki pages, others may overwrite what you do
+    locked = True
+    while locked:
+        locked = os.path.isfile("/srv/dokuwiki/data/data/locks/e0bc4d991c71e981423bfefd6d257985.lock")
+
+        # Avoid busy loop
+        if locked:
+            time.sleep(5)
+
+def get_topics():
     with open("/srv/dokuwiki/data/data/pages/intern/diskussionsthemen.txt") as fp:
         raw = fp.read().split('\n')
 
@@ -13,12 +26,12 @@ def do_work():
         lastline = 0
         for index, line in enumerate(raw):
             # Start marker
-            if "====== 1." in line:
+            if "====== 1." in line and not "1.5" in line:
                 firstline = index + 1
                 continue
             
             # End marker
-            if "====== 2." in line:
+            if "====== 2." in line or "====== 1.5" in line:
                 lastline = index
                 break
         
@@ -27,51 +40,84 @@ def do_work():
         for extracted in raw[firstline:lastline]:
             if extracted != '':
                 topics.append(extracted)
+    return topics
 
-        # There are no topics - just exit
-        if (len(topics) == 0):
-            return True
+def send_mail(topics, date):
+    # mail template 
+    mail = f"""
+Liebe Zonies,
+    
+es gibt wieder Themen die im Plenum besprochen werden sollen. Der nächste
+Reguläre Termin ist am nächsten Dienstag ({str(date)}) um 20:00.
+Im Wiki (https://wiki.warpzone.ms/intern:diskussionsthemen#diskussionsthemen_naechstes_plenum_automatische_einladung)
+stehen folgende Themen:
 
-        # calculate date of next tuesday
-        d = datetime.date.today()
-        while d.strftime('%a') != 'Tue':
-            d += datetime.timedelta(1)
+{chr(10).join(topics)}
 
-        # mail template 
-        mail = f"""
-    Liebe Zonies,
-        
-    es gibt wieder Themen die im Plenum besprochen werden sollen. Der nächste
-    Reguläre Termin ist am nächsten Dienstag ({str(d)}) um 20:00.
-    Im Wiki (https://wiki.warpzone.ms/intern:diskussionsthemen#diskussionsthemen_naechstes_plenum_automatische_einladung)
-    stehen folgende Themen:
+Die Teilnahme ist natürlich auch remote möglich unter
+https://jitsi.dorf-post.de/warpzone-plenum möglich.
 
-    {chr(10).join(topics)}
+Viele Grüße und bis Dienstag,
 
-    Die Teilnahme ist natürlich auch remote möglich unter
-    https://jitsi.dorf-post.de/warpzone-plenum möglich.
+sendmail_plenum.py
+"""
 
-    Viele Grüße und bis Dienstag,
+    msg = EmailMessage()
+    msg['Subject'] = f'Aktuelle Plenumsthemen für Dienstag ({str(date)} 20:00)'
+    msg['From'] = '{{noreply_email_user}}'
+    msg['To'] = 'intern@warpzone.ms'
+    msg['Date'] = formatdate(localtime=True)
+    msg.set_content(mail)
+    
+    server = smtplib.SMTP('{{smtp_host}}', {{smtp_port}})
+    server.starttls()
+    server.login("{{noreply_email_user}}", "{{noreply_email_pass}}")
+    server.send_message(msg)
+    server.quit()
+    return True
 
-    sendmail_plenum.py
-    """
+def update_page(label):
+    with open("/srv/dokuwiki/data/data/pages/intern/diskussionsthemen.txt") as fp:
+        raw = fp.read().split('\n')
+    
+    new_content = []
+    topic_replaced = False
+    for old_line in raw:
+        new_content.append(old_line)
 
-        msg = EmailMessage()
-        msg['Subject'] = f'Aktuelle Plenumsthemen für Dienstag ({str(d)} 20:00)'
-        msg['From'] = '{{noreply_email_user}}'
-        msg['To'] = 'intern@warpzone.ms'
-        msg['Date'] = formatdate(localtime=True)
-        msg.set_content(mail)
-        
-        server = smtplib.SMTP('{{smtp_host}}', {{smtp_port}})
-        server.starttls()
-        server.login("{{noreply_email_user}}", "{{noreply_email_pass}}")
-        server.send_message(msg)
-        server.quit()
-    return True
+        if not topic_replaced and "====== 1." in old_line:
+            new_content.append(f"====== 1.5 {label} ======")
+            topic_replaced = True
+    
+    with open("/srv/dokuwiki/data/data/pages/intern/diskussionsthemen.txt", "w") as fp:
+        fp.write("\n".join(new_content))
 
 success = False
 try:
-    success = do_work()
+    wait_until_unlocked()
+
+    topics = get_topics()
+    
+    if (len(topics) != 0):
+        # calculate date of next tuesday
+        date = datetime.date.today()
+        while date.strftime('%a') != 'Tue':
+            date += datetime.timedelta(1)
+        
+        success = send_mail(topics, date)
+    
+        label = f"Diskussionsthemen für {date}"
+        if success:
+            label += f" (bereits eingeladen)"
+        else:
+            label += f" (Einladung fehlgeschlagen)"
+        success = update_page(label)
+    else:
+        success = True
+
+except:
+    success = False
+    raise
+
 finally:
     requests.get("{{ healthchecks_url }}" if success else "{{ healthchecks_url }}" + "/fail")