diff --git a/app/controllers/course/courseware.php b/app/controllers/course/courseware.php
index f0b873a2014de76e10250d6da5a1f885802dd04b..8ecff0a9e3089a003ddf66881e2e6a910b2ad92a 100644
--- a/app/controllers/course/courseware.php
+++ b/app/controllers/course/courseware.php
@@ -46,6 +46,11 @@ class Course_CoursewareController extends CoursewareController
 
     public function index_action(): void
     {
+        $this->isTeacher = $GLOBALS['perm']->have_studip_perm(
+            'tutor',
+            Context::getId(),
+            $GLOBALS['user']->id
+        );
         Navigation::activateItem('course/courseware/shelf');
         $this->setIndexSidebar();
     }
@@ -88,12 +93,11 @@ class Course_CoursewareController extends CoursewareController
 
     public function tasks_action($route = null): void
     {
-        $this->is_teacher = $GLOBALS['perm']->have_studip_perm(
+        $this->isTeacher = $GLOBALS['perm']->have_studip_perm(
             'tutor',
             Context::getId(),
             $GLOBALS['user']->id
         );
-
         Navigation::activateItem('course/courseware/tasks');
         PageLayout::setTitle(_('Courseware: Aufgaben'));
         $this->setTasksSidebar();
@@ -101,8 +105,6 @@ class Course_CoursewareController extends CoursewareController
 
     public function activities_action(): void
     {
-        global $perm, $user;
-        $this->is_teacher = $perm->have_studip_perm('tutor', Context::getId(), $user->id);
         Navigation::activateItem('course/courseware/activities');
         $this->setActivitiesSidebar();
     }
diff --git a/app/views/course/courseware/index.php b/app/views/course/courseware/index.php
index eea40635c425b26ded94d3d63c1a93cf3488a3fc..0152c372855b9bf74cbadb67fb7af9607bb6d326 100644
--- a/app/views/course/courseware/index.php
+++ b/app/views/course/courseware/index.php
@@ -4,4 +4,5 @@
     entry-id="<?= Context::getId() ?>"
     licenses='<?= $licenses ?>'
     feedback-settings='<?= htmlReady($feedback_settings) ?>'
+    is-teacher='<?= var_export($isTeacher) ?>'
 ></div>
diff --git a/app/views/course/courseware/tasks.php b/app/views/course/courseware/tasks.php
index 7ebd70a41664706978f9885df34df463a1cd2087..9f0e8542b302e61f7ad1b381f01440ef4f1edff5 100644
--- a/app/views/course/courseware/tasks.php
+++ b/app/views/course/courseware/tasks.php
@@ -2,5 +2,6 @@
     id="courseware-tasks-app"
     entry-type="courses"
     entry-id="<?= htmlReady(Context::getId()) ?>"
+    is-teacher='<?= var_export($isTeacher) ?>'
 >
 </div>
diff --git a/lib/classes/JsonApi/Schemas/Courseware/Instance.php b/lib/classes/JsonApi/Schemas/Courseware/Instance.php
index 114467a61b48143703d4d99009eda4db089f6ed0..a30fbae007c4ccce02b4aaafca7ccf97f49a6c0c 100644
--- a/lib/classes/JsonApi/Schemas/Courseware/Instance.php
+++ b/lib/classes/JsonApi/Schemas/Courseware/Instance.php
@@ -45,7 +45,8 @@ class Instance extends SchemaProvider
             'certificate-settings' => $resource->getCertificateSettings(),
             'reminder-settings' => $resource->getReminderSettings(),
             'reset-progress-settings' => $resource->getResetProgressSettings(),
-            'root-id' => $resource->getRoot()->id
+            'root-id' => $resource->getRoot()->id,
+            'is-teacher' => $GLOBALS['perm']->have_studip_perm($resource->getEditingPermissionLevel(), $resource->getRoot()->range_id)
         ];
     }
 
diff --git a/resources/vue/components/courseware/ActivitiesApp.vue b/resources/vue/components/courseware/ActivitiesApp.vue
index cfbce77b433257ddab75e5d7e3ff027022f16a10..10c605655afe20d877d8e40c7bebd494bbd67437 100644
--- a/resources/vue/components/courseware/ActivitiesApp.vue
+++ b/resources/vue/components/courseware/ActivitiesApp.vue
@@ -21,11 +21,6 @@ export default {
         CoursewareActivities,
         CoursewareActivitiesWidgetFilterType,
         CoursewareActivitiesWidgetFilterUnit
-    },
-    computed: {
-        ...mapGetters({
-            userIsTeacher: 'userIsTeacher',
-        }),
-    },
+    }
 }
 </script>
