diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 4fed9bc57cdf05f45aa7ba8faac411e9995fe4ff..c4910d94b5b1e282a9bb6b1ede5c930df33d3c6c 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -9,6 +9,11 @@ and this project adheres to `Semantic Versioning`_.
 Unreleased
 ----------
 
+Fixed
+~~~~~
+
+* Remove lessons replaced by events from "My timetable"
+
 `3.0.1`_ - 2023-07-20
 ---------------------
 
diff --git a/aleksis/apps/chronos/util/build.py b/aleksis/apps/chronos/util/build.py
index a6c89a347ffdf2cc10e01b705fcad746eb7535e2..f79ecf6484dbaa18f22447ad9a0a0c57160add96 100644
--- a/aleksis/apps/chronos/util/build.py
+++ b/aleksis/apps/chronos/util/build.py
@@ -34,7 +34,7 @@ def build_timetable(
         type_ = obj.timetable_type
 
     is_week = False
-    if type(date_ref) == CalendarWeek:
+    if isinstance(date_ref, CalendarWeek):
         is_week = True
 
     if type_ is None:
@@ -361,17 +361,22 @@ def build_timetable(
                     continue
 
                 events_for_this_period = events_per_period.get(period, [])
+                events_for_replacement_for_this_period = events_for_replacement_per_period.get(
+                    period, []
+                )
                 lesson_periods_for_this_period = lesson_periods_per_period.get(period, [])
 
                 # Add lesson periods
                 if lesson_periods_for_this_period:
-                    if events_for_this_period:
+                    if events_for_replacement_for_this_period:
                         # If there is a event in this period,
                         # we have to check whether the actual lesson is taking place.
 
                         lesson_periods_to_keep = []
                         for lesson_period in lesson_periods_for_this_period:
-                            if not lesson_period.is_replaced_by_event(events_for_this_period):
+                            if not lesson_period.is_replaced_by_event(
+                                events_for_replacement_for_this_period
+                            ):
                                 lesson_periods_to_keep.append(lesson_period)
                         col += lesson_periods_to_keep
                     else:
diff --git a/aleksis/apps/chronos/views.py b/aleksis/apps/chronos/views.py
index fdb6def85b24e1f166ff7ee1139e04b0e4bfe9a5..a7ae9b77b322c00f41860c39a3f6cc7ae6376687 100644
--- a/aleksis/apps/chronos/views.py
+++ b/aleksis/apps/chronos/views.py
@@ -139,7 +139,7 @@ def timetable(
 
     el = get_el_by_pk(request, type_, pk, prefetch=True)
 
-    if type(el) == HttpResponseNotFound:
+    if isinstance(el, HttpResponseNotFound):
         return HttpResponseNotFound()
 
     type_ = TimetableType.from_string(type_)
diff --git a/tox.ini b/tox.ini
index 6e4b77ab1ded935257117696975c2150772cd85c..85c2494a5a2f5480bb05d48781edfaa74803eeab 100644
--- a/tox.ini
+++ b/tox.ini
@@ -4,7 +4,7 @@ skip_missing_interpreters = true
 envlist = py39,py310,py311
 
 [testenv]
-whitelist_externals = poetry
+allowlist_externals = poetry
 skip_install = true
 envdir = {toxworkdir}/globalenv
 commands_pre =
@@ -68,18 +68,6 @@ known_django = django
 skip = migrations
 sections = FUTURE,STDLIB,DJANGO,THIRDPARTY,FIRSTPARTY,LOCALFOLDER
 
-[mypy]
-plugins = mypy_django_plugin.main
-python_version = 3.8
-platform = linux
-show_column_numbers = True
-follow_imports = skip
-ignore_missing_imports = True
-cache_dir = /dev/null
-
-[mypy.plugins.django-stubs]
-django_settings_module = aleksis.core.settings
-
 [pytest]
 DJANGO_SETTINGS_MODULE = aleksis.core.settings
 junit_family = legacy