diff --git a/agenda/__init__.py b/agenda/__init__.py
index d004bc3..86c755b 100644
--- a/agenda/__init__.py
+++ b/agenda/__init__.py
@@ -21,6 +21,7 @@ import pytz
 import requests
 import yaml
 from dateutil.easter import easter
+from dateutil.relativedelta import FR, relativedelta
 
 from agenda import thespacedevs
 
@@ -307,44 +308,21 @@ def get_us_holidays(input_date: date) -> list[Event]:
     ]
 
 
-def critical_mass(start_date: date) -> list[Event]:
-    """
-    Return a list of the next 12 dates of the last Friday of the month on or after a given date.
-
-    :param start_date: The date from which to start looking for last Fridays.
-    :type start_date: date
-    :return: List of next 12 last Fridays on or after the start_date.
-    :rtype: List[date]
-    """
+def critical_mass(start_date: date, limit: int = 12) -> list[Event]:
+    """Future dates for Critical Mass."""
     events: list[Event] = []
+    current_date = start_date
 
-    # Set current month and year based on the start_date
-    current_month = start_date.month
-    current_year = start_date.year
-
-    for _ in range(12):
-        # Calculate the last day of the current month
-        if current_month == 12:
-            last_day_of_month = date(current_year + 1, 1, 1) - timedelta(days=1)
-        else:
-            last_day_of_month = date(current_year, current_month + 1, 1) - timedelta(
-                days=1
-            )
-
-        # Find the last Friday of the current month
-        last_friday = last_day_of_month
-        while last_friday.weekday() != 4:  # Monday is 0 and Sunday is 6
-            last_friday -= timedelta(days=1)
+    for _ in range(limit):
+        # Calculate the last Friday of the current month
+        last_friday = current_date + relativedelta(day=31, weekday=FR(-1))
 
         # Include it in the list only if it's on or after the start_date
         if last_friday >= start_date:
             events.append(Event(name="critical_mass", date=last_friday))
 
         # Move to the next month
-        current_month += 1
-        if current_month == 13:
-            current_month = 1
-            current_year += 1
+        current_date += relativedelta(months=1)
 
     return events