diff --git a/lib/classes/JsonApi/RouteMap.php b/lib/classes/JsonApi/RouteMap.php
index 579b4e91f3eba024b9dcbbed1a26a9385fb5fdea..8c6037ac99035326c79ba1ddfec2667c49cc88f9 100644
--- a/lib/classes/JsonApi/RouteMap.php
+++ b/lib/classes/JsonApi/RouteMap.php
@@ -325,7 +325,7 @@ class RouteMap
         $group->get('/tree-node/{id}', Routes\Tree\TreeShow::class);
 
         $group->get('/tree-node/{id}/children', Routes\Tree\ChildrenOfTreeNode::class);
-        $group->get('/tree-node/{id}/courseinfo', Routes\Tree\CourseinfoOfTreeNode::class);
+        $group->get('/tree-node/{id}/courseinfo', Routes\Tree\CourseInfoOfTreeNode::class);
         $group->get('/tree-node/{id}/courses', Routes\Tree\CoursesOfTreeNode::class);
         $group->get('/tree-node/course/pathinfo/{classname}/{id}', Routes\Tree\PathinfoOfTreeNodeCourse::class);
         $group->get('/tree-node/course/details/{id}', Routes\Tree\DetailsOfTreeNodeCourse::class);
diff --git a/lib/classes/JsonApi/Routes/Tree/CourseInfoOfTreeNode.php b/lib/classes/JsonApi/Routes/Tree/CourseInfoOfTreeNode.php
index e684c40301b2e26d4a3c9e109129229de257753f..086b25265c510bbd3bffb7b3353628d73e25ab9b 100644
--- a/lib/classes/JsonApi/Routes/Tree/CourseInfoOfTreeNode.php
+++ b/lib/classes/JsonApi/Routes/Tree/CourseInfoOfTreeNode.php
@@ -8,7 +8,7 @@ use Psr\Http\Message\ResponseInterface as Response;
 use JsonApi\Errors\RecordNotFoundException;
 use JsonApi\NonJsonApiController;
 
-class CourseinfoOfTreeNode extends NonJsonApiController
+class CourseInfoOfTreeNode extends NonJsonApiController
 {
     protected $allowedFilteringParameters = ['q', 'semester', 'semclass', 'recursive'];
 
diff --git a/lib/models/RangeTreeNode.php b/lib/models/RangeTreeNode.php
index ebd6cc0df4e7955b0885e545092ef7aa2faa689b..066c021860230d04717558ef695d9be5f96a1755 100644
--- a/lib/models/RangeTreeNode.php
+++ b/lib/models/RangeTreeNode.php
@@ -132,7 +132,8 @@ class RangeTreeNode extends SimpleORMap implements StudipTreeNode
                 'semester' => $semester_id
             ];
         } else {
-            $query .= " JOIN `seminare` s ON (s.`Seminar_id` = i.`seminar_id`)";
+            $query .= " JOIN `seminare` s ON (s.`Seminar_id` = i.`seminar_id`)
+                  WHERE 1";
             $parameters = [];
         }
 
@@ -175,16 +176,18 @@ class RangeTreeNode extends SimpleORMap implements StudipTreeNode
     ): array
     {
         $query = "SELECT DISTINCT s.* FROM `seminar_inst` i";
+        $order_by = [];
 
         if ($semester_id !== 'all') {
             $query .= " JOIN `seminare` s ON (s.`Seminar_id` = i.`seminar_id`)
                   LEFT JOIN `semester_courses` sc ON (i.`seminar_id` = sc.`course_id`)
-                  WHERE sc.`semester_id` = :semester";
-            $parameters = [
-                'semester' => $semester_id
-            ];
+                  LEFT JOIN `semester_data` sd USING (`semester_id`)
+                  WHERE sc.`semester_id` = :semester)";
+            $parameters = ['semester' => $semester_id];
+            $order_by[] = 'sd.`beginn`';
         } else {
-            $query .= " JOIN `seminare` s ON (s.`Seminar_id` = i.`seminar_id`)";
+            $query .= " JOIN `seminare` s ON (s.`Seminar_id` = i.`seminar_id`)
+                  WHERE 1";
             $parameters = [];
         }
 
@@ -226,10 +229,11 @@ class RangeTreeNode extends SimpleORMap implements StudipTreeNode
         }
 
         if (Config::get()->IMPORTANT_SEMNUMBER) {
-            $query .= " ORDER BY s.`start_time`, s.`VeranstaltungsNummer`, s.`Name`";
-        } else {
-            $query .= " ORDER BY s.`start_time`, s.`Name`";
+            $order_by[] = 's.`VeranstaltungsNummer`';
         }
+        $order_by[] = 's.`Name`';
+
+        $query .= " ORDER BY " . implode(', ', $order_by);
 
         return DBManager::get()->fetchAll($query, $parameters, 'Course::buildExisting');
     }
diff --git a/lib/models/StudipStudyArea.php b/lib/models/StudipStudyArea.php
index 4e407b4169016b54991a62615d953a042657c617..8189907001a3693dead7caa190bdca4141a3bf5f 100644
--- a/lib/models/StudipStudyArea.php
+++ b/lib/models/StudipStudyArea.php
@@ -516,7 +516,8 @@ class StudipStudyArea extends SimpleORMap implements StudipTreeNode
                 'semester' => $semester_id
             ];
         } else {
-            $query .= " JOIN `seminare` s ON (s.`Seminar_id` = t.`seminar_id`)";
+            $query .= " JOIN `seminare` s ON (s.`Seminar_id` = t.`seminar_id`)
+                  WHERE 1";
             $parameters = [];
         }
 
@@ -557,16 +558,18 @@ class StudipStudyArea extends SimpleORMap implements StudipTreeNode
     ): array
     {
         $query = "SELECT DISTINCT s.* FROM `seminar_sem_tree` t";
+        $order_by = [];
 
         if ($semester_id !== 'all') {
             $query .= " JOIN `seminare` s ON (s.`Seminar_id` = t.`seminar_id`)
                   LEFT JOIN `semester_courses` sc ON (t.`seminar_id` = sc.`course_id`)
+                  LEFT JOIN `semester_data` sd USING (`semester_id`)
                   WHERE sc.`semester_id` = :semester";
-            $parameters = [
-                'semester' => $semester_id
-            ];
+            $parameters = ['semester' => $semester_id];
+            $order_by = 'sd.`beginn`';
         } else {
-            $query .= " JOIN `seminare` s ON (s.`Seminar_id` = t.`seminar_id`)";
+            $query .= " JOIN `seminare` s ON (s.`Seminar_id` = t.`seminar_id`)
+                  WHERE 1";
             $parameters = [];
         }
 
@@ -606,10 +609,11 @@ class StudipStudyArea extends SimpleORMap implements StudipTreeNode
         }
 
         if (Config::get()->IMPORTANT_SEMNUMBER) {
-            $query .= " ORDER BY s.`start_time`, s.`VeranstaltungsNummer`, s.`Name`";
-        } else {
-            $query .= " ORDER BY s.`start_time`, s.`Name`";
+            $order_by[] = 's.`VeranstaltungsNummer`';
         }
+        $order_by[] = 's.`Name`';
+
+        $query .= " ORDER BY " . implode(', ', $order_by);
 
         return DBManager::get()->fetchAll($query, $parameters, 'Course::buildExisting');
     }