diff --git a/db/migrations/5.1.48_cleanup_consultation_responsibilities.php b/db/migrations/5.1.48_cleanup_consultation_responsibilities.php
new file mode 100644
index 0000000000000000000000000000000000000000..0dc3bfc988c0b99e18197830c33c58c07cd48c97
--- /dev/null
+++ b/db/migrations/5.1.48_cleanup_consultation_responsibilities.php
@@ -0,0 +1,33 @@
+<?php
+final class CleanupConsultationResponsibilities extends Migration
+{
+    public function description()
+    {
+        return 'Remove all orphaned entries in table "consultation_responsibilities"';
+    }
+
+    protected function up()
+    {
+        $query = "DELETE FROM `consultation_responsibilities`
+                  WHERE (
+                    `range_type` = 'user'
+                    AND `range_id` NOT IN (
+                        SELECT `user_id`
+                        FROM `auth_user_md5`
+                    )
+                  ) OR (
+                    `range_type` = 'institute'
+                    AND `range_id` NOT IN (
+                        SELECT `Institut_id`
+                        FROM `Institute`
+                    )
+                  ) OR (
+                    `range_type` = 'statusgroup'
+                    AND `range_id` NOT IN (
+                        SELECT `statusgruppe_id`
+                        FROM `statusgruppen`
+                    )
+                  )";
+        DBManager::get()->exec($query);
+    }
+}
diff --git a/lib/models/ConsultationResponsibility.php b/lib/models/ConsultationResponsibility.php
index 9634d415394c8d0ec0e7c59ce35a00164a1fcf94..72cd12eb16ba89b042742f969fa8cef4ce1296ed 100644
--- a/lib/models/ConsultationResponsibility.php
+++ b/lib/models/ConsultationResponsibility.php
@@ -24,6 +24,49 @@ class ConsultationResponsibility extends SimpleORMap
         parent::configure($config);
     }
 
+    /**
+     * Finds all responsibilities for a given user id.
+     *
+     * @param string $user_id
+     * @return array
+     */
+    public static function findByUserId(string $user_id): array
+    {
+        return self::findBySQL(
+            "range_id = ? AND range_type = 'user'",
+            [$user_id]
+        );
+    }
+
+    /**
+     * Finds all responsibilities for a given institute id.
+     *
+     * @param string $institute_id
+     * @return array
+     */
+    public static function findByInstituteId(string $institute_id): array
+    {
+        return self::findBySQL(
+            "range_id = ? AND range_type = 'institute'",
+            [$institute_id]
+        );
+    }
+
+    /**
+     * Finds all responsibilities for a given statusgroup id.
+     *
+     * @param string $statusgroup_id
+     *
+     * @return array
+     */
+    public static function findByStatusgroupId(string $statusgroup_id): array
+    {
+        return self::findBySQL(
+            "range_id = ? AND range_type = 'statusgroup'",
+            [$statusgroup_id]
+        );
+    }
+
     /**
      * Returns the name of the associated responsibility.
      *
diff --git a/lib/models/Institute.class.php b/lib/models/Institute.class.php
index 9e662cc32e2e026973fcba978aa087de58d75ad0..b6ec72bcdb1dff51f6afaa70fb99eb49002942cf 100644
--- a/lib/models/Institute.class.php
+++ b/lib/models/Institute.class.php
@@ -37,6 +37,9 @@
  * @property SimpleORMapCollection datafields has_many DatafieldEntryModel
  * @property Institute faculty belongs_to Institute
  * @property SimpleORMapCollection courses has_and_belongs_to_many Course
+ *
+ * @property ConsultationBlock[]|SimpleORMapCollection $consultation_blocks
+ * @property ConsultationResponsibility[]|SimpleORMapCollection $consultation_responsibilities
  */
 
 class Institute extends SimpleORMap implements Range
@@ -112,6 +115,11 @@ class Institute extends SimpleORMap implements Range
             'assoc_foreign_key' => 'range_id',
             'on_delete'         => 'delete',
         ];
+        $config['has_many']['consultation_responsibilities'] = [
+            'class_name'        => ConsultationResponsibility::class,
+            'assoc_func'        => 'findByInstituteId',
+            'on_delete'         => 'delete',
+        ];
         $config['has_many']['tools'] = [
             'class_name'        => ToolActivation::class,
             'assoc_foreign_key' => 'range_id',
diff --git a/lib/models/Statusgruppen.php b/lib/models/Statusgruppen.php
index 64623b2a23717b4030fe09865bfd375805992a94..ebf8e133f0079d79e6bf5829e71db9fc99017571 100644
--- a/lib/models/Statusgruppen.php
+++ b/lib/models/Statusgruppen.php
@@ -36,6 +36,9 @@
  * @property Course course belongs_to course
  * @property Institute institute belongs_to institute
  * @property User user belongs_to user
+ *
+ * @property ConsultationBlock[]|SimpleORMapCollection $consultation_blocks
+ * @property ConsultationResponsibility[]|SimpleORMapCollection $consultation_responsibilities
  */
 class Statusgruppen extends SimpleORMap implements PrivacyObject
 {
@@ -77,6 +80,17 @@ class Statusgruppen extends SimpleORMap implements PrivacyObject
             'on_store' => 'store',
             'on_delete' => 'delete'
         ];
+        $config['has_many']['consultation_blocks'] = [
+            'class_name'        => ConsultationBlock::class,
+            'assoc_foreign_key' => 'range_id',
+            'on_delete'         => 'delete',
+        ];
+        $config['has_many']['consultation_responsibilities'] = [
+            'class_name'        => ConsultationResponsibility::class,
+            'assoc_func'        => 'findByStatusgroupId',
+            'on_delete'         => 'delete',
+        ];
+
         $config['additional_fields']['children'] = true;
 
         $config['default_values']['position'] = null;
diff --git a/lib/models/User.class.php b/lib/models/User.class.php
index 4510e01301751e87a6d5a2c007986d60e00d3d44..9fa05226859b03bdb23370ce09ed3ff5375a3688 100644
--- a/lib/models/User.class.php
+++ b/lib/models/User.class.php
@@ -68,6 +68,9 @@
  * @property UserOnline online has_one UserOnline
  * @property Kategorie[]|SimpleORMapCollection $profile_categories has_many Kategorie
  * @property UserDomain[]|SimpleORMapCollection $domains
+ * @property ConsultationBlock[]|SimpleORMapCollection $consultation_blocks
+ * @property ConsultationBooking[]|SimpleORMapCollection $consultation_bookings
+ * @property ConsultationResponsibility[]|SimpleORMapCollection $consultation_responsibilities
  *
  * @property UserConfig config
  */
@@ -161,6 +164,11 @@ class User extends AuthUserMd5 implements Range, PrivacyObject
             'class_name' => ConsultationBooking::class,
             'on_delete'  => 'delete',
         ];
+        $config['has_many']['consultation_responsibilities'] = [
+            'class_name'        => ConsultationResponsibility::class,
+            'assoc_func'        => 'findByUserId',
+            'on_delete'         => 'delete',
+        ];
         $config['has_many']['profile_categories'] = [
             'class_name'        => Kategorie::class,
             'assoc_foreign_key' => 'range_id',