diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py
index abe81f2c5a08eedb9f80bbdd7390744f48e2542b..22fa0ec43d0312289bfb453693ce8db915f866c1 100644
--- a/aleksis/core/settings.py
+++ b/aleksis/core/settings.py
@@ -63,11 +63,6 @@ INSTALLED_APPS = [
     "polymorphic",
     "django_global_request",
     "dbbackup",
-    "health_check",
-    "health_check.db",
-    "health_check.cache",
-    "health_check.storage",
-    "health_check.contrib.psutil",
     "settings_context_processor",
     "sass_processor",
     "easyaudit",
@@ -90,6 +85,11 @@ INSTALLED_APPS = [
     "django_otp",
     "otp_yubikey",
     "aleksis.core",
+    "health_check",
+    "health_check.db",
+    "health_check.cache",
+    "health_check.storage",
+    "health_check.contrib.psutil",
     "dynamic_preferences",
     "dynamic_preferences.users.apps.UserPreferencesConfig",
     "impersonate",
diff --git a/aleksis/core/templates/core/pages/system_status.html b/aleksis/core/templates/core/pages/system_status.html
index a62d024cf9ff5875ce61c8305b84834e47393726..f2c3eda35b1a97da6b8b0f5296e571496f719935 100644
--- a/aleksis/core/templates/core/pages/system_status.html
+++ b/aleksis/core/templates/core/pages/system_status.html
@@ -63,6 +63,40 @@
     </div>
   </div>
 
+  <div class="card">
+    <div class="card-content">
+      <span class="card-title"> {% blocktrans %}System health checks{% endblocktrans %}</span>
+
+      <table>
+        <thead>
+          <tr>
+
+            <th colspan="2">{% trans "Service" %}</th>
+            <th>{% trans "Status" %}</th>
+            <th>{% trans "Time taken" %}</th>
+          </tr>
+        </thead>
+        <tbody>
+          {% for plugin in plugins %}
+            <tr>
+              <td>
+                {% if plugin.status %}
+                  <i class="material-icons green-text" aria-hidden="true">check</i>
+                {% else %}
+                  <i class="material-icons red-text" aria-hidden="true">warning</i>
+                {% endif %}
+              </td>
+              <td>{{ plugin.identifier }}</td>
+              <td>
+                {{ plugin.pretty_status }}
+              </td>
+              <td>{{ plugin.time_taken|floatformat:4 }} {% trans "seconds" %}</td>
+            </tr>
+          {% endfor %}
+        </tbody>
+      </table>
+    </div>
+  </div>
 
   {% if tasks %}
     <div class="card">
diff --git a/aleksis/core/urls.py b/aleksis/core/urls.py
index 373d35a8b22998f81be159292ba2ea03f64fabcf..fb9c54d934efb210e43d8a0a78d84941da8f4b4d 100644
--- a/aleksis/core/urls.py
+++ b/aleksis/core/urls.py
@@ -19,7 +19,7 @@ urlpatterns = [
     path("about/", views.about, name="about_aleksis"),
     path("admin/", admin.site.urls),
     path("data_management/", views.data_management, name="data_management"),
-    path("status/", views.system_status, name="system_status"),
+    path("status/", views.SystemStatus.as_view(), name="system_status"),
     path("", include(tf_urls)),
     path("accounts/logout/", auth_views.LogoutView.as_view(), name="logout"),
     path("persons", views.persons, name="persons"),
diff --git a/aleksis/core/views.py b/aleksis/core/views.py
index 92f0bf2fc5d5fd863c9427f4acac9a65081c5b5f..e07450a13c5b6c75687725158ddf4e9097e3c949 100644
--- a/aleksis/core/views.py
+++ b/aleksis/core/views.py
@@ -15,6 +15,7 @@ from guardian.shortcuts import get_objects_for_user
 from haystack.inputs import AutoQuery
 from haystack.query import SearchQuerySet
 from haystack.views import SearchView
+from health_check.views import MainView
 from rules.contrib.views import permission_required
 
 from .filters import GroupFilter
@@ -300,22 +301,28 @@ def data_management(request: HttpRequest) -> HttpResponse:
     return render(request, "core/management/data_management.html", context)
 
 
-@permission_required("core.view_system_status")
-def system_status(request: HttpRequest) -> HttpResponse:
+class SystemStatus(MainView, PermissionRequiredMixin):
     """View giving information about the system status."""
+
+    template_name = "core/pages/system_status.html"
+    permission_required = "core.view_system_status"
     context = {}
 
-    if "django_celery_results" in settings.INSTALLED_APPS:
-        from django_celery_results.models import TaskResult # noqa
-        from celery.task.control import inspect # noqa
-        if inspect().registered_tasks():
-            job_list = list(inspect().registered_tasks().values())[0]
-            results = []
-            for job in job_list:
-                results.append(TaskResult.objects.filter(task_name=job).last())
-            context["tasks"] = results
-
-    return render(request, "core/pages/system_status.html", context)
+    def get(self, request, *args, **kwargs):
+        status_code = 500 if self.errors else 200
+
+        if "django_celery_results" in settings.INSTALLED_APPS:
+            from django_celery_results.models import TaskResult  # noqa
+            from celery.task.control import inspect  # noqa
+
+            if inspect().registered_tasks():
+                job_list = list(inspect().registered_tasks().values())[0]
+                results = []
+                for job in job_list:
+                    results.append(TaskResult.objects.filter(task_name=job).last())
+
+        context = {"plugins": self.plugins, "status_code": status_code}
+        return self.render_to_response(context, status=status_code)
 
 
 @permission_required(