diff --git a/app/controllers/admin/sem_classes.php b/app/controllers/admin/sem_classes.php
index b892431070fe608aef538ae4abdff3343d789990..42516853c3a0782fbfbd5d8e582bc420149039d7 100644
--- a/app/controllers/admin/sem_classes.php
+++ b/app/controllers/admin/sem_classes.php
@@ -68,17 +68,18 @@ class Admin_SemClassesController extends AuthenticatedController
         $plugins = PluginManager::getInstance()->getPlugins("StudipModule");
         $this->sem_class = SemClass::getClasses()[Request::get("id")];
         $modules = [];
-        foreach ($this->sem_class->getActivatedModuleObjects() as $plugin) {
+        foreach ($this->sem_class->getModuleObjects() as $plugin) {
             $modules[get_class($plugin)] = [
                 'name' => $plugin->getPluginName(),
                 'id' => $plugin->getPluginId(),
                 'enabled' => $plugin->isEnabled(),
-                'activated' => true
+                'activated' => $this->sem_class->isModuleActivated($plugin->getPluginName())
             ];
         }
         foreach ($plugins as $plugin) {
             if (!$plugin->isActivatableForContext(new Course)) continue;
             if (isset($modules[get_class($plugin)])) continue;
+            if ($this->sem_class->isModuleForbidden(get_class($plugin))) continue;
             $modules[get_class($plugin)] = [
                 'name' => $plugin->getPluginName(),
                 'id' => $plugin->getPluginId(),
@@ -97,9 +98,8 @@ class Admin_SemClassesController extends AuthenticatedController
             throw new Exception("Kein Zugriff über GET");
         }
         $sem_class = $GLOBALS['SEM_CLASS'][Request::int("sem_class_id")];
-        foreach (Request::getArray("core_module_slots") as $slot => $module) {
-            $sem_class->setSlotModule($slot, $module);
-        }
+        $old_data_sem_class = clone $sem_class;
+
         $sem_class->setModules(Request::getArray("modules"));
         $sem_class->set('name', Request::get("sem_class_name"));
         $sem_class->set('description', Request::get("sem_class_description"));
@@ -126,6 +126,14 @@ class Admin_SemClassesController extends AuthenticatedController
         $sem_class->set('show_raumzeit', Request::int("show_raumzeit"));
         $sem_class->set('is_group', Request::int("is_group"));
         $sem_class->store();
+        foreach (array_keys($sem_class->getModules()) as $module_name) {
+            if ($sem_class->isModuleMandatory($module_name) && !$old_data_sem_class->isModuleMandatory($module_name)) {
+                $sem_class->activateModuleInCourses($module_name);
+            }
+            if (!$sem_class->isModuleAllowed($module_name) && $old_data_sem_class->isModuleAllowed($module_name)) {
+                $sem_class->deActivateModuleInCourses($module_name);
+            }
+        }
         if (!count($sem_class->getSemTypes())) {
             $notice = "<br>"._("Beachten Sie, dass es noch keine Veranstaltungstypen gibt!");
         }
diff --git a/app/views/admin/sem_classes/details.php b/app/views/admin/sem_classes/details.php
index a0693a7c280398c319f8e43a164265714905fb79..2496473decc96303f4f5c126d0c9fd1c328d7978 100644
--- a/app/views/admin/sem_classes/details.php
+++ b/app/views/admin/sem_classes/details.php
@@ -202,17 +202,15 @@
         </label>
     </fieldset>
 
-    <fieldset class="collapsed attribute_table">
+    <fieldset class="attribute_table">
         <legend>
             <?= _("Inhaltselemente") ?>
         </legend>
 
-
-        <div container="plugins" id="plugins" class="core_module_slot">
-            <h2 title="<?= _("Diese Inhaltselemente sind standardmäßig bei den Veranstaltungen dieser Klasse aktiviert.") ?>"><?= _("Aktivierte Inhaltselemente") ?></h2>
+        <div container="plugins" id="plugins">
+            <h2 title="<?= _("Diese Inhaltselemente sind standardmäßig bei den Veranstaltungen dieser Klasse aktiviert.") ?>"><?= _("Verfügbare Inhaltselemente") ?></h2>
             <div class="droparea">
                 <? foreach ($modules as $module_name => $module_info) : ?>
-                <? if ($module_info['activated']) : ?>
                     <?= $this->render_partial("admin/sem_classes/content_plugin.php",
                         [
                             'plugin' => $module_info,
@@ -222,29 +220,10 @@
                             'sticky' => $sem_class['modules'][$module_name]['sticky']
                         ]
                     )?>
-                <? endif ?>
                 <? endforeach ?>
             </div>
         </div>
-        <hr>
-        <div container="deactivated" id="deactivated_modules">
-            <h2 title="<?= _("Diese Module sind standardmäßig nicht aktiviert.") ?>"><?= _("Nichtaktivierte Inhaltselemente") ?></h2>
-            <div class="droparea">
-                <? foreach ($modules as $module_name => $module_info) {
-                    if (!$module_info['activated']) {
-                        echo $this->render_partial("admin/sem_classes/content_plugin.php",
-                            [
-                                'plugin' => $module_info,
-                                'sem_class' => $sem_class,
-                                'plugin_id' => $module_name,
-                                'activated' => $sem_class['modules'][$module_id]['activated'],
-                                'sticky' => $sem_class['modules'][$module_id]['sticky']
-                            ]
-                        );
-                    }
-                } ?>
-            </div>
-        </div>
+
     </fieldset>
 
     <footer>
diff --git a/lib/classes/SemClass.class.php b/lib/classes/SemClass.class.php
index f4ef3da8d83de0fb6cd21ebe243413a84f0e29b1..8f122a3d8947c2347c832fc3b68001a62152f73e 100644
--- a/lib/classes/SemClass.class.php
+++ b/lib/classes/SemClass.class.php
@@ -41,20 +41,12 @@ class SemClass implements ArrayAccess
 {
     protected $data = [];
 
-    static protected $core_modules = [
-        "CoreOverview",
-        "CoreAdmin",
-        "CoreStudygroupAdmin",
-        "CoreStudygroupOverview",
-        "CoreDocuments",
-        "CoreParticipants",
-        "CoreStudygroupParticipants",
-        "CoreSchedule",
-        "CoreScm",
-        "CoreWiki",
-        "CoreCalendar",
-        "CoreElearningInterface"
+    static protected $studygroup_forbidden_modules = [
+        'CoreAdmin',
+        'CoreParticipants',
+        'CoreSchedule'
     ];
+
     static protected $sem_classes = null;
 
     static public function getDefaultSemClass() {
@@ -128,6 +120,61 @@ class SemClass implements ArrayAccess
         } else {
             $this->data['modules'] = [];
         }
+        foreach (array_keys($this->data['modules']) as $modulename) {
+            if ($this->isModuleForbidden($modulename)) {
+                unset($this->data['modules'][$modulename]);
+            }
+        }
+    }
+
+
+    /**
+     * @param string $module
+     * @return false|int
+     */
+    public function activateModuleInCourses($module)
+    {
+        $plugin = PluginManager::getInstance()->getPlugin($module);
+        if ($plugin) {
+            return Course::findEachBySQL(function ($course) use ($plugin) {
+                if (!$course->tools->findOneby('plugin_id', $plugin->getPluginId())) {
+                    return ToolActivation::create([
+                        'plugin_id' => $plugin->getPluginId(),
+                        'range_type'  => 'course',
+                        'range_id' => $course->id
+                    ]);
+                } else {
+                    return 0;
+                }
+        },
+                "seminare.status IN (?)",
+                [array_keys($this->getSemTypes())]);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * @param string $module
+     * @return false|int
+     */
+    public function deActivateModuleInCourses($module)
+    {
+        $plugin = PluginManager::getInstance()->getPlugin($module);
+        if ($plugin) {
+            return Course::findEachBySQL(function ($course) use ($plugin) {
+                if ($tool = $course->tools->findOneby('plugin_id', $plugin->getPluginId())) {
+                    return $tool->delete();
+                } else {
+                    return 0;
+                }
+            },
+                "seminare.status IN (?)",
+                [array_keys($this->getSemTypes())]);
+        } else {
+            return false;
+        }
+
     }
 
     /**
@@ -147,6 +194,19 @@ class SemClass implements ArrayAccess
     }
 
 
+    /**
+     * @param string $modulename
+     * @return bool
+     */
+    public function isModuleForbidden($modulename)
+    {
+        if ($this->data['studygroup_mode']) {
+            return in_array($modulename, self::$studygroup_forbidden_modules);
+        } else {
+            return strpos($modulename, 'Studygroup') !== false;
+        }
+    }
+
     /**
      * Returns the metadata of a module regarding this sem_class object.
      * @param string $modulename
@@ -175,6 +235,24 @@ class SemClass implements ArrayAccess
         return $this->data['modules'];
     }
 
+    /**
+     * @return StudipModule[]
+     */
+    public function getModuleObjects()
+    {
+        $result = [];
+        foreach (array_keys($this->getModules()) as $module) {
+            $plugin = PluginManager::getInstance()->getPlugin($module);
+            if ($plugin) {
+                $result[$plugin->getPluginId()] = $plugin;
+            }
+        }
+        return $result;
+    }
+
+    /**
+     * @return string[]
+     */
     public function getActivatedModules()
     {
         return array_keys(array_filter($this->data['modules'], function ($meta) {
@@ -182,6 +260,9 @@ class SemClass implements ArrayAccess
         }));
     }
 
+    /**
+     * @return StudipModule[]
+     */
     public function getActivatedModuleObjects()
     {
         $result = [];
@@ -194,6 +275,9 @@ class SemClass implements ArrayAccess
         return $result;
     }
 
+    /**
+     * @return mixed|object
+     */
     public function getAdminModuleObject()
     {
         if ($this->data['studygroup_mode']) {
@@ -436,8 +520,8 @@ class SemClass implements ArrayAccess
 
     /**
      * ArrayAccess method to check if an attribute exists.
-     * @param type $offset
-     * @return type
+     * @param int $offset
+     * @return bool
      */
     public function offsetExists($offset)
     {
diff --git a/resources/assets/javascripts/lib/admin_sem_class.js b/resources/assets/javascripts/lib/admin_sem_class.js
index e4fc20d227cc66047fe238f096a9bad7d70a91fe..698a8d6b2770b69a60f4f9ca046a6d7ebc34a3d7 100644
--- a/resources/assets/javascripts/lib/admin_sem_class.js
+++ b/resources/assets/javascripts/lib/admin_sem_class.js
@@ -4,77 +4,13 @@
 
 const admin_sem_class = {
     make_sortable: function() {
-        var after_update = function(event, ui) {
-            if (
-                jQuery(ui.item).is('.core') &&
-                jQuery(this).is('#activated_plugins .droparea, #nonactivated_plugins .droparea')
-            ) {
-                jQuery('#deactivated_modules .droparea').append(
-                    jQuery(ui.item)
-                        .clone()
-                        .fadeIn(1500)
-                );
-                jQuery(ui.item).remove();
-            }
-            if (jQuery(ui.item).is('.plugin:not(.core)') && jQuery(this).is('#deactivated_modules .droparea')) {
-                jQuery('#nonactivated_plugins .droparea').append(
-                    jQuery(ui.item)
-                        .clone()
-                        .fadeIn(1500)
-                );
-                jQuery(ui.item).remove();
-            }
-
-            jQuery('.droparea.limited').each(function(index, droparea) {
-                if (jQuery(this).children().length === 0) {
-                    jQuery(this).removeClass('full');
-                } else {
-                    jQuery(this).addClass('full');
-                }
-            });
-            admin_sem_class.make_sortable();
-        };
-        jQuery('.droparea').sortable({
-            connectWith: '.droparea:not(.full)',
-            revert: 200,
-            update: after_update
-        });
         jQuery('#plugins .droparea').sortable({
-            connectWith: '.droparea:not(.full, #deactivated_modules .droparea)',
-            revert: 200,
-            update: after_update
-        });
-        jQuery('#deactivated_modules .droparea').sortable({
-            connectWith: '.droparea:not(.full, #plugins .droparea)',
-            revert: 200,
-            update: after_update
+            revert: true,
         });
+
     },
     saveData: function() {
-        var core_module_slots = {};
-        jQuery.each(
-            [
-                'overview',
-                'forum',
-                'admin',
-                'documents',
-                'participants',
-                'schedule',
-                'literature',
-                'scm',
-                'wiki',
-                'calendar',
-                'elearning_interface',
-                'resources'
-            ],
-            function(index, element) {
-                var module = jQuery('div[container=' + element + '] .droparea > div.plugin').attr('id');
-                if (module) {
-                    module = module.substr(module.indexOf('_') + 1);
-                }
-                core_module_slots[element] = module ? module : '0';
-            }
-        );
+
         var modules = {};
         jQuery('div.plugin').each(function() {
             var activated = jQuery(this)
@@ -83,7 +19,7 @@ const admin_sem_class = {
             var sticky =
                 !jQuery(this)
                     .find('input[name=nonsticky]')
-                    .is(':checked') || jQuery(this).is('#deactivated_modules div.plugin');
+                    .is(':checked');
             var module_name = jQuery(this).attr('id');
             if (module_name) {
                 module_name = module_name.substr(module_name.indexOf('_') + 1);
@@ -112,7 +48,6 @@ const admin_sem_class = {
                 title_autor_plural: !jQuery('#title_autor_isnull').is(':checked')
                     ? jQuery('#title_autor_plural').val()
                     : '',
-                core_module_slots: core_module_slots,
                 modules: modules,
                 workgroup_mode: jQuery('#workgroup_mode').is(':checked') ? 1 : 0,
                 studygroup_mode: jQuery('#studygroup_mode').is(':checked') ? 1 : 0,