diff --git a/app/controllers/course/contentmodules.php b/app/controllers/course/contentmodules.php
index 2d4268fc498f3d66850ba693354359a5bbf13c1d..77676a15a61933200be6201f372ab0dbd13e522f 100644
--- a/app/controllers/course/contentmodules.php
+++ b/app/controllers/course/contentmodules.php
@@ -85,6 +85,9 @@ class Course_ContentmodulesController extends AuthenticatedController
 
         $this->render_vue_app(
             Studip\VueApp::create('ContentModules')
+                ->withProps([
+                    'range-type' => get_class($this->sem),
+                ])
                 ->withStore('ContentModulesStore', 'contentmodules', [
                     'setCategories'  => $this->categories,
                     'setHighlighted' => $this->highlighted_modules,
diff --git a/resources/vue/components/ContentModules.vue b/resources/vue/components/ContentModules.vue
index a48dd9d69092ca4863e1158ea82ffd8c3f7e665b..e6164900787e0032362be1665e393a343989b9f0 100644
--- a/resources/vue/components/ContentModules.vue
+++ b/resources/vue/components/ContentModules.vue
@@ -36,6 +36,7 @@
         <component :is="displayComponent"
                    :modules="modules"
                    :filtercategory="filterCategory"
+                   :range-type="rangeType"
         ></component>
 
         <MountingPortal mount-to="#tool-view-switch .sidebar-widget-content .widget-list" name="sidebar-switch">
diff --git a/resources/vue/components/ContentModulesEditTiles.vue b/resources/vue/components/ContentModulesEditTiles.vue
index 7407632c40aea3784a2aeb4615ad224ee7544314..ae9324c4e7a1985768625e3373d937b4f1c433f3 100644
--- a/resources/vue/components/ContentModulesEditTiles.vue
+++ b/resources/vue/components/ContentModulesEditTiles.vue
@@ -61,7 +61,7 @@
                                     href="#"
                                     class="toggle_visibility"
                                     role="checkbox"
-                                    v-if="!module.mandatory"
+                                    v-if="showVisibilityToggle(module)"
                                     :aria-checked="module.visibility !== 'tutor' ? 'true' : 'false'"
                                     @click.prevent="toggleModuleVisibility(module)"
                                 >
diff --git a/resources/vue/components/ContentmodulesEditTable.vue b/resources/vue/components/ContentmodulesEditTable.vue
index 0a8a0aa6f384446cc5cdd86177fbef4e96f682d3..39835a7007eb71e83b1dc4880d77a51fda5c4d58 100644
--- a/resources/vue/components/ContentmodulesEditTable.vue
+++ b/resources/vue/components/ContentmodulesEditTable.vue
@@ -59,7 +59,7 @@
                 <td class="actions">
                     <a
                         href="#"
-                        v-if="module.active && !module.mandatory"
+                        v-if="showVisibilityToggle(module)"
                         role="checkbox"
                         :aria-checked="module.visibility !== 'tutor' ? 'true' : 'false'"
                         @click.prevent="toggleModuleVisibility(module)"
@@ -121,7 +121,6 @@ import ContentModulesMixin from '../mixins/ContentModulesMixin.js';
 
 export default {
     name: 'contentmodules-edit-table',
-
     mixins: [ContentModulesMixin],
 };
 </script>
diff --git a/resources/vue/mixins/ContentModulesMixin.js b/resources/vue/mixins/ContentModulesMixin.js
index 86a29ffb52af4c3c9badb087382d1eb6435f6f73..b02561d9ee1060e19208c910f19ee247d7629add 100644
--- a/resources/vue/mixins/ContentModulesMixin.js
+++ b/resources/vue/mixins/ContentModulesMixin.js
@@ -5,6 +5,9 @@ export default {
     components: {
         draggable,
     },
+    props: {
+        rangeType: String,
+    },
     data: () => ({
         order: [],
     }),
@@ -132,5 +135,10 @@ export default {
 
             return classes.join(' ');
         },
+        showVisibilityToggle(module) {
+            return this.rangeType !== 'Institute'
+                && module.active
+                && !module.mandatory;
+        }
     },
 };