\ No newline at end of file
diff --git a/resources/vue/courseware-activities-app.js b/resources/vue/courseware-activities-app.js
index ee2eb849de248dc3e20851e1a6eaca4b964a85a6..3122238c5a47c70bd86d26257cf5c97e41733196 100644
--- a/resources/vue/courseware-activities-app.js
+++ b/resources/vue/courseware-activities-app.js
@@ -77,7 +77,6 @@ const mountApp = async (STUDIP, createApp, element) => {
         id: entry_id,
         type: entry_type,
     });
-    await store.dispatch('loadTeacherStatus', STUDIP.USER_ID);
     await store.dispatch('loadCourseUnits', entry_id);
 
     const app = createApp({
diff --git a/resources/vue/courseware-index-app.js b/resources/vue/courseware-index-app.js
index 59c0ebca22535a3af35e73c175bf8e8c9178785a..6be42295dba114cd725c230491e5e4f8575a09f4 100644
--- a/resources/vue/courseware-index-app.js
+++ b/resources/vue/courseware-index-app.js
@@ -154,7 +154,6 @@ const mountApp = async (STUDIP, createApp, element) => {
     });
 
     if (entry_type === 'courses') {
-        await store.dispatch('loadTeacherStatus', STUDIP.USER_ID);
         store.dispatch('loadProgresses');
         await store.dispatch('setFeedbackSettings', feedbackSettings);
     }
diff --git a/resources/vue/courseware-shelf-app.js b/resources/vue/courseware-shelf-app.js
index a0e7f98c65f7cc68a70ed2d5977d332f651568ca..82ece71b0e462938f42741a6665f9cf521d405e3 100644
--- a/resources/vue/courseware-shelf-app.js
+++ b/resources/vue/courseware-shelf-app.js
@@ -31,6 +31,7 @@ const mountApp = async (STUDIP, createApp, element) => {
     let entry_type = null;
     let licenses = null;
     let feedbackSettings = null;
+    let isTeacher = false;
 
     if ((elem = document.getElementById(element.substring(1))) !== undefined) {
         if (elem.attributes !== undefined) {
@@ -48,6 +49,9 @@ const mountApp = async (STUDIP, createApp, element) => {
             if (elem.attributes['feedback-settings'] !== undefined) {
                 feedbackSettings = JSON.parse(elem.attributes['feedback-settings'].value);
             }
+            if (elem.attributes['is-teacher'] !== undefined) {
+                isTeacher = JSON.parse(elem.attributes['is-teacher'].value);
+            }
         }
     }
 
@@ -96,7 +100,7 @@ const mountApp = async (STUDIP, createApp, element) => {
         type: entry_type,
     });
     if (entry_type === 'courses') {
-        await store.dispatch('loadTeacherStatus', STUDIP.USER_ID);
+        store.dispatch('setUserIsTeacher', isTeacher);
         await store.dispatch('loadCourseUnits', entry_id);
         await store.dispatch('setFeedbackSettings', feedbackSettings);
     } else {
diff --git a/resources/vue/courseware-tasks-app.js b/resources/vue/courseware-tasks-app.js
index 9c01b7190f22bad0b06bdf078bf1b5a6aefcc83a..fc7bf655f3bc5a71807e31ccd5bab3168ca4f26c 100644
--- a/resources/vue/courseware-tasks-app.js
+++ b/resources/vue/courseware-tasks-app.js
@@ -92,6 +92,7 @@ const mountApp = async (STUDIP, createApp, element) => {
     });
     let entry_id = null;
     let entry_type = null;
+    let isTeacher = false;
     let elem;
 
     if ((elem = document.getElementById(element.substring(1))) !== undefined) {
@@ -103,17 +104,21 @@ const mountApp = async (STUDIP, createApp, element) => {
             if (elem.attributes['entry-id'] !== undefined) {
                 entry_id = elem.attributes['entry-id'].value;
             }
+
+            if (elem.attributes['is-teacher'] !== undefined) {
+                isTeacher = JSON.parse(elem.attributes['is-teacher'].value);
+            }
         }
     }
 
     store.dispatch('setUserId', STUDIP.USER_ID);
     await store.dispatch('users/loadById', { id: STUDIP.USER_ID });
+    store.dispatch('setUserIsTeacherInCourse', isTeacher);
     store.dispatch('setHttpClient', httpClient);
     store.dispatch('coursewareContext', {
         id: entry_id,
         type: entry_type,
     });
-    await store.dispatch('loadTeacherStatus', STUDIP.USER_ID);
     await store.dispatch('tasks/loadTasksOfCourse', { cid: entry_id });
 
     const app = createApp({
diff --git a/resources/vue/store/courseware/courseware-shelf.module.js b/resources/vue/store/courseware/courseware-shelf.module.js
index d907ee421c4215a5032a51dc1415ac1e75283a85..e5ea54c48371760a0cfbbc1f8a91acc0e1ad9062 100644
--- a/resources/vue/store/courseware/courseware-shelf.module.js
+++ b/resources/vue/store/courseware/courseware-shelf.module.js
@@ -176,10 +176,12 @@ export const actions = {
     setUrlHelper(context, urlHelper) {
         context.commit('setUrlHelper', urlHelper);
     },
-
     setFeedbackSettings(context, feedbackSettings) {
         context.commit('setFeedbackSettings', feedbackSettings);
     },
+    setUserIsTeacher(context, isTeacher) {
+        context.commit('setUserIsTeacher', isTeacher);
+    },
 
     // other actions
     loadCourseUnits({ dispatch }, cid) {
@@ -546,54 +548,6 @@ export const actions = {
         return dispatch('courseware-instances/update', instance, { root: true });
     },
 
-    async loadTeacherStatus({ dispatch, rootGetters, state, commit, getters }, userId) {
-        const user = rootGetters['users/byId']({ id: userId });
-
-        if (user.attributes.permission === 'root') {
-            commit('setUserIsTeacher', true);
-            return;
-        }
-        if (user.attributes.permission === 'admin') {
-            await dispatch('courses/loadById', { id: state.context.id });
-            const course = rootGetters['courses/byId']({id: state.context.id });
-            const instituteId = course.relationships.institute.data.id;
-
-            const parent = { type: 'users', id: `${userId}` };
-            const relationship = 'institute-memberships';
-            const options = {};
-            await dispatch('institute-memberships/loadRelated', { parent, relationship, options }, { root: true });
-            const instituteMemberships = rootGetters['institute-memberships/all'];
-            const instituteMembership = instituteMemberships.filter(membership => membership.relationships.institute.data.id === instituteId);
-
-            if (instituteMembership.length > 0 && instituteMembership[0].attributes.permission === 'admin') {
-                commit('setUserIsTeacher', true);
-                return;
-            }
-        }
-
-        const membershipId = `${state.context.id}_${userId}`;
-        try {
-            await dispatch('course-memberships/loadById', { id: membershipId });
-        } catch (error) {
-            console.error(`Could not find course membership for ${membershipId}.`);
-            commit('setUserIsTeacher', false);
-
-            return false;
-        }
-        const membership = rootGetters['course-memberships/byId']({ id: membershipId });
-        if (membership) {
-            const membershipPermission = membership.attributes.permission;
-            commit('setUserIsTeacher', membershipPermission === 'dozent' || membershipPermission === 'tutor');
-
-            return true;
-        } else {
-            console.error(`Could not find course membership for ${membershipId}.`);
-            commit('setUserIsTeacher', false);
-
-            return false;
-        }
-    },
-
     uploadImageForStructuralElement({ dispatch, state }, { structuralElement, file }) {
         const formData = new FormData();
         formData.append('image', file);
@@ -789,7 +743,6 @@ export const mutations = {
         state.exportProgress = exportProgress;
     },
     setUserIsTeacher(state, isTeacher) {
-        state.teacherStatusLoaded = true;
         state.userIsTeacher = isTeacher;
     },
     setUrlHelper(state, urlHelper) {
diff --git a/resources/vue/store/courseware/courseware.module.js b/resources/vue/store/courseware/courseware.module.js
index 784b75090dff4b5be7bcfd5610c590b3dd4fb1a7..aeea3c07cbace52764c5e9e42a85d8525b706210 100644
--- a/resources/vue/store/courseware/courseware.module.js
+++ b/resources/vue/store/courseware/courseware.module.js
@@ -22,9 +22,7 @@ const getDefaultState = () => {
         userId: null,
         viewMode: 'read',
         dashboardViewMode: 'default',
-        userIsTeacher: false,
-        teacherStatusLoaded: false,
-
+        userIsTeacherInCourse: false,
         showStructuralElementEditDialog: false,
         showStructuralElementAddDialog: false,
         showStructuralElementAddChooserDialog: false,
@@ -181,11 +179,15 @@ const getters = {
     userId(state) {
         return state.userId;
     },
-    userIsTeacher(state) {
-        return state.userIsTeacher;
+    userIsTeacherInCourse(state) {
+        return state.userIsTeacherInCourse;
     },
-    teacherStatusLoaded(state) {
-        return state.teacherStatusLoaded;
+    userIsTeacher(state, getters) {
+        if (getters.courseware.attributes === undefined) {
+            return getters.userIsTeacherInCourse;
+        }
+
+        return getters.courseware.attributes['is-teacher'];
     },
     pluginManager(state) {
         return state.pluginManager;
@@ -1086,6 +1088,10 @@ export const actions = {
         commit('setAssistiveLiveContents', state);
     },
 
+    setUserIsTeacherInCourse({ commit }, state) {
+        commit('setUserIsTeacherInCourse', state);
+    },
+
     addBookmark({ dispatch, rootGetters }, structuralElement) {
         const cw = rootGetters['courseware'];
 
@@ -1290,65 +1296,6 @@ export const actions = {
         );
     },
 
-    async loadTeacherStatus({ dispatch, rootGetters, state, commit, getters }, userId) {
-        const user = rootGetters['users/byId']({ id: userId });
-
-        if (user.attributes.permission === 'root') {
-            commit('setUserIsTeacher', true);
-            return;
-        }
-        if (user.attributes.permission === 'admin') {
-            await dispatch('courses/loadById', { id: state.context.id });
-            const course = rootGetters['courses/byId']({id: state.context.id });
-            const instituteId = course.relationships.institute.data.id;
-
-            const parent = { type: 'users', id: `${userId}` };
-            const relationship = 'institute-memberships';
-            const options = {};
-            await dispatch('institute-memberships/loadRelated', { parent, relationship, options }, { root: true });
-            const instituteMemberships = rootGetters['institute-memberships/all'];
-            const instituteMembership = instituteMemberships.filter(membership => membership.relationships.institute.data.id === instituteId);
-
-            if (instituteMembership.length > 0 && instituteMembership[0].attributes.permission === 'admin') {
-                commit('setUserIsTeacher', true);
-                return;
-            }
-        }
-
-        const membershipId = `${state.context.id}_${userId}`;
-        try {
-            await dispatch('course-memberships/loadById', { id: membershipId });
-        } catch (error) {
-            console.error(`Could not find course membership for ${membershipId}.`);
-            commit('setUserIsTeacher', false);
-
-            return false;
-        }
-        const membership = rootGetters['course-memberships/byId']({ id: membershipId });
-        if (membership) {
-            let editingLevel = 'tutor';
-            if (getters.courseware.attributes) {
-                editingLevel = getters.courseware.attributes['editing-permission-level'];
-            }
-            const membershipPermission = membership.attributes.permission;
-
-            let isTeacher = false;
-            if (editingLevel === 'dozent') {
-                isTeacher = membershipPermission === 'dozent';
-            } else if (editingLevel === 'tutor') {
-                isTeacher = membershipPermission === 'dozent' || membershipPermission === 'tutor';
-            }
-            commit('setUserIsTeacher', isTeacher);
-
-            return true;
-        } else {
-            console.error(`Could not find course membership for ${membershipId}.`);
-            commit('setUserIsTeacher', false);
-
-            return false;
-        }
-    },
-
     loadFeedback({ dispatch }, blockId) {
         const parent = { type: 'courseware-blocks', id: `${blockId}` };
         const relationship = 'feedback';
@@ -1622,11 +1569,6 @@ export const mutations = {
         state.userId = userId;
     },
 
-    setUserIsTeacher(state, isTeacher) {
-        state.teacherStatusLoaded = true;
-        state.userIsTeacher = isTeacher;
-    },
-
     setPluginManager(state, pluginManager) {
         state.pluginManager = pluginManager;
     },
@@ -1748,6 +1690,9 @@ export const mutations = {
     setAssistiveLiveContents(state, text) {
         state.assistiveLiveContents = text;
     },
+    setUserIsTeacherInCourse(state, isTeacher) {
+        state.userIsTeacherInCourse = isTeacher;
+    },
     setProgresses(state, data) {
         state.progresses = data;
     },