diff --git a/app/controllers/calendar/contentbox.php b/app/controllers/calendar/contentbox.php
index 5d77ed4a21afa3f24f02b89aff1e6a36a6771f2f..cf6e22108e98d5cc7597a081d1c9afcd4429827c 100644
--- a/app/controllers/calendar/contentbox.php
+++ b/app/controllers/calendar/contentbox.php
@@ -78,6 +78,15 @@ class Calendar_ContentboxController extends StudipController
         if ($this->admin) {
             $this->isProfile = $this->single && $this->userRange;
         }
+
+        // Sort dates
+        usort($this->termine, function ($a, $b) {
+            [$a_begin, $a_end] = $this->parseBeginAndEndFromDate($a);
+            [$b_begin, $b_end] = $this->parseBeginAndEndFromDate($b);
+
+            return $a_begin - $b_begin
+                ?: $a_end - $b_end;
+        });
     }
 
     private function parseSeminar($id)
@@ -170,4 +179,23 @@ class Calendar_ContentboxController extends StudipController
             $this->termine[] = $assignment;
         }
     }
+
+    private function parseBeginAndEndFromDate($date): array
+    {
+        if ($date instanceof CalendarDateAssignment) {
+            return [
+                $date->calendar_date->begin,
+                $date->calendar_date->end,
+            ];
+        }
+
+        if ($date instanceof CourseDate || $date instanceof CourseExDate) {
+            return [
+                $date->date,
+                $date->end_time,
+            ];
+        }
+
+        throw new Exception('Invalid date type passed: ' . get_class($date));
+    }
 }