diff --git a/resources/vue/components/responsive/ResponsiveContentBar.vue b/resources/vue/components/responsive/ResponsiveContentBar.vue
index b40bdd8bb40a3eb0937304f23e024d0dd47ef718..d64ac521d837d7385921ae92e1fe54d6e8960d6b 100644
--- a/resources/vue/components/responsive/ResponsiveContentBar.vue
+++ b/resources/vue/components/responsive/ResponsiveContentBar.vue
@@ -108,9 +108,12 @@ export default {
             }
 
             // Adjust toggle sidebar button title
-            document.getElementById('toggle-sidebar').title = this.sidebarOpen
-                ? this.$gettext('Sidebar schließen')
-                : this.$gettext('Sidebar öffnen');
+            const toggle = document.getElementById('toggle-sidebar');
+            if (toggle) {
+                toggle.title = this.sidebarOpen
+                    ? this.$gettext('Sidebar schließen')
+                    : this.$gettext('Sidebar öffnen');
+            }
         },
         adjustExistingContentbar(responsiveMode) {
             if (this.realContentbar) {
diff --git a/resources/vue/components/responsive/ResponsiveNavigation.vue b/resources/vue/components/responsive/ResponsiveNavigation.vue
index 4151884b2900e1d0e275399e51cf4064b852171f..eda2bfa86ee0ce6f27214f022ece89318c928482 100644
--- a/resources/vue/components/responsive/ResponsiveNavigation.vue
+++ b/resources/vue/components/responsive/ResponsiveNavigation.vue
@@ -1,5 +1,5 @@
 <template>
-    <div role="navigation" ref="container" v-if="menuNeeded">
+    <div role="navigation" ref="container" id="responsive-navigation-container" v-if="menuNeeded">
         <div class="responsive-navigation-header">
             <transition name="slide" appear>
                 <button id="responsive-navigation-button" class="styleless"
@@ -158,7 +158,8 @@ export default {
             courses: [],
             avatarNavigation: studipNavigation.avatar,
             avatarMenuOpen: false,
-            observer: null,
+            classObserver: null,
+            dialogObserver: null,
             hasSkiplinks: document.querySelector('#skiplink_list') !== null,
             hasContentbar: false,
             contentbarTitle: ''
@@ -272,7 +273,6 @@ export default {
          * Open or close the navigation menu
          */
         toggleMenu() {
-
             this.showMenu = !this.showMenu;
 
             if (!this.showMenu && this.avatarMenuOpen) {
@@ -541,7 +541,7 @@ export default {
          * Use an observer for html and body in order to check
          * whether we move into consuming mode or leave responsive mode.
          */
-        this.observer = new MutationObserver(mutations => {
+        this.classObserver = new MutationObserver(mutations => {
             for (const m of mutations) {
                 const newValue = m.target.getAttribute(m.attributeName);
                 this.onChangeViewMode(m.target.tagName, newValue);
@@ -549,19 +549,31 @@ export default {
         });
 
         // Observe <html> for class changes.
-        this.observer.observe(document.documentElement, {
+        this.classObserver.observe(document.documentElement, {
             attributes: true,
             attributeOldValue : false,
             attributeFilter: ['class']
         });
 
         // Observe <body> for class changes.
-        this.observer.observe(document.body, {
+        this.classObserver.observe(document.body, {
             attributes: true,
             attributeOldValue : false,
             attributeFilter: ['class']
         });
 
+        // Check for closed dialog, re-mounting the Vue component.
+        this.dialogObserver = new MutationObserver(mutations => {
+            if (mutations[0].removedNodes.length > 0 &&
+                    mutations[0].removedNodes[0].classList.contains('ui-widget-overlay')) {
+                document.getElementById('responsive-menu').replaceChildren(this.$el);
+            }
+        });
+
+        this.dialogObserver.observe(document.body, {
+            childList: true
+        });
+
         this.globalOn('has-contentbar', value => {
             this.hasContentbar = value;
             if (value && this.isFullscreen) {
@@ -574,7 +586,7 @@ export default {
             if (this.isFullscreen) {
                 document.getElementById('responsive-toggle-focusmode').style.display = 'block';
             }
-            this.observer.observe(element.$el.querySelector('header.cw-ribbon'), {
+            this.classObserver.observe(element.$el.querySelector('header.cw-ribbon'), {
                 attributes: true,
                 attributeOldValue : false,
                 attributeFilter: ['class']
@@ -582,7 +594,8 @@ export default {
         });
     },
     beforeDestroy() {
-        this.observer.disconnect();
+        this.classObserver.disconnect();
+        this.dialogObserver.disconnect();
         document.getElementById('header-links').style.display = null;
         STUDIP.eventBus.off('responsive-navigation-move-to');
         STUDIP.eventBus.off('toggle-compact-navigation');
@@ -594,7 +607,6 @@ export default {
 
 <style lang="scss">
 @media not prefers-reduced-motion {
-
     .slide-enter-active,
     .slide-leave-active {
         transition: all .3s ease;