diff --git a/app/routes/Semester.php b/app/routes/Semester.php
index 13639534137403ebd8cb7000b31d5a14dc754431..52de1e76c6641ee5102498758becbd9b93dfb525 100644
--- a/app/routes/Semester.php
+++ b/app/routes/Semester.php
@@ -42,6 +42,44 @@ class Semester extends \RESTAPI\RouteMap
         return $this->paginated($json, $total);
     }
 
+    /**
+     * Returns the semester week as string for a given string
+     *
+     * @get /semester/:timestamp/week
+     */
+    public function getSemesterWeek(int $timestamp)
+    {
+        $semester = \Semester::findByTimestamp($timestamp);
+        if (!$semester) {
+            return null;
+        }
+        $timestamp = strtotime('today', $timestamp);
+        $week_begin_timestamp = strtotime('monday this week', $semester->vorles_beginn);
+        $end_date = $semester->vorles_ende;
+
+        $i = 0;
+        $result = [
+            'semester_name' => (string)$semester->name,
+            'week_number' => sprintf(_('KW %u'), date('W', $timestamp)),
+            'current_day' => strftime('%x', $timestamp)
+        ];
+        while ($week_begin_timestamp < $end_date) {
+            $next_week_timestamp = strtotime('+1 week', $week_begin_timestamp);
+            if ($week_begin_timestamp <= $timestamp && $timestamp < $next_week_timestamp) {
+                $result['sem_week'] = sprintf(
+                    _('%u. Vorlesungswoche (ab %s)'),
+                    $i + 1,
+                    strftime('%x', $week_begin_timestamp));
+                break;
+            }
+            $i += 1;
+
+            $week_begin_timestamp = $next_week_timestamp;
+        }
+
+        return $result;
+    }
+
     /**
      * Returns a single semester.
      *
diff --git a/app/views/resources/room_planning/booking_plan.php b/app/views/resources/room_planning/booking_plan.php
index 0c2944ada7dc1ac85e1acc002ca257677fc8f298..d314218c0c59121a960239cfb95247dff9e031b6 100644
--- a/app/views/resources/room_planning/booking_plan.php
+++ b/app/views/resources/room_planning/booking_plan.php
@@ -19,13 +19,10 @@
                     <?= htmlReady($resource->name) ?>
                 <? endif ?>
                 <span id="booking-plan-header-semrow">
-                    <strong>
-                        <span id="booking-plan-header-semname"></span>
-                        <span id="booking-plan-header-semweek-part">
-                            <?= _('Vorlesungswoche') ?>
-                            <span id="booking-plan-header-semweek"></span>
-                        </span>
-                    </strong>
+                    <strong><span id="booking-plan-header-semname"></span> </strong>
+                    <span id="booking-plan-header-semweek-part">
+                        <span id="booking-plan-header-semweek"></span>
+                    </span>
                 </span>
             </span>
             <? if ($resource->getProperty('room_administrator')): ?>
diff --git a/app/views/resources/room_planning/semester_plan.php b/app/views/resources/room_planning/semester_plan.php
index 34e8f9d5d91371dc5dc20ac4f82f58fa560e50d0..55d7056a2396a8e624cbfe6a2ee802cfa395e391 100644
--- a/app/views/resources/room_planning/semester_plan.php
+++ b/app/views/resources/room_planning/semester_plan.php
@@ -50,9 +50,10 @@
                     <?= htmlReady($resource->name) ?>
                 <? endif ?>
                 <span id="booking-plan-header-semrow">
-                    <strong>
-                        <?= _('Semester') ?>
-                        <span id="booking-plan-header-semname"><?= htmlReady($semester->name) ?></span>
+                        <strong>
+                            <?= _('Semester') ?>
+                            <span id="booking-plan-header-semname"><?= htmlReady($semester->name) ?></span>
+                        </strong>
                         <span id="booking-plan-header-semspan">
                             <? if (Request::get("semester_timerange") == 'fullsem') : ?>
                                 <?= sprintf('(%1$s - %2$s)', date('d.m.Y',$semester->beginn), date('d.m.Y', $semester->ende)); ?>
@@ -60,7 +61,6 @@
                                 <?= sprintf('(%1$s - %2$s)', date('d.m.Y',$semester->vorles_beginn), date('d.m.Y', $semester->vorles_ende)); ?>
                             <? endif ?>
                         </span>
-                    </strong>
                 </span>
             </div>
             <? if ($resource->getProperty('room_administrator')): ?>
diff --git a/app/views/resources/room_request/planning.php b/app/views/resources/room_request/planning.php
index 9b645a64b6765f52d69c719f0425fba21ac8d19a..20e9efb33a2c81d4f02304bb824c9adb0e00dc0e 100644
--- a/app/views/resources/room_request/planning.php
+++ b/app/views/resources/room_request/planning.php
@@ -32,14 +32,14 @@
                     <strong>
                         <?= _('Semester') ?>
                         <span id="booking-plan-header-semname"><?= htmlReady($semester->name) ?></span>
-                        <span id="booking-plan-header-semspan">
-                            <? if (Request::get("semester_timerange") == 'fullsem') : ?>
-                                <?= sprintf('(%1$s - %2$s)', date('d.m.Y', $semester->beginn), date('d.m.Y', $semester->ende)); ?>
-                            <? else : ?>
-                                <?= sprintf('(%1$s - %2$s)', date('d.m.Y', $semester->vorles_beginn), date('d.m.Y', $semester->vorles_ende)); ?>
-                            <? endif ?>
-                        </span>
                     </strong>
+                    <span id="booking-plan-header-semspan">
+                        <? if (Request::get("semester_timerange") == 'fullsem') : ?>
+                            <?= sprintf('(%1$s - %2$s)', date('d.m.Y', $semester->beginn), date('d.m.Y', $semester->ende)); ?>
+                        <? else : ?>
+                            <?= sprintf('(%1$s - %2$s)', date('d.m.Y', $semester->vorles_beginn), date('d.m.Y', $semester->vorles_ende)); ?>
+                        <? endif ?>
+                    </span>
                 </span>
             </div>
             <? if ($resource->getProperty('room_administrator')): ?>
diff --git a/app/views/room_management/planning/index.php b/app/views/room_management/planning/index.php
index f42f8a0077583c6b5b6faf8174447863ffe43974..c5d7d5fa250261d33713ff7b07a45cd6e294b210 100644
--- a/app/views/room_management/planning/index.php
+++ b/app/views/room_management/planning/index.php
@@ -18,18 +18,14 @@
         <div>
             <?= _('Raumgruppe') ?>
             <span id="booking-plan-header-roomgroup"><?= htmlReady($clipboard->name) ?></span>
-            <strong>
-                <?= _('KW') ?>
-                <span id="booking-plan-header-calweek"></span>
-                (<span id="booking-plan-header-calbegin"></span>)
-                <span id="booking-plan-header-semrow">
-                    <span id="booking-plan-header-semname"></span>
-                    <span id="booking-plan-header-semweek-part">
-                        <?= _('Vorlesungswoche') ?>
-                        <span id="booking-plan-header-semweek"></span>
-                    </span>
+            <span id="booking-plan-header-calweek"></span>
+            <span id="booking-plan-header-calbegin"></span>
+            <span id="booking-plan-header-semrow">
+                <strong><span id="booking-plan-header-semname"></span></strong>
+                <span id="booking-plan-header-semweek-part">
+                    <span id="booking-plan-header-semweek"></span>
                 </span>
-            </strong>
+            </span>
         </div>
     </section>
 
diff --git a/app/views/room_management/planning/semester_plan.php b/app/views/room_management/planning/semester_plan.php
index 85d69248dee9501929316f54fb9385c16b0a9099..f5b9c94eb74570ad499b1cc1208d3b1e6fe0f4d6 100644
--- a/app/views/room_management/planning/semester_plan.php
+++ b/app/views/room_management/planning/semester_plan.php
@@ -24,14 +24,14 @@
                 <strong>
                     <?= _('Semester')?>
                     <span id="booking-plan-header-semname"><?= htmlReady($semester->name) ?></span>
-                    <span id="booking-plan-header-semspan">
-                        <? if (Request::get("semester_timerange") == 'fullsem') : ?>
-                            <?= sprintf('(%1$s - %2$s)', date('d.m.Y',$semester->beginn), date('d.m.Y', $semester->ende)); ?>
-                        <? else : ?>
-                            <?= sprintf('(%1$s - %2$s)', date('d.m.Y',$semester->vorles_beginn), date('d.m.Y', $semester->vorles_ende)); ?>
-                        <? endif ?>
-                    </span>
                 </strong>
+                <span id="booking-plan-header-semspan">
+                    <? if (Request::get("semester_timerange") == 'fullsem') : ?>
+                        <?= sprintf('(%1$s - %2$s)', date('d.m.Y',$semester->beginn), date('d.m.Y', $semester->ende)); ?>
+                    <? else : ?>
+                        <?= sprintf('(%1$s - %2$s)', date('d.m.Y',$semester->vorles_beginn), date('d.m.Y', $semester->vorles_ende)); ?>
+                    <? endif ?>
+                </span>
             </span>
         </div>
     </section>
diff --git a/db/migrations/5.2.16_activate_semester_routes.php b/db/migrations/5.2.16_activate_semester_routes.php
new file mode 100644
index 0000000000000000000000000000000000000000..082a5db829a7d73f7d7b706b27bb78b12d8f8f22
--- /dev/null
+++ b/db/migrations/5.2.16_activate_semester_routes.php
@@ -0,0 +1,14 @@
+<?php
+class ActivateSemesterRoutes extends Migration
+{
+    public function description()
+    {
+        return "Activates all semester routes";
+    }
+
+    public function up()
+    {
+        require_once 'app/routes/Semester.php';
+        RESTAPI\ConsumerPermissions::get()->activateRouteMap(new RESTAPI\Routes\Semester());
+    }
+}
diff --git a/resources/assets/javascripts/lib/fullcalendar.js b/resources/assets/javascripts/lib/fullcalendar.js
index 2268305a3d84747e98a5d5b97606121dbe7083a6..1a1945a0ecd31d249f7fad7045ee61c4b11f2be9 100644
--- a/resources/assets/javascripts/lib/fullcalendar.js
+++ b/resources/assets/javascripts/lib/fullcalendar.js
@@ -535,37 +535,31 @@ class Fullcalendar
                 }
             },
             datesRender (info) {
-                var activeRange = info.view.props.dateProfile.activeRange;
-                var start = activeRange.start;
-                var end = activeRange.end;
-
+                let activeRange = info.view.props.dateProfile.activeRange;
+                let timestamp = activeRange.start.getTime() / 1000;
                 if ($(info.el).hasClass('institute-plan')) {
                     $('.fc-slats tr:odd .fc-widget-content:not(.fc-axis)').remove();
                 }
 
-                if ($('.booking-plan-header').length) {
-                    end.setDate(end.getDate());
-                    let semester = $('.booking-plan-header').data('semester');
-                    let sem_start = null;
-                    let sem_end = null;
-                    if (semester) {
-                        sem_start = semester.seminars_begin;
-                        sem_end = semester.seminars_end;
-                    }
+                STUDIP.api.GET(`semester/${timestamp}/week`).done((data) => {
 
-                    if (sem_start && (start.getTime() / 1000 < sem_start || start.getTime() / 1000 > sem_end)) {
-                        sem_start = null;
-                        sem_end = null;
-                    } else if (sem_start) {
-                        STUDIP.Resources.updateBookingPlanDateInfos(activeRange.start, activeRange.end, semester);
-                    }
-                    $('#booking-plan-header-calweek').text(start.getWeekNumber());
-                    $('#booking-plan-header-calbegin').text(start.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + start.toLocaleDateString('de-DE'));
-                    $('#booking-plan-header-calend').text(end.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + end.toLocaleDateString('de-DE'));
-                    if (!sem_start || !sem_end) {
-                        STUDIP.Resources.updateBookingPlanSemesterByView(activeRange);
+                    if (data) {
+                        $('#booking-plan-header-semname').text(data.semester_name);
+                        if (data.sem_week) {
+                            $('#booking-plan-header-semweek').text(data.sem_week);
+                            $('#booking-plan-header-semweek-part').show();
+                        } else {
+                            $('#booking-plan-header-semweek').text('');
+                            $('#booking-plan-header-semweek-part').hide();
+                        }
+                        $('#booking-plan-header-semrow').show();
+                        $('#booking-plan-header-calweek').text(data.week_number);
+                        $('#booking-plan-header-calbegin').text('(' + data.current_day + ')');
+                    } else {
+                        $('#booking-plan-header-semrow').hide();
+                        $('#booking-plan-header-semweek-part').hide();
                     }
-                }
+            })
             },
             resourceRender (renderInfo) {
                 if ($(renderInfo.view.context.calendar.el).hasClass('room-group-booking-plan')) {
diff --git a/resources/assets/javascripts/lib/resources.js b/resources/assets/javascripts/lib/resources.js
index a3192fcb223433b53c3d16620aa447d079121963..57965cea906283a3ddac59ea67d5d817e625f6d3 100644
--- a/resources/assets/javascripts/lib/resources.js
+++ b/resources/assets/javascripts/lib/resources.js
@@ -705,76 +705,6 @@ class Resources
         STUDIP.Resources.updateEventUrlsInCalendar(info.event);
     }
 
-
-    static updateBookingPlanSemesterByView(activeRange, api_url = 'api.php/semesters') {
-        let semester = null;
-        jQuery.ajax(
-            STUDIP.URLHelper.getURL(api_url),
-            {
-                method: 'get',
-                dataType: 'json',
-                success: function (data) {
-                    if (data) {
-                        Object.values(data.collection).forEach(item => {
-                            if (activeRange.start.getTime() / 1000 >= item.begin && activeRange.start.getTime() / 1000 < item.end) {
-                                semester = item;
-                            }
-                        });
-                        if (!semester) {
-                            if (data.pagination && data.pagination.links && data.pagination.links.next != api_url) {
-                                semester = STUDIP.Resources.updateBookingPlanSemesterByView(activeRange, data.pagination.links.next);
-                            }
-                        }
-                    }
-                    STUDIP.Resources.updateBookingPlanDateInfos(activeRange.start, activeRange.end, semester);
-                }
-            }
-        );
-    }
-
-    static updateBookingPlanDateInfos(plan_begin, plan_end, semester = null)
-    {
-        if (semester) {
-            let show_lecture_week = false;
-            let fake_plan_end = new Date(plan_end.getTime() - 1000);
-            if (plan_begin.getUTCDay() == fake_plan_end.getUTCDay()) {
-                show_lecture_week = (plan_begin.getTime() / 1000 + 43200) >= semester.seminars_begin && (plan_begin.getTime() / 1000) < semester.seminars_end;
-            } else {
-                show_lecture_week = (plan_end.getTime() / 1000 + 43200) >= semester.seminars_begin && (plan_end.getTime() / 1000) < semester.seminars_end;
-            }
-            $(".booking-plan-header").data('semester', semester);
-            $("#booking-plan-header-semname").text(semester.title);
-            if (show_lecture_week) {
-                let lecture_week_start = new Date((semester.seminars_begin  + 43200) * 1000);
-                let lecture_week_start_day = lecture_week_start.getDay();
-                if (lecture_week_start_day == 0) {
-                    //Sunday is 7, not 0!
-                    lecture_week_start_day = 7;
-                }
-                lecture_week_start_day--;
-                let normal_sem_week_begin = semester.seminars_begin - (lecture_week_start_day * 86400);
-                let sem_week = Math.floor((plan_end.getTime() / 1000 - 10800 - normal_sem_week_begin) / 604800) + 1;
-                if (sem_week > 0) {
-                    $("#booking-plan-header-semweek").text(sem_week);
-                    $("#booking-plan-header-semweek-part").show();
-                } else {
-                    $("#booking-plan-header-semweek-part").hide();
-                }
-            } else {
-                $("#booking-plan-header-semweek-part").hide();
-            }
-            $("#booking-plan-header-semrow").show();
-        } else {
-            $(".booking-plan-header").data('semester', null);
-            $('#booking-plan-header-semrow').hide();
-        }
-
-        $('#booking-plan-header-calweek').text(plan_begin.getWeekNumber());
-        $('#booking-plan-header-calbegin').text(plan_begin.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + plan_begin.toLocaleDateString('de-DE'));
-        $('#booking-plan-header-calend').text(plan_end.toLocaleDateString('de-DE', {weekday: 'short'}) + ' ' + plan_end.toLocaleDateString('de-DE'));
-    }
-
-
     static toggleRequestMarked(source_node)
     {
         if (!source_node) {
diff --git a/resources/assets/stylesheets/less/resources-print.less b/resources/assets/stylesheets/less/resources-print.less
index 889f1d4ab011c73ebb3f8c1253dca4ef8ed25a17..a2c8d1f79f68be2338384e4dfe67f7344c2a392f 100644
--- a/resources/assets/stylesheets/less/resources-print.less
+++ b/resources/assets/stylesheets/less/resources-print.less
@@ -1,5 +1,5 @@
 @media print {
-    #booking-plan-header-semrow-line #booking-plan-header-semweek-part,
+    #booking-plan-header-semweek-part,
     #booking-plan-header-resource-name-line,
     #booking-plan-header-seats-line,
     #booking-plan-header-administration_url-line {