diff --git a/resources/vue/courseware-dashboard-app.js b/resources/vue/courseware-dashboard-app.js
index 608341b889703c3f7ed2998724ae3ccd1300ae41..5ddaf344ff17d2edce1784c156e589122c513829 100644
--- a/resources/vue/courseware-dashboard-app.js
+++ b/resources/vue/courseware-dashboard-app.js
@@ -5,7 +5,7 @@ import CoursewareModule from './store/courseware/courseware.module';
 import CoursewareStructureModule from './store/courseware/structure.module';
 import axios from 'axios';
 
-const mountApp = (STUDIP, createApp, element) => {
+const mountApp = async (STUDIP, createApp, element) => {
     const getHttpClient = () =>
         axios.create({
             baseURL: STUDIP.URLHelper.getURL(`jsonapi.php/v1`, {}, true),
@@ -42,6 +42,7 @@ const mountApp = (STUDIP, createApp, element) => {
                     'folders',
                     'users',
                     'institutes',
+                    'institute-memberships',
                     'semesters',
                     'sem-classes',
                     'sem-types',
@@ -68,7 +69,7 @@ const mountApp = (STUDIP, createApp, element) => {
     }
 
     store.dispatch('setUserId', STUDIP.USER_ID);
-    store.dispatch('users/loadById', { id: STUDIP.USER_ID });
+    await store.dispatch('users/loadById', { id: STUDIP.USER_ID });
     store.dispatch('setHttpClient', httpClient);
     store.dispatch('coursewareContext', {
         id: entry_id,
diff --git a/resources/vue/courseware-index-app.js b/resources/vue/courseware-index-app.js
index 3d95d7dcd81c140e0b62c8bb5d414bf42f96c00f..e39d053b966a6902eaf83a3d326603a80a5302c6 100644
--- a/resources/vue/courseware-index-app.js
+++ b/resources/vue/courseware-index-app.js
@@ -9,7 +9,7 @@ import Vuex from 'vuex';
 import axios from 'axios';
 import { mapResourceModules } from '@elan-ev/reststate-vuex';
 
-const mountApp = (STUDIP, createApp, element) => {
+const mountApp = async (STUDIP, createApp, element) => {
     const getHttpClient = () =>
         axios.create({
             baseURL: STUDIP.URLHelper.getURL(`jsonapi.php/v1`, {}, true),
@@ -105,6 +105,7 @@ const mountApp = (STUDIP, createApp, element) => {
                     'status-groups',
                     'users',
                     'institutes',
+                    'institute-memberships',
                     'semesters',
                     'sem-classes',
                     'sem-types',
@@ -117,7 +118,7 @@ const mountApp = (STUDIP, createApp, element) => {
 
     store.dispatch('setUrlHelper', STUDIP.URLHelper);
     store.dispatch('setUserId', STUDIP.USER_ID);
-    store.dispatch('users/loadById', {id: STUDIP.USER_ID});
+    await store.dispatch('users/loadById', {id: STUDIP.USER_ID});
     store.dispatch('setHttpClient', httpClient);
 
     store.dispatch('coursewareContext', {
diff --git a/resources/vue/courseware-manager-app.js b/resources/vue/courseware-manager-app.js
index fccea2beb5ea26daad072e0f886bf67e2e78bc8f..8d6454a3a379aa3d5ab887cc2611cc8e5fea2727 100644
--- a/resources/vue/courseware-manager-app.js
+++ b/resources/vue/courseware-manager-app.js
@@ -6,7 +6,7 @@ import axios from 'axios';
 import { mapResourceModules } from '@elan-ev/reststate-vuex';
 
 
-const mountApp = (STUDIP, createApp, element) => {
+const mountApp = async (STUDIP, createApp, element) => {
     const getHttpClient = () =>
         axios.create({
             baseURL: STUDIP.URLHelper.getURL(`jsonapi.php/v1`, {}, true),
@@ -41,6 +41,7 @@ const mountApp = (STUDIP, createApp, element) => {
                     'status-groups',
                     'users',
                     'institutes',
+                    'institute-memberships',
                     'semesters',
                     'sem-classes',
                     'sem-types',
@@ -69,6 +70,7 @@ const mountApp = (STUDIP, createApp, element) => {
 
     store.dispatch('setUrlHelper', STUDIP.URLHelper);
     store.dispatch('setUserId', STUDIP.USER_ID);
+    await store.dispatch('users/loadById', {id: STUDIP.USER_ID});
     store.dispatch('setHttpClient', httpClient);
     store.dispatch('coursewareContext', {
         id: entry_id,
diff --git a/resources/vue/store/courseware/courseware.module.js b/resources/vue/store/courseware/courseware.module.js
index a211103ffcff4182e934920f26fe034a40fee11b..f8387604d602998502061ccdc51b74f68b17e43c 100644
--- a/resources/vue/store/courseware/courseware.module.js
+++ b/resources/vue/store/courseware/courseware.module.js
@@ -1075,20 +1075,39 @@ export const actions = {
     },
 
     async loadTeacherStatus({ dispatch, rootGetters, state, commit, getters }, userId) {
-        let user = rootGetters['users/byId']({ id: userId });
-        if (!user) {
-            await dispatch('users/loadById', { id: userId });
-            user = rootGetters['users/byId']({ id: 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);
 
-        await dispatch('course-memberships/loadById', { id: membershipId });
+            return false;
+        }
         const membership = rootGetters['course-memberships/byId']({ id: membershipId });
         if (membership) {
             let editingLevel = 'tutor';