diff --git a/package-lock.json b/package-lock.json
index 8afa2eff2d679b3a6b72f9879e57737127fe216e..58a18e7567ccd2fd6cdb3765d11ea85549aa22fa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,7 +14,7 @@
                 "@babel/plugin-transform-runtime": "^7.12.1",
                 "@babel/preset-env": "^7.12.1",
                 "@babel/register": "^7.12.1",
-                "@elan-ev/reststate-vuex": "~1.0.4",
+                "@elan-ev/reststate-vuex": "~1.0.5",
                 "@fullcalendar/core": "^4.3.1",
                 "@fullcalendar/daygrid": "^4.3.0",
                 "@fullcalendar/interaction": "^4.3.0",
@@ -1142,9 +1142,9 @@
             "dev": true
         },
         "node_modules/@elan-ev/reststate-vuex": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/@elan-ev/reststate-vuex/-/reststate-vuex-1.0.5.tgz",
-            "integrity": "sha512-WDXJOocwxgMPHvW7veGhjcyhDXBtzhQA/TylSNTd7iDNpCItTyT2Y+gFoJBm8o+JpvYRdanH56GRHwiqidgNJQ==",
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/@elan-ev/reststate-vuex/-/reststate-vuex-1.0.6.tgz",
+            "integrity": "sha512-hj1MCzPx9dF2jhQ2rstTBqg4WGNT+cvfIBBpCgsAE9CSrroZlL0Gdb6+3XVnM9cOKQi7NdAnTy6b/FMC5+rlaw==",
             "dev": true,
             "dependencies": {
                 "@elan-ev/reststate-client": "^1.0.0"
@@ -15219,9 +15219,9 @@
             "dev": true
         },
         "@elan-ev/reststate-vuex": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/@elan-ev/reststate-vuex/-/reststate-vuex-1.0.5.tgz",
