diff --git a/lib/models/RangeTreeNode.php b/lib/models/RangeTreeNode.php
index d1c182383961b38f38d1a6c26cd766cdf240f84b..4d52fedaf718b57f137e28e2bc625b48959a09f8 100644
--- a/lib/models/RangeTreeNode.php
+++ b/lib/models/RangeTreeNode.php
@@ -146,6 +146,10 @@ class RangeTreeNode extends SimpleORMap implements StudipTreeNode
             $parameters = ['ids' => $with_children ? $this->getDescendantIds() : [$this->id]];
         }
 
+        if (!$GLOBALS['perm']->have_perm(Config::get()->SEM_VISIBILITY_PERM)) {
+            $query .= " AND s.`visible` = 1";
+        }
+
         if ($semclass !== 0) {
             $query .= "  AND s.`status` IN (:types)";
             $parameters['types'] = array_map(
@@ -200,6 +204,10 @@ class RangeTreeNode extends SimpleORMap implements StudipTreeNode
             $parameters = ['ids' => $with_children ? $this->getDescendantIds() : [$this->id]];
         }
 
+        if (!$GLOBALS['perm']->have_perm(Config::get()->SEM_VISIBILITY_PERM)) {
+            $query .= " AND s.`visible` = 1";
+        }
+
         if ($searchterm) {
             $query .= " AND s.`Name` LIKE :searchterm";
             $parameters['searchterm'] = '%' . trim($searchterm) . '%';
diff --git a/lib/models/StudipStudyArea.class.php b/lib/models/StudipStudyArea.class.php
index 6134fdaf4f7f8091d1975010e2c337164ee72742..1ea7722fc47cc0feb89c3f60a3f2f35f9954f502 100644
--- a/lib/models/StudipStudyArea.class.php
+++ b/lib/models/StudipStudyArea.class.php
@@ -498,6 +498,10 @@ class StudipStudyArea extends SimpleORMap implements StudipTreeNode
             $parameters = ['ids' => $with_children ? $this->getDescendantIds() : [$this->id]];
         }
 
+        if (!$GLOBALS['perm']->have_perm(Config::get()->SEM_VISIBILITY_PERM)) {
+            $query .= " AND s.`visible` = 1";
+        }
+
         if ($semclass !== 0) {
             $query .= "  AND s.`status` IN (:types)";
             $parameters['types'] = array_map(
@@ -544,6 +548,10 @@ class StudipStudyArea extends SimpleORMap implements StudipTreeNode
             $parameters = ['ids' => $with_children ? $this->getDescendantIds() : [$this->id]];
         }
 
+        if (!$GLOBALS['perm']->have_perm(Config::get()->SEM_VISIBILITY_PERM)) {
+            $query .= " AND s.`visible` = 1";
+        }
+
         if ($semclass !== 0) {
             $query .= "  AND s.`status` IN (:types)";
             $parameters['types'] = array_map(