diff --git a/app/controllers/course/basicdata.php b/app/controllers/course/basicdata.php
index e0611ed62c8dcac2d78b23e2a5487bd694cd0d33..62385e435d3e0a975d242c0a2d5ebe315efdf171 100644
--- a/app/controllers/course/basicdata.php
+++ b/app/controllers/course/basicdata.php
@@ -956,20 +956,30 @@ class Course_BasicdataController extends AuthenticatedController
     private function _getTypes($sem, $data, &$changable = true)
     {
         $sem_types = [];
+
+        $sem_classes = [];
         if ($GLOBALS['perm']->have_perm("admin")) {
             foreach (SemClass::getClasses() as $sc) {
                 if (!$sc['course_creation_forbidden']) {
-                    $sem_types[$sc['name']] = array_map(function ($st) {
-                        return $st['name'];
-                    }, $sc->getSemTypes());
+                    $sem_classes[] = $sc;
                 }
             }
         } else {
-            $sc = $sem->getSemClass();
+            $sem_classes[] = $sem->getSemClass();
+        }
+
+        if (!$sem->isStudyGroup()) {
+            $sem_classes = array_filter($sem_classes, function (SemClass $sc) {
+                return !$sc['studygroup_mode'];
+            });
+        }
+
+        foreach ($sem_classes as $sc) {
             $sem_types[$sc['name']] = array_map(function ($st) {
                 return $st['name'];
             }, $sc->getSemTypes());
         }
+
         if (!in_array($data['status'], array_flatten(array_values(array_map('array_keys', $sem_types))))) {
             $class_name = $sem->getSemClass()->offsetGet('name');
             if (!isset($sem_types[$class_name])) {