diff --git a/ctf.txt b/ctf.txt
new file mode 100644
index 0000000000000000000000000000000000000000..da8c363df7fb19c8187e80c7fb28b91419977ecd
--- /dev/null
+++ b/ctf.txt
@@ -0,0 +1,15 @@
+---
+layout: [eventcal]
+title:  "CTF-Team Treffen"
+eventdate:   <EVENTSTART>
+eventend:   <EVENTEND>
+#https://www.uuidgenerator.net/
+uid: <UUID>
+contact: CTF-Matrix-Chat
+organizer: WuPo
+projects:
+ - ctf
+locations:
+ - ComfyZone
+short: "Alle zwei Wochen trifft sich potentiell das CTF Team. Nur nach absprache, wenn Leute Lust haben."
+---
diff --git a/eventgenutils.py b/eventgenutils.py
index 669ba1a9477b43ad4084504465f6ee53c981c803..81cd214eb8702e797ca237fff5d4ad997f733e2d 100644
--- a/eventgenutils.py
+++ b/eventgenutils.py
@@ -33,6 +33,11 @@ def is_nth_xday_of_month(_date_candidate, _year, _mo, _n, _x):
     return False
 
 
+def is_days_away_from(_date_candidate, _past_date_to_calculate_distance):
+    print(_date_candidate)
+    print(_past_date_to_calculate_distance)
+    return (_date_candidate-_past_date_to_calculate_distance).days
+
 def is_wednesday(_date_candidate):
     wd = _date_candidate.weekday()
     return wd == WED
@@ -109,6 +114,9 @@ def last_saturday_in_march(_date_candidate):
     return _date_candidate == _last_saturday
 
 
+def close_to_christmas_time_or_congress_or_first_of_january(_date_candidate):
+    return is_december(_date_candidate) and _date_candidate.day > 22 or is_january(_date_candidate) and _date_candidate.day == 1
+
 def is_equal_month(_date_candidate):
     if _date_candidate.month % 2 == 1:
         return True
diff --git a/main.py b/main.py
index 9c1e0e17b947c5b5ff1eb18ae1abaf13e9f2e0db..3d8330426bf7db43b176a2a80bd9f6b73d846721 100644
--- a/main.py
+++ b/main.py
@@ -41,14 +41,22 @@ TAG_DES_OFFENEN_HACKSPACES = True
 MOINC3 = True
 # Congress.
 
-MAUS_TUEROEFFNER_TAG = False
+# MAUS TÜRÖFFNER TAG
 # Der Maus Türöffner Tag ist immer am Tag der Deutschen Einheit
+MAUS_TUEROEFFNER_TAG = False
 
-GETTING_SPACE_CLEAN = False
+# GETTING SPACE CLEAN
 # Erster Montag des Monats, außer das ist der 01.01 oder 01.05, dann der zweite Montag dieser Monate
+GETTING_SPACE_CLEAN = False
 
-NOOK_ORGA = True
+# NOOK ORGA
 # Dritter Montag jeden zweiten Monat von januar bis Mai, dann monatlich von Juni bis September
+NOOK_ORGA = True
+
+# CTF
+# Jeden zweiten Dienstag. Am 02.07.2024 war ein CTF, wir rechnen also von dort.
+# Wenn der Termin zwischen den 23.12 und 01.01 (jeweils inklusive fällt) gibt es keinen Termin
+CTF = True
 
 #################################################
 # Year to create events for
@@ -132,9 +140,17 @@ def is_maus_tueroeffner_tag(_date_candidate):
 def is_getting_space_clean(_date_candidate):
     return utils.is_first_monday_of_month_except_january_an_may_if_monday_is_first(_date_candidate)
 
+
 def is_nook_orga(_date_candidate):
     return utils.is_third_monday_of_month_and_uneven_month_before_june_or_before_september(_date_candidate)
 
+
+def is_ctf(_date_candidate):
+    return not utils.close_to_christmas_time_or_congress_or_first_of_january(_date_candidate) and (
+            utils.is_days_away_from(_date_candidate,
+                                    datetime.datetime.strptime("2024-07-02", utils.date_format)) % 14 == 0)
+
+
 def create_open_space(_date):
     utils.create_event("openspace", _date, start_hour=19)
 
@@ -182,9 +198,15 @@ def create_moin_c3(_date):
 def create_getting_space_clean(_date):
     utils.create_event("getting-space-clean", _date, start_hour=18, start_minute=30, end_hour=20, end_minute=00)
 
+
 def create_nook_orga(_date):
     utils.create_event("nook-orga", _date, start_hour=19, start_minute=30, end_hour=21, end_minute=00)
 
+
+def create_ctf(_date):
+    utils.create_event("ctf", _date, start_hour=20, start_minute=00, end_hour=22, end_minute=00)
+
+
 def create_maus_tueroeffner_tag(_date):
     utils.create_event("maus", _date, start_hour=14, end_hour=19, end_minute=00)
 
@@ -244,8 +266,12 @@ while date_to_check <= datetime.datetime.strptime(str(YEAR) + "-12-31", utils.da
         if result:
             create_getting_space_clean(date_to_check)
     if NOOK_ORGA:
-        result= is_nook_orga(date_to_check)
+        result = is_nook_orga(date_to_check)
         if result:
             create_nook_orga(date_to_check)
+    if CTF:
+        result = is_ctf(date_to_check)
+        if result:
+            create_ctf(date_to_check)
 
     date_to_check += datetime.timedelta(days=1)
diff --git a/osm.txt b/osm.txt
index 27a07f13455f7b9d60d05f3b576a502752f00a26..083e46f9139f0749d5fdbbb63e4076f9ed84aa5d 100644
--- a/osm.txt
+++ b/osm.txt
@@ -9,6 +9,6 @@ contact: luebeck@lists.openstreetmap.de
 organizer: OSM Lübeck
 locations:
  - Augenprüfraum
- - Confy Zone
+ - ComfyZone
 short: "Stammtisch von und für OpenStreetMap Begeisterte"
 ---