diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index d28e57f9c1af4ae867f4e1a1b7433166f49e4c20..3253801478f4b870e8d850f00ed08ffbd27260b5 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -55,6 +55,7 @@
   - `isMetadateCorrespondingDate ($termin_id, $begin = '', $end = '', $seminar_id='')`
   - `getPresenceTypes()`
 - Die Klasse `AuxLockRules` wurde ausgebaut. ([Issue #4187](https://gitlab.studip.de/studip/studip/-/issues/4187))
+- Die Klasse `ProfileModel` wurde gelöscht. Die darin enthaltenen Methoden wurden in den `Profile_Controller` verschoben. ([Issue #4185]https://gitlab.studip.de/studip/studip/-/issues/4185))
 
 ## Security related issues
 
diff --git a/app/controllers/profile.php b/app/controllers/profile.php
index 226890ea79d20404f8f384ce63ca0fab3964b19b..697bc68f084a43b41188442b601d6b006a75712e 100644
--- a/app/controllers/profile.php
+++ b/app/controllers/profile.php
@@ -106,11 +106,11 @@ class ProfileController extends AuthenticatedController
 
         // Additional user information
         $this->public_email = get_visible_email($this->current_user->user_id);
-        $this->motto        = $this->profile->getVisibilityValue('motto');
-        $this->private_nr   = $this->profile->getVisibilityValue('privatnr', 'private_phone');
-        $this->private_cell = $this->profile->getVisibilityValue('privatcell', 'private_cell');
-        $this->privadr      = $this->profile->getVisibilityValue('privadr', 'privadr');
-        $this->homepage     = $this->profile->getVisibilityValue('Home', 'homepage');
+        $this->motto        = $this->getVisibilityValue('motto');
+        $this->private_nr   = $this->getVisibilityValue('privatnr', 'private_phone');
+        $this->private_cell = $this->getVisibilityValue('privatcell', 'private_cell');
+        $this->privadr      = $this->getVisibilityValue('privadr', 'privadr');
+        $this->homepage     = $this->getVisibilityValue('Home', 'homepage');
 
         // skype informations
         $this->skype_name = '';
@@ -119,8 +119,8 @@ class ProfileController extends AuthenticatedController
         }
 
         // get generic datafield entries
-        $this->shortDatafields = $this->profile->getShortDatafields();
-        $this->longDatafields  = $this->profile->getLongDatafields();
+        $this->shortDatafields = $this->getShortDatafields();
+        $this->longDatafields  = $this->getLongDatafields();
 
         // get working station of an user (institutes)
         $this->institutes = $this->getInstitutInformation();
@@ -206,7 +206,7 @@ class ProfileController extends AuthenticatedController
 
         // Anzeige der Seminare, falls User = dozent
         if ($this->current_user['perms'] == 'dozent') {
-            $this->seminare = array_filter($this->profile->getDozentSeminars());
+            $this->seminare = array_filter($this->getTeacherSeminars());
         }
 
         // Hompageplugins
@@ -234,7 +234,7 @@ class ProfileController extends AuthenticatedController
         foreach ($category as $cat) {
             $head = $cat->name;
             $body = $cat->content;
-            $vis_text = "";
+            $vis_text = '';
 
             if ($this->user->user_id == $this->current_user->user_id) {
                 $vis_text .= ' (' . Visibility::getStateDescription('kat_' . $cat->kategorie_id) . ')';
@@ -521,4 +521,159 @@ class ProfileController extends AuthenticatedController
         PageLayout::setTitle(sprintf(_('Profil von %s'), $external_user['name']));
         $this->user = $external_user;
     }
+
+    /**
+     * Collect user datafield informations
+     *
+     * @return array
+     */
+    private function getDatafields(): array
+    {
+        $short_datafields = [];
+        $long_datafields  = [];
+        foreach (DataFieldEntry::getDataFieldEntries($this->current_user->user_id, 'user') as $entry) {
+            if ($entry->isVisible() && $entry->getDisplayValue()
+                && Visibility::verify($entry->getID(), $this->current_user->user_id))
+            {
+                if ($entry instanceof DataFieldTextareaEntry) {
+                    $long_datafields[] = $entry;
+                } else {
+                    $short_datafields[] = $entry;
+                }
+            }
+        }
+
+        return [
+            'long'  => $long_datafields,
+            'short' => $short_datafields,
+        ];
+    }
+
+    /**
+     * Filter long datafiels from the datafields
+     *
+     * @return array
+     */
+    private function getLongDatafields(): array
+    {
+        $datafields = $this->getDatafields();
+        $array      = [];
+
+        if (!empty($datafields)) {
+            foreach ($datafields['long'] as $entry) {
+                $array[(string)$entry->getName()] = [
+                    'content' => $entry->getDisplayValue(),
+                    'visible' => '(' . $entry->getPermsDescription() . ')',
+                ];
+            }
+        }
+
+        return $array;
+    }
+
+    /**
+     * Filter short datafiels from the datafields
+     *
+     * @return array
+     */
+    private function getShortDatafields(): array
+    {
+        $shortDatafields = $this->getDatafields();
+        $array = [];
+
+        if (!empty($shortDatafields)) {
+            foreach ($shortDatafields['short'] as $entry) {
+                $array[(string)$entry->getName()] = [
+                    'content' => $entry->getDisplayValue(),
+                    'visible' => '(' . $entry->getPermsDescription() . ')',
+                ];
+            }
+        }
+        return $array;
+    }
+
+    /**
+     * Creates an array with all seminars
+     *
+     * @return array
+     */
+    private function getTeacherSeminars(): array
+    {
+        $courses = [];
+        $semester = [];
+        $next_semester = Semester::findNext();
+        $current_semester = Semester::findCurrent();
+        $previous_semester = Semester::findPrevious();
+        if ($next_semester) {
+            $semester[$next_semester->id] = $next_semester;
+        }
+        if ($current_semester) {
+            $semester[$current_semester->id] = $current_semester;
+        }
+        if ($previous_semester) {
+            $semester[$previous_semester->id] = $previous_semester;
+        }
+        $field = 'name';
+        if (Config::get()->IMPORTANT_SEMNUMBER) {
+            $field = "veranstaltungsnummer,{$field}";
+        }
+        $allcourses = new SimpleCollection(
+            Course::findBySQL(
+                "INNER JOIN seminar_user USING(Seminar_id) WHERE user_id=? AND seminar_user.status='dozent' AND seminare.visible=1",
+                [
+                    $this->current_user->id
+                ]
+            )
+        );
+        foreach (array_filter($semester) as $one) {
+            $courses[(string) $one->name] = $allcourses->filter(function ($c) use ($one) {
+                if (Config::get()->HIDE_STUDYGROUPS_FROM_PROFILE && $c->isStudygroup()) {
+                    return false;
+                }
+                if (!$c->isOpenEnded()) {
+                    return $c->isInSemester($one);
+                } elseif ($one->isCurrent()) {
+                    return $c;
+                }
+                return false;
+            })->orderBy($field);
+
+            if (!$courses[(string) $one->name]->count()) {
+                unset($courses[(string) $one->name]);
+            }
+        }
+        return $courses;
+    }
+
+    /**
+     * Get the homepagevisibilities
+     *
+     * @return array
+     */
+    private function getHomepageVisibilities(): array
+    {
+        $visibilities = get_local_visibility_by_id(
+            $this->current_user ? $this->current_user->id : null,
+            'homepage'
+        );
+        if (is_array(json_decode($visibilities, true))) {
+            return json_decode($visibilities, true);
+        }
+        return [];
+    }
+
+    /**
+     * Returns the visibility value
+     *
+     * @param string $param
+     * @param string $visibility
+     * @return string|bool
+     */
+    private function getVisibilityValue(string $param, string $visibility = ''): string|bool
+    {
+        if (Visibility::verify($visibility ?: $param, $this->current_user->user_id)) {
+            return $this->current_user->$param;
+        }
+        return false;
+    }
 }
diff --git a/lib/classes/ProfileModel.php b/lib/classes/ProfileModel.php
deleted file mode 100644
index 6827ba62a4f1e25845a59366b678e162a3c528d0..0000000000000000000000000000000000000000
--- a/lib/classes/ProfileModel.php
+++ /dev/null
@@ -1,213 +0,0 @@
-<?php
-/**
- * ProfileModel
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * @author      David Siegfried <david.siegfried@uni-oldenburg.de>
- * @license     http://www.gnu.org/licenses/gpl-2.0.html GPL version 2
- * @category    Stud.IP
- * @since       2.4
- */
-
-class ProfileModel
-{
-    protected $perm;
-    /**
-     * Internal current selected user id
-     * @var String
-     */
-    protected $current_user;
-
-    /**
-     * Internal current logged in user id
-     * @var String
-     */
-    protected $user;
-
-    /**
-     * Internal user homepage visbilities
-     * @var array
-     */
-    protected $visibilities;
-
-    /**
-     * Get informations on depending selected user
-     * @param String $current_user
-     * @param String $user
-     */
-    public function __construct($current_user, $user)
-    {
-        $this->current_user = User::find($current_user);
-        $this->user         = User::find($user);
-        $this->visibilities = $this->getHomepageVisibilities();
-        $this->perm         = $GLOBALS['perm'];
-    }
-
-    /**
-     * Get the homepagevisibilities
-     *
-     * @return array
-     */
-    public function getHomepageVisibilities()
-    {
-        $visibilities = get_local_visibility_by_id(
-            $this->current_user ? $this->current_user->id : null,
-            'homepage'
-        );
-        if (is_array(json_decode($visibilities, true))) {
-            return json_decode($visibilities, true);
-        }
-        return [];
-    }
-
-    /**
-     * Returns the visibility value
-     *
-     * @return String
-     */
-    public function getVisibilityValue($param, $visibility = '')
-    {
-        if (Visibility::verify($visibility ?: $param, $this->current_user->user_id)) {
-            return $this->current_user->$param;
-        }
-        return false;
-    }
-
-    /**
-     * Returns a specific value of the visibilies
-     * @param String $param
-     * @return String
-     */
-
-    public function getSpecificVisibilityValue($param)
-    {
-        if (!empty($this->visibilities[$param])) {
-            return $this->visibilities[$param];
-        }
-        return false;
-    }
-
-    /**
-     * Creates an array with all seminars
-     *
-     * @return array
-     */
-    public function getDozentSeminars()
-    {
-        $courses = [];
-        $semester = [];
-        $next_semester = Semester::findNext();
-        $current_semester = Semester::findCurrent();
-        $previous_semester = Semester::findPrevious();
-        if ($next_semester) {
-            $semester[$next_semester->id] = $next_semester;
-        }
-        if ($current_semester) {
-            $semester[$current_semester->id] = $current_semester;
-        }
-        if ($previous_semester) {
-            $semester[$previous_semester->id] = $previous_semester;
-        }
-        $field = 'name';
-        if (Config::get()->IMPORTANT_SEMNUMBER) {
-            $field = "veranstaltungsnummer,{$field}";
-        }
-        $allcourses = new SimpleCollection(Course::findBySQL("INNER JOIN seminar_user USING(Seminar_id) WHERE user_id=? AND seminar_user.status='dozent' AND seminare.visible=1", [$this->current_user->id]));
-        foreach (array_filter($semester) as $one) {
-            $courses[(string) $one->name] = $allcourses->filter(function ($c) use ($one) {
-                if (Config::get()->HIDE_STUDYGROUPS_FROM_PROFILE && $c->isStudygroup()) {
-                    return false;
-                }
-                if (!$c->isOpenEnded()) {
-                    return $c->isInSemester($one);
-                } elseif ($one->isCurrent()) {
-                    return $c;
-                }
-                return false;
-            })->orderBy($field);
-
-            if (!$courses[(string) $one->name]->count()) {
-                unset($courses[(string) $one->name]);
-            }
-        }
-        return $courses;
-    }
-
-    /**
-     * Collect user datafield informations
-     *
-     * @return array
-     */
-    public function getDatafields()
-    {
-        // generische Datenfelder aufsammeln
-        $short_datafields = [];
-        $long_datafields  = [];
-        foreach (DataFieldEntry::getDataFieldEntries($this->current_user->user_id, 'user') as $entry) {
-            if ($entry->isVisible() && $entry->getDisplayValue()
-                && Visibility::verify($entry->getID(), $this->current_user->user_id))
-            {
-                if ($entry instanceof DataFieldTextareaEntry) {
-                    $long_datafields[] = $entry;
-                } else {
-                    $short_datafields[] = $entry;
-                }
-            }
-        }
-
-        return [
-            'long'  => $long_datafields,
-            'short' => $short_datafields,
-        ];
-    }
-
-    /**
-     * Filter long datafiels from the datafields
-     *
-     * @return array
-     */
-    public function getLongDatafields()
-    {
-        $datafields = $this->getDatafields();
-        $array      = [];
-
-        if (empty($datafields)) {
-            return null;
-        }
-        foreach ($datafields['long'] as $entry) {
-            $array[(string) $entry->getName()] = [
-                'content' => $entry->getDisplayValue(),
-                'visible' => '(' . $entry->getPermsDescription() . ')',
-            ];
-        }
-
-        return $array;
-    }
-
-    /**
-     * Filter short datafiels from the datafields
-     *
-     * @return array
-     */
-    public function getShortDatafields()
-    {
-        $shortDatafields = $this->getDatafields();
-        $array = [];
-
-        if (empty($shortDatafields)) {
-            return null;
-        }
-
-        foreach ($shortDatafields['short'] as $entry) {
-            $array[(string) $entry->getName()] = [
-                'content' => $entry->getDisplayValue(),
-                'visible' => '(' . $entry->getPermsDescription() . ')',
-            ];
-        }
-        return $array;
-    }
-}