diff --git a/resources/vue/components/courseware/CoursewareTasksDialogDistribute.vue b/resources/vue/components/courseware/CoursewareTasksDialogDistribute.vue
index 78d6d46d6846eed2d6a838cc832157634cb85b55..1e82d94c99b3316a97225dce17deb3e085735752 100644
--- a/resources/vue/components/courseware/CoursewareTasksDialogDistribute.vue
+++ b/resources/vue/components/courseware/CoursewareTasksDialogDistribute.vue
@@ -327,6 +327,7 @@ export default {
             selectedGroups: [],
             bulkSelectGroups: false,
             requirements: [],
+            distributing: false,
         };
     },
     computed: {
@@ -494,6 +495,7 @@ export default {
             copyStructuralElement: 'copyStructuralElement',
             companionError: 'companionError',
             companionSuccess: 'companionSuccess',
+            companionInfo: 'companionInfo',
             loadCourseMemberships: 'course-memberships/loadRelated',
             loadCourseStatusGroups: 'status-groups/loadRelated',
             createTaskGroup: 'createTaskGroup',
@@ -515,6 +517,11 @@ export default {
             this.loadStructuralElement({ id: id, options: { include: 'children' } });
         },
         async distributeTask() {
+            if (this.distributing) {
+                this.companionInfo({ info: this.$gettext('Aufgaben werden bereits verteilt.') });
+                return;
+            }
+            this.distributing = true;
             const taskGroup = {
                 attributes: {
                     title: this.taskTitle,
@@ -548,11 +555,12 @@ export default {
                 solvers = this.selectedGroups.map((id) => ({ type: 'status-groups', id }));
             }
             taskGroup.relationships.solvers.data = solvers;
-
             await this.createTaskGroup({ taskGroup });
             this.companionSuccess({ info: this.$gettext('Aufgaben wurden verteilt.') });
             this.$emit('newtask');
+            this.distributing = false;
             this.setShowTasksDistributeDialog(false);
+            
         },
         validateSolvers() {
             if (
diff --git a/resources/vue/components/courseware/TasksApp.vue b/resources/vue/components/courseware/TasksApp.vue
index 37ec927542c4b180078cf5e123b5822f9e7012c2..7c149b828a3f7bdd7f800e6ee1ec0b2a67d16be1 100644
--- a/resources/vue/components/courseware/TasksApp.vue
+++ b/resources/vue/components/courseware/TasksApp.vue
@@ -7,13 +7,15 @@
         <MountingPortal mountTo="#courseware-action-widget" name="sidebar-actions" v-if="userIsTeacher">
             <courseware-tasks-action-widget />
         </MountingPortal>
+        <courseware-companion-overlay />
     </div>
 </template>
 
 <script>
 import CoursewareTasksActionWidget from './CoursewareTasksActionWidget.vue';
-import CoursewareDashboardTasks from './CoursewareDashboardTasks.vue'
-import CoursewareDashboardStudents from './CoursewareDashboardStudents.vue'
+import CoursewareDashboardTasks from './CoursewareDashboardTasks.vue';
+import CoursewareDashboardStudents from './CoursewareDashboardStudents.vue';
+import CoursewareCompanionOverlay from './CoursewareCompanionOverlay.vue';
 import { mapGetters } from 'vuex';
 
 export default {
@@ -21,6 +23,7 @@ export default {
         CoursewareTasksActionWidget,
         CoursewareDashboardTasks,
         CoursewareDashboardStudents,
+        CoursewareCompanionOverlay,
     },
     computed: {
         ...mapGetters({