-            "integrity": "sha512-WDXJOocwxgMPHvW7veGhjcyhDXBtzhQA/TylSNTd7iDNpCItTyT2Y+gFoJBm8o+JpvYRdanH56GRHwiqidgNJQ==",
+            "version": "1.0.6",
+            "resolved": "https://registry.npmjs.org/@elan-ev/reststate-vuex/-/reststate-vuex-1.0.6.tgz",
+            "integrity": "sha512-hj1MCzPx9dF2jhQ2rstTBqg4WGNT+cvfIBBpCgsAE9CSrroZlL0Gdb6+3XVnM9cOKQi7NdAnTy6b/FMC5+rlaw==",
             "dev": true,
             "requires": {
                 "@elan-ev/reststate-client": "^1.0.0"
diff --git a/resources/vue/store/courseware/courseware.module.js b/resources/vue/store/courseware/courseware.module.js
index 3323ed421d5bbd56b4f466faa5c8ede8b79cdee9..aa3e7eb7f643432a633a6d290753b7c2ed3c8ebc 100755
--- a/resources/vue/store/courseware/courseware.module.js
+++ b/resources/vue/store/courseware/courseware.module.js
@@ -204,11 +204,14 @@ export const actions = {
             type: 'courseware-blocks',
             id: block_id,
         };
-
         const relationship = 'file-refs';
 
-        return dispatch('courseware-blocks/loadRelated', { parent, relationship }, { root: true }).then(() => {
-            const refs = rootGetters['courseware-blocks/related']({
+        return dispatch('loadRelatedPaginated', {
+            type: 'file-refs',
+            parent,
+            relationship,
+        }).then(() => {
+            const refs = rootGetters['file-refs/related']({
                 parent,
                 relationship,
             });
@@ -804,36 +807,61 @@ export const actions = {
         context.commit('cwManagerFilingDataSet', msg);
     },
 
-    loadUsersCourses({ dispatch, rootGetters, state }, userId) {
+    async loadRelatedPaginated({ dispatch, rootGetters }, { type, parent, relationship, options }) {
+        const limit = 100;
+        let offset = 0;
+
+        do {
+            const optionsWithPages = {
+                ...options,
+                'page[offset]': offset++,
+                'page[limit]': limit,
+            };
+            await dispatch(
+                `${type}/loadRelated`,
+                {
+                    parent,
+                    relationship,
+                    options: optionsWithPages,
+                    resetRelated: false
+                },
+                { root: true }
+            );
+        } while (rootGetters[`${type}/all`].length < rootGetters[`${type}/lastMeta`].page.total);
+    },
+
+    async loadUsersCourses({ dispatch, rootGetters, state }, userId) {
         const parent = {
             type: 'users',
             id: userId,
         };
         const relationship = 'course-memberships';
-
         const options = {
-            include: 'course',
-            'page[limit]': 10000,
+            include: 'course'
         };
+        await dispatch('loadRelatedPaginated', {
+            type: 'course-memberships',
+            parent,
+            relationship,
+            options
+        });
 
-        return dispatch('course-memberships/loadRelated', { parent, relationship, options }, { root: true }).then(
-            () => {
-                const memberships = rootGetters['course-memberships/related']({
-                    parent,
-                    relationship,
-                });
-                let courses = [];
-                memberships.forEach((membership) => {
-                    if (
-                        membership.attributes.permission === 'dozent' &&
-                        state.context.id !== membership.relationships.course.data.id
-                    ) {
-                        courses.push(rootGetters['courses/related']({ parent: membership, relationship: 'course' }));
-                    }
-                });
-                return courses;
+        const memberships = rootGetters['course-memberships/related']({
+            parent,
+            relationship,
+        });
+
+        let courses = [];
+        memberships.forEach((membership) => {
+            if (
+                membership.attributes.permission === 'dozent' &&
+                    state.context.id !== membership.relationships.course.data.id
+            ) {
+                courses.push(rootGetters['courses/related']({ parent: membership, relationship: 'course' }));
             }
-        );
+        });
+
+        return courses;
     },
 
     loadRemoteCoursewareStructure({ dispatch, rootGetters }, { rangeId, rangeType }) {
@@ -859,47 +887,48 @@ export const actions = {
         );
     },
 
-    loadTeacherStatus({ dispatch, rootGetters, state, commit, getters }, userId) {
+    async loadTeacherStatus({ dispatch, rootGetters, state, commit, getters }, userId) {
         const parent = {
             type: 'users',
             id: userId,
         };
         const relationship = 'course-memberships';
-
         const options = {
             include: 'course',
-            'page[limit]': 10000,
         };
+        await dispatch('loadRelatedPaginated', {
+            type: 'course-memberships',
+            parent,
+            relationship,
+            options
+        });
 
-        return dispatch('course-memberships/loadRelated', { parent, relationship, options }, { root: true }).then(
-            () => {
-                const memberships = rootGetters['course-memberships/related']({
-                    parent,
-                    relationship,
-                });
-                let isTeacher = false;
-                memberships.forEach((membership) => {
-                    if (getters.courseware.attributes['editing-permission-level'] === 'dozent') {
-                        if (
-                            membership.attributes.permission === 'dozent' &&
-                            state.context.id === membership.relationships.course.data.id
-                        ) {
-                            isTeacher = true;
-                        }
-                    }
-                    if (getters.courseware.attributes['editing-permission-level'] === 'tutor') {
-                        if (
-                            (membership.attributes.permission === 'dozent' ||
-                                membership.attributes.permission === 'tutor') &&
-                            state.context.id === membership.relationships.course.data.id
-                        ) {
-                            isTeacher = true;
-                        }
-                    }
-                });
-                return commit('setUserIsTeacher', isTeacher);
+        const memberships = rootGetters['course-memberships/related']({
+            parent,
+            relationship,
+        });
+        let isTeacher = false;
+        memberships.forEach((membership) => {
+            if (getters.courseware.attributes['editing-permission-level'] === 'dozent') {
+                if (
+                    membership.attributes.permission === 'dozent' &&
+                        state.context.id === membership.relationships.course.data.id
+                ) {
+                    isTeacher = true;
+                }
             }
-        );
+            if (getters.courseware.attributes['editing-permission-level'] === 'tutor') {
+                if (
+                    (membership.attributes.permission === 'dozent' ||
+                     membership.attributes.permission === 'tutor') &&
+                        state.context.id === membership.relationships.course.data.id
+                ) {
+                    isTeacher = true;
+                }
+            }
+        });
+
+        return commit('setUserIsTeacher', isTeacher);
     },
 
     loadFeedback({ dispatch }, blockId) {
@@ -909,7 +938,12 @@ export const actions = {
             include: 'user',
         };
 
-        return dispatch('courseware-block-feedback/loadRelated', { parent, relationship, options }, { root: true });
+        return dispatch('loadRelatedPaginated', {
+            type: 'course-block-feedback',
+            parent,
+            relationship,
+            options
+        });
     },
 
     async createFeedback({ dispatch }, { blockId, feedback }) {