diff --git a/resources/vue/components/courseware/CoursewareStructuralElement.vue b/resources/vue/components/courseware/CoursewareStructuralElement.vue
index 8922e58198b3fb5b34995dd0dd60b699faa02c8c..3a75a3e035918e17a14651543d401b48dcaeb65f 100755
--- a/resources/vue/components/courseware/CoursewareStructuralElement.vue
+++ b/resources/vue/components/courseware/CoursewareStructuralElement.vue
@@ -381,7 +381,7 @@
                     @confirm="publishCurrentElement"
                 >
                     <template v-slot:dialogContent>
-                        <form class="default" @submit.prevent="">
+                        <form v-show="!oerExportRunning" class="default" @submit.prevent="">
                             <fieldset>
                                 <legend><translate>Grunddaten</translate></legend>
                                 <label>
@@ -419,6 +419,11 @@
                                 </label>
                             </fieldset>
                         </form>
+                        <courseware-companion-box
+                            v-show="oerExportRunning"
+                            :msgCompanion="$gettext('Export läuft, bitte haben sie einen Moment Geduld...')"
+                            mood="pointing"
+                        />
                     </template>
                 </studip-dialog>
                 <studip-dialog
@@ -520,6 +525,7 @@ export default {
             },
             exportRunning: false,
             exportChildren: false,
+            oerExportRunning: false,
             oerChildren: true,
             containerList: [],
             consumModeTrap: false,
@@ -1062,7 +1068,13 @@ export default {
         },
 
         async publishCurrentElement() {
-            this.exportToOER(this.currentElement, { withChildren: this.oerChildren });
+            if (this.oerExportRunning) {
+                return;
+            }
+            this.oerExportRunning = true;
+            await this.exportToOER(this.currentElement, { withChildren: this.oerChildren });
+            this.oerExportRunning = false;
+            this.showElementOerDialog(false);
         },
 
         async closeDeleteDialog() {
diff --git a/resources/vue/mixins/courseware/export.js b/resources/vue/mixins/courseware/export.js
index ee962da5889d7cf0741d5d73c4567ea1b16a0a77..0846edf52d802366b72dfea5cddeece7a1b62c34 100755
--- a/resources/vue/mixins/courseware/export.js
+++ b/resources/vue/mixins/courseware/export.js
@@ -187,6 +187,9 @@ export default {
                 headers: { "Content-Type": "multipart/form-data"}
             }).then( () => {
                 this.companionInfo({ info: this.$gettextInterpolate('Die Seite wurde an %{ oerTitle } gesendet.', {oerTitle: this.oerTitle}) });
+            }).catch(error => {
+                this.companionError({ info: this.$gettext('Beim Veröffentlichen der Seite ist ein Fehler aufgetreten.') });
+                console.debug(error);
             });
